zoukankan      html  css  js  c++  java
  • 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的两倍。

    四---习题与总结

     

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

  • 相关阅读:
    struts2知识系统整理
    JavaScript onload
    百度云如何为用户分配内存空间
    集合运算
    [hdu3530]单调队列
    [hdu4911]逆序对相关
    [hdu5199]统计数据的水题
    [hdu5200]离线+标记
    [hdu5204]水题
    [hdu5203]计数水题
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14243259.html
Copyright © 2011-2022 走看看