TCP协议中RTO的计算

说明:  本文仅供学习交流,转载请标明出处,欢迎转载!

本文是以下文献相关内容的总结

[1] 《TCP/IP详解 卷1:协议》

[2] 《TCP/IP协议族 第4版》

[3] 《计算机网络 第5版》

TCP协议中经常会发生超时重传的情况,我们知道超时重传中的“时”是即RTO。RTO是Retransmission Time-OutD的缩写,该时间决定了发送方在发送数据后,在多长时间内如果没有收到ACK,就重置重传计时器,并重传上次发送失败的报文。那么RTO是如何计算的呢?

RTO说白了就是根据RTT(往返时延)而确定的。但是我们知道,RTT是一个不确定的数值,因为TCP以下的网络层相当负责,每个报文发送出去后的RTT不一定相同。这样就使得RTO的计算也比较难。为了给出一个比较合理的RTO,我们需要采用统计学里面的一些方法。首先我们介绍几个RTT变量,分别是:RTTm(测量RTT),RTTs(平滑RTT),RTTD(偏差RTT)

 RTTm:m可以看成measure的缩写,它是本次时间测量的RTT值,当然本次测量不能代表着一个绝对正确的值。

 注意:关于测量RTTm的获取,我们可以有不同的方法。我们可以在发送端设置计时器,也可以在发送的TCP报文选项中添加时间戳选项,用于记录发送时间,接收方接到该报文后,把该发送时间从报文中复制到ACK报文发回给发送端。所以,RTTm的计算方法并不唯一。前者比后者快,因为报文比后者短。

RTTs:s是Smoothed的缩写,我们可以把RTTs看成是一个平均的RTT,相当于一个累积的RTT的期望值,它不仅考虑本次测量到的RTT值,还会吸取历史经验,考虑以前的RTT的值,且之前的RTT的值占的比重远高于本次测量的RTT(即RTTm)。所以,RTTm(本次测到的RTT)只是整体RTT的一个样本

注意:我们可以将RTTs看成RTT的一个平均值(或期望值)

 RTTD:D是Deviation(偏差)的缩写,偏差说白了就是误差值,它也是一个经验累加值。跟RTTm一样,它会将之前采用的RTTD作为一个参考,同时累加上当前的偏差。

注意:偏差我们可以看做是测量值与平均值(或期望值)之差的绝对值。所以本次RTTD=|RTTm-RTTs|。

RTO: RTO主要考虑RTT的期望值和偏差。

综上的理解,我们就可以很快理解并记住以下公式:

第一次测量时,RTTm是我们测量的结果,RTTs=RTTm,RTTD=RTTm/2

以后每次测量采用以下公式:

RTTs=(1-a)*RTTs+a*RTTm,a通常为1/8,即0.125.................................公式1

RTTD= (1-b)*RTTD+b*|RTTm-RTTs|,b通常为1/4,即0.25...........................公式2

RTO=RTTs+4RTTD....................................................................................公式3

说明:公式3不管是第一次计算还是最后一次,都是采用该公式。

 FAQ:假设发送端发送一个报文后,在RTO内没有收到ACK,发送端重传该报文,并重置计时器。后来发送端收到了ACK,但是发送比较困惑的是该报文的ACK是之前发送的报文对应的ACK(可能在网络中呆了很长时间)还是本次发送的报文对应的ACK,由于这个事实不能确定,所以本次获得的RTTm是不准确的,那如何更新RTO呢?

方法一:放弃考虑本次获得的RTTm,因为我们无法测得一个准确的信息(即该ACK到底对应哪个报文),该处理方法称之为Karn算法。很明显,该算法的缺点是没有考虑本次测量值,例如,为什么会要求重传?如果不是网络不拥挤会要求重传吗?这些问题都被简单的抛弃了。

方法二:考虑到方法一的缺点和优点,通常采取的做法是:不考虑获取的RTTm,因为不确定是否正确(这是利用Karn算法的优点),同时每发生一次重传,RTO就加倍,即RTO=2*RTO(弥补了Karn算法的不足),该方法称为指数退避

TCP协议中RTO的计算

时间: 2024-10-05 05:07:37

TCP协议中RTO的计算的相关文章

TCP 协议中的 Window Size与吞吐量

