首页 > 其他分享 >《计算机网络微课堂》5-6 TCP超时重传时间的选择

《计算机网络微课堂》5-6 TCP超时重传时间的选择

时间:2024-05-29 10:23:32浏览次数:11  
标签:重传 主机 报文 TCP RTT 超时 RTO

本节课我们介绍 TCP 超时重传时间的选择,超时重传时间的选择是 TCP 最复杂的问题之一。

我们来举例说明,假设主机 A 和 B 是因特网上的两台主机,他们之间已经建立了 TCP 连接,纵坐标为时间,现在主机 A 给主机 B 发送 TCP 数据报文段 0,并记录下当前的时间。

主机 B 收到后给主机 A 发送相应的确认报文段。主机 A 收到确认报文段后,记录下当前的时间。

那么主机 A 记录下的这两个时间,它们的差值,就是报文段的往返时间 RTT 由于这是第 0 个报文段的 RTT,我们就用 RTT0 来表示。试想一下,如果我们将超时重穿时间,RTO 的值设置的比 RTT0 的值小,会出现怎样的情况?很显然这会引起报文段不必要的重传,使网络负荷增大。

那么如果将超时重传时间,RTO 的值设置的远大于 RTT0 的值,又会出现怎样的情况?很显然这会使重传推迟的时间太长,使网络的空闲时间增大,降低了传输效率。

综合上述两种情况,我们可以得出这样的结论,超时重传时间 RTO 的值应该设置为略大于报文段往返时间 RTT 的值。至此同学们可能会觉得超时重传时间的选择也并不是很复杂,然而 TCP 下层是复杂的互联网环境,主机 A 所发送的报文段可能只经过一个高速率的局域网,也有可能经过多个低速率的网络,并且每个 IP 数据报的转发路由还可能不同。

例如现在主机 A 给主机 B 发送 TCP 数据报文段 1,主机 B 收到后,给主机 A 发送相应的确认报文段,主机 A 这次测得的报文段往返时间 RTT 一如图所示,显然 RTT1 远大于 RTT0,如果超时重装时间 RTO 还是我们之前所确定的略大于 RTT0 的话,这对于数据报文段 1 是不合适的,会造成该报文段不必要的重传。

这样看来超时重传时间的选择确实不那么简单了,我们不能直接使用某次测量得到的 RTT 样本来计算超时重装时间 RTO,但是我们可以利用每次测量得到的 RTT 样本,计算加权平均往返时间 RTTS,这样可以得到比较平滑的往返时间。当测量到第一个 RTT 样本时,RTTS 的值直接取为第一个 RTT 样本的值,以后每测量到一个 RTT 样本时,都按该公式来计算新的 RTT S 值。

在上式中阿尔法的取值大于等于 0,且小于一,若阿尔法很接近于零,则新 RTT 样本对 RTTS 的影响不大,若阿尔法很接近于一则新 RTT 样本,对 RTTS 的影响较大,已成为建议标准的 RFC6298,推荐的阿尔法值为 1/8,即 0.125,用这种方法得出的加权平均往返时间 RTTS 的值就要比测量出的 RTT 的值更加平滑。

显然超时重传时间,RTO 的值应略大于加权平均往返时间 RTTS 的值。

下面我们给出 RFC6298 建议使用的超时重传时间 RTO 的计算公式,该公式中的 RTTS 是加权平均往返时间,我们刚刚介绍过它的计算方法,RTTD 是 RTT 偏差的加权平均,计算方法如下,当测量到第一个 RTT 样本时,RTTD 的值取为该样本值的一半,以后每测量到一个 RTT 样本时,都按该公式来计算新的 RTTD 的值。

在上式中贝塔的取值大于等于 0 且小于 1,已成为建议标准的 RFC6298 推荐的贝塔值为 1/4,即 0.25。我们可以发现不管是 RTTS 还是 RTTD 都是基于所测量到的 RTT 样本进行计算的。如果所测量到的 RTT 样本不正确,那么所计算出的 RTTS 和 RTTD 自然就要不正确,进而所计算出的超时重穿时间 RTO 也就不正确。

