TCP超时重传时间的选择

一---导读

  TCP超时重传时间的选择是计算机网络中较复杂的问题之一,但幸好前辈们都把路铺好了,我们只需要学习并且遵循这些规则,有能力的话去进一步改正。

二---必知的一些专业术语

A--RTT( round-trip time)往返时延。代表TCP发送方从发送报文段开始,到接收到接收方发送的确认报文段的这段时间.

B--RTO(Retransmissinon Time -out)超时重传时间。

三---重传时间的公式和选择

思考这样两个问题,如果超时重传时间RTO设置的比往返时间RTT还要小,那么在发送方还没收到确认之前,该数据报文段发生了不必要的重传。多此一举。

如果超时重传时间RTO设置的比往返时延RTT大很多,那么网络空闲的时间就会较大(因为在重传时间内,不能进行其它报文段的发送),减低了网络传输的效率。

通过以上两个问题总结我们是否可以得出这样的结论:超时重传时间RTO的值是不是设置的比第一次往返时间RTT0的值略大就行了呢?答案是否定的,网络速率千变万化,受很多因素(如路由器,带宽)的影响,可能第一次RTT0是一个值,第二次RTT1的值又是另外一个值,那么如果把RTO的值固定写死那就行不通。

上图表面如果RTO固定的话会造成“TCP数据报文段1”发生不必要的重传

第二次的RTT1要大于第一次的RTT0,于是第一次的RT0的选择值在这里就不适合了。针对这一个复杂的问题,我们不能用某次测量的值来计算超时重传时间RTO。这时就需要借鉴中华名族的优秀传统-折中。利用每次测量的RTT样本,然后取一个加权平均值RTTs。
新的加权平均往返时间RTTs = (1 - a)x 旧的RTTs + a x 新的RTT样本(其中0 < a < 1)
如果 a很小,趋近于0,说明新的RTT样本作用不大。
如果 a 很大,趋近于1,则说明旧的RTTs对新的RTTs的影响很小。

现在通用的a的取值为1/8,即0.125。
显然,新的RT0的值应该要略大于RTTs的值。
RTO = RTTs + 4 x RTTd(RTTd为RTT偏差的加权平均)

RTTd1 = RTT1 / 2
新的RTTd = (1-B) x 旧的RTTd+B x |RTTs-新的RTT样本| 。  (其中0< B<1)
B的建议取值为1/4,即0.25

 从上面可以看出,新的RTT样本的计算正确与否特别重要。

RTT的测量容易出现下面图示的问题

 

 解决上面问题的办法是:报文段每重传一次,就增大RTO的值,典型的做法是把新的RTO的值取值为旧RTO的两倍。

四---习题与总结

 

超时重传时间的问题比较复杂,但重要的是理解并记忆两个公式,最后,以一个练习来结束总结本文,如下图

原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14243259.html