TCP/IP RTT算法比较

TCP重传机制Timeout特点:

  • 设长了,重发就慢,效率和性能差;
  • 设短了,重发就快,可能导致没有丢就重发,增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。

 

TCP协议引入2个概念:

  RTT——Round Trip Time(一个数据包从发出去到回来的时间)

  RTO---Retransmission TimeOut(重传超时时间)

 

1 经典算法

RFC793 经典算法:

  • 采样RTT,记下最近好几次的RTT值。
  • 做平滑计算SRTT(α 取值在0.8 到 0.9之间,α -加权移动平均),公式为:
    SRTT = ( α * SRTT ) + ((1- α) * RTT)
  • 计算RTO(β 值一般在1.3到2.0之间)。公式为:
    RTO = min [ UBOUND, max [ LBOUND, (β * SRTT) ] ]

说明:

  • UBOUND是最大的timeout时间,上限值
  • LBOUND是最小的timeout时间,下限值

优点:

  • 算法简单
  • RTT连续采样(包括正常和重传),采样简单

缺点:

  • RTT采样方案,不能反应真实网络,即正常和重传区分不开
  • 参数α是为了平滑SRTT。小的α值可以感受到 RTT 的微小变化,但可能会容易受到暂时波动的影响。大的α值更稳定,但可能不够快,无法适应真正的变化。

 

2 Karn / Partridge 算法

经典算法问题:

  • 情况(a)是ack没回来,计算第一次发送和重传ACK的时间,算大了。
  • 情况(b)是ack回来慢,计算重传时间和第一次ACK的时间,算小了。

Karn/Partridge算法:

  • 不采样重传RTT,即仅采样正常传输TCP。
  • TCP重传,RTO设置为当前RTO的2倍。公式为:
    RTO=2 * RTO_cur

优点:

  • 解决经典RTT采样问题

缺点:

  • 参数α是为了平滑SRTT。小的α值可以感受到 RTT 的微小变化,但可能会容易受到暂时波动的影响。大的α值更稳定,但可能不够快,无法适应真正的变化。
  • TCP重传退避算法固定。网络较差情况,RTO持续翻倍,重发就慢,效率和性能差,不能反应网络真实情况

 

3 Jacobson / Karels 算法

Jacobson/Karels算法:(其中的DevRTT是Deviation RTT)

  • SRTT = SRTT + α (RTT – SRTT) :计算平滑RTT;
  • DevRTT = (1-β)*DevRTT + β*(|RTT-SRTT|) :计算平滑RTT和真实的差距(加权移动平均);
  • RTO= μ * SRTT + ∂ *DevRTT : 加权平均公式。

说明:

  • 在Linux下,α=0.125,β=0.25,μ =1,∂=4

优点:

  • 解决RTT不被感知问题,考虑RTT方差。方差较小,RTO接近SRTT;方差较大,导致DevRTT主导计算

 

posted @ 2023-01-31 23:39  星际男孩  阅读(489)  评论(0)    收藏  举报