然而往返时间 RTT 的测量确实是比较复杂的。我们来举例说明,主机 A 给主机 B 发送 TCP 数据报文段,但该报文段在传输过程中丢失了,当超时重传计时器超时后,主机 A 就重传该报文段,主机 B 收到后给主机 A 发送确认报文段。现在问题来了,主机 A 收到该确认报文段后,无法判断该报文段是对原报文段的确认,还是对重传报文段的确认。

该报文段实际上是对重传报文段的确认,也就是说正确的 RTT 应该是这一段时间。但是如果主机 A 误将该确认当做是对原报文段的确认,也就是误认为这段时间是 RTT 则所计算出的 RTTS 和 RTO 就会偏大,降低了传输效率。

再来看另一种情况,主机 A 给主机 B 发送 TCP 数据报文段,主机 B 收到后给主机 A 发送确认报文段,由于某种原因,该确认报文段没有在正常时间内到达主机 A 这必然会导致主机 A 对之前所发送的数据报文段的超时重传。现在问题又来了,主机 A 收到迟到的确认报文段后,无法判断该报文段是对原报文段的确认,还是对重传报文段的确认。

该报文段实际上是对原报文段的确认,也就是说正确的 RTT 应该是这一段时间。但是如果主机 A 误将该确认当做是对重传报文段的确认,也就是误认为这段时间是 RTT,则所计算出的 RTTS 和 RTO 就会偏小,这会导致报文段没有必要的重传,增大网络负荷。

通过这两个例子可以看出,当发送方出现超时重传后,收到确认报文段时,是无法判断出该确认到底是对原报文段的确认,还是对重传报文段的确认,也就是无法准确测量出 RTT,进而无法正确计算超时重传时间 RTO。

因此针对出现超时重传时,无法测准往返时间 RTT 的问题,Karn 提出了一个算法,在计算加权平均往返时间 RTTS 时,只要报文段重传了,就要不采用其往返时间 RTT 样本,也就是出现重传时,不重新计算 RTTS,进而超时重传时间 RTO 也不会重新计算。然而这要引起了新的问题,设想出现这样的情况,报文段的时延突然增大了很多,并且之后很长一段时间内都会保持这种时延,因此在原来得出的重传时间内,不会收到确认报文段,于是就重传报文段。

根据 Karn 算法,不考虑重传的报文段的往返时间样本,这样超时重传时间就要无法更新,这会导致报文段反复被重传。因此要对 Karn 算法进行修正,方法是报文段每重传一次,就把超时重传时间 RTO 增大一些,典型的做法是将新 RTO 的值取为旧 RTO 值的两倍。

接下来我们举例说明,TCP 超时重传时间的计算,这是测量得到的第一个 RTT 样本 RTT1。根据 RTTS1 的计算公式可知 RTTS1 的值.根据 RTTDE 的计算公式,可知 RTTD1 的值在根据 IPO 的计算公式可计算出 RTO1 的值,这是测量得到的第二个 RTT2,根据 RTTS2 的计算公式和阿尔法的值和写出计算 RTTS2 的表达式,将之前计算出的 RTTS1 的值和本次测量得到的 RTT2 的值代入干涉,可计算出 RTTS2 的值。根据 RTTD 的计算公式和贝塔的值,可写出计算 RTTD2 的表达式,将之前计算出的 RTTD1,RTTS,1 以及本次测量得到的 RTT2 的值,代入该式,可计算出 RTTD2 的值。再根据 RTO 的计算公式,可计算出 RTO2 的值。

假设这是测量得到的第 3 个和第 4 个 RTT 样本。计算一下 RTO3 和 RTO4 的值分别是多少?答案如图所示,相信大家都能正确解答。假设这是测量得到的第 5 个 RTT 样本,但是根据 RTO4 的值可知,在收到确认之前就会产生超时重传。我们之前介绍过,若出现超时重传,则不采用上述公式计算 RTO,而是将新 RTO 的值取为旧 RTO 值的两倍。因此 RTO5 的值取为两倍的 RTO4 的值。