原地址:http://blog.sina.com.cn/s/blog_c5c2d6690102wpxl.html TCP协议中影响实际业务流量的参数很多,这里主要分析一下窗口的影响. ?TCP窗口目的 为了获得最优的连接速率,使用TCP窗口来控制流速率(flow control),滑动窗口就是一种主要的机制.这个窗口允许源端在给定连接传送数据分段而不用等待目标端返回ACK,一句话描述:窗口的大小决定在不需要对端响应(acknowledgement)情况下传送数据的数量.?官方定义:"The am

TCP协议中的计时器

说明:  本文仅供学习交流,转载请标明出处,欢迎转载! 本文是以下文献相关内容的总结 [1] <TCP/IP详解 卷1:协议> [2] <TCP/IP协议族 第4版> [3] <计算机网络 第5版> TCP协议通常包括4种计时器:重传计时器.持续计时器.保活计时器和时间等待计时器. 重传计时器:Retransmission Timer,该计时器用于整个连接期间,用于处理RTO(重传超时).当一个报文从发送队列发出去后,就启动该计时器.若在RTO之内收到了该报文的ACK,

TCP协议中的三次握手和四次挥手(图解)【转】

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. [更新于2017.01.04 ]该部分内容配图有误,请大家见谅,正确的配图如下,错误配图也不删了,大家可以比较下,对比理解效果更好.这么久才来更新,抱歉!! 错误配图如下: 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?

TCP协议中的SO_LINGER选项

TCP协议中的SO_LINGER选项 SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成.没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工作并返回.如果设置了SO_LINGER选项,并且等待时间为正值,则在清理之前会等待一段时间. 以调用close()主动关闭为例,在发送完FIN包后,会进入FIN_WAIT_1状态.如果没有延迟关闭(即设置SO_LINGER选项),在调用tcp_send_fin()发送FIN后会立即调用sock_or

TCP协议中的标志位

TCP/IP协议通常放在一起来说,但是它们是两个不同的协议,所起的作用也不一样. IP协议是用来查找地址的,对应于网际互联层. TCP协议是用来规范传输规则的,对应着传输层. IP协议只负责找到地址,具体传输的工作交给TCP来完成. TCP在传输之前会进行三次沟通,一般称为“三握手”:传输数据断开的时候需要进行四次沟通,一般称为“四挥手”. 要理解这个过程首先需要理解TCP中的两个序号和三个标志位的含义: seq:sequence number的缩写,表示所传数据的序号.TCP传输时每一个字节都

TCP 协议中MSS的理解

在介绍MSS之前我们必须要理解下面的几个重要的概念.MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE: PPP Over Ethernet(在以太网上承载PPP协议),就是因为这个协议的出现我们才有必要修改我们的MSS或者是MTU值.MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC          

tcp协议中mss的理解

在介绍MSS之前我们必须要理解下面的几个重要的概念.<blockquote>MTU: Maxitum Transmission Unit 最大传输单元MSS: Maxitum Segment Size 最大分段大小PPPoE: PPP Over Ethernet(在以太网上承载PPP协议),就是因为这个协议的出现我们才有必要修改我们的MSS或者是MTU值.</blockquote>MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构&l

对于TCP协议中IOCP模型的一些简单的理解

请不要觉得这一篇没有代码的文章没意义,对IOCP模型的代码,百度搜索可以得到很多,但是后续很多需要纠结的地方,很多人都经历过,如果你已经在尝试写IOCP服务端了,那么你很可能会对写代码之外的一些设计问题很纠结,那么本文很可能是对你有所帮助的,这一个帖子是我开的讨论帖,我不是很懂CSDN的帖子分数的意义,我觉得那对于我这种1年难得发1贴的人来说估计也没什么作用,但我很希望大家能一起参与进来讨论:http://bbs.csdn.net/topics/390890567?page=1#post-398

TCP协议中是如何保证报文可靠传输的

1.什么是TCP的可靠传输 它向应用层提供的数据是无差错的.有序的.无丢失的,换言之就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. 2.TCP保证可靠传输的办法有哪些? TCP采用了流量控制.拥塞控制.连续ARQ等技术来保证它的可靠性. 3.停止等待协议 AQR协议:当请求失败时它会自动重传,直到请求被正确接收为止.这种机制保证了每个分组都能被正确接收.停止等待协议是一种ARQ协议. 停止等待协议的原理 无差错的情况:A向B每发送一个分组,都要停止发送,等待B的确认应答:A只