本节课的内容小结如下:

标签:重传,主机,报文,TCP,RTT,超时,RTO
From: https://www.cnblogs.com/PeterJXL/p/18214985

相关文章

  • 《计算机网络微课堂》5-5 TCP的拥塞控制
    本节课我们介绍TCP的拥塞控制,首先来看拥塞控制的基本概念:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞在计算机网络中的链路容量,交换节点中的缓存和处理机等都是网络的资源,若出现拥塞而不进行控制,整个网络的吞吐量......
  • 《计算机网络微课堂》5-4 TCP的流量控制
    本节课我们介绍TCP的流量控制:一般来说我们总是希望数据传输的更快一些但如果发送方把数据发送的过快,接收方就可能来不及接收,这就会造成数据的丢失所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收利用滑动窗口机制,可以很方便的在TCP连接上实现对发送方的......
  • 《计算机网络微课堂》5-3 UDP和TCP的对比
    本节课我们将从几个方面对比UDP和TCP。UDP和TCP是TCP/IP体系结构运输层中的两个重要协议,如图所示,这是我们之前课程中介绍过的TCP/IP体系结构,它的运输层有两个非常重要的协议UDP和TCP。在使用TCP/IP体系结构的网络通信中,这两个协议的使用频率仅次于往基层的IP协......
  • TCP和UDP协议的特点和用途
    TCP(TransmissionControlProtocol):特点:面向连接、可靠传输、按序交付、流量控制、拥塞控制。用途:适用于需要高可靠性的数据传输,如网页浏览、电子邮件、文件传输等。优势:数据包顺序和完整性有保障,适合需要准确无误传输数据的场景。举例:在线购物网站的交易数据传输,确保每笔交易......
  • Modbus TCP报文详解
    一、ModbusTCP协议构成ModbusTCP通信协议主要包括三个部分:报文头(MBAP)、功能码和数据。ModbusTCP/IP协议的最大数据帧为260个字节。二、MBAP报文头构成MBAP报文头占7个字节,具体构成如下:事务处理标识符(TransactionIdentifier):2个字节,为此次通信事务处理标识符,一般每次通信......
  • C++ - TCP粘包解决方法
     下面的代码演示了粘包问题,客户端连续三次向服务器端发送数据,服务器端却一次性接收到所有数据。服务器代码#define_WINSOCK_DEPRECATED_NO_WARNINGS#include<iostream>usingnamespacestd;//#include<stdio.h>#include<WinSock2.h>​//#pragmacomment(lib,"ws2_......
  • 一、TCP/IP协议
    学习自######https://xiaolincoding.com/network/1_base/tcp_ip_model.html#%E5%BA%94%E7%94%A8%E5%B1%82前提同一设备间的通信:管道、消息队列、共享内容、信号等方式不同设备间的通信:通用的网络协议来兼容各种设备网络协议是分层的:应用层、传输层、网络层、网络接口层应......
  • TCP滑动窗口
    发送方发送报文不再使用一个一个报文发送然后等待一个一个确认,而是进行一段(多个报文)发送接收方接收到数据后,发送当前接收到数据序列值+1,以及下一次可以接收的窗口值 也就是说,发送方需要配合接收方接受的窗口大小来确定数值发送 发送方窗口左边为后沿,右边为前沿。1.当......
  • [Java EE] 网络编程与通信原理(三):网络编程Socket套接字(TCP协议)
    ......
  • 《TCP/IP网络编程》(第十章)多进程服务器端(2)
    基于进程的并发服务器我们将扩展之前的回声服务器,使其可以同时向多个客户端体提供服务,实现模型如下图所示即每当有客户端向服务器请求服务时,服务器端都创建一个子进程为其提供服务,比如有5个客户端请求服务,则创建个5子进程。通过fork()复制的文件描述符下图是父进程调用......