美文网首页
TCP协议灵魂12问(第八问)

TCP协议灵魂12问(第八问)

作者: Amazing慕丶涵 | 来源:发表于2020-10-22 18:16 被阅读0次

    TCP 的超时重传时间是如何计算的?

    TCP 具有超时重传机制,即间隔一段时间没有等到数据包的回复时,重传这个数据包。

    那么这个重传间隔是如何来计算的呢?

    今天我们就来讨论一下这个问题。

    这个重传间隔也叫做超时重传时间(Retransmission TimeOut, 简称RTO),它的计算跟上一节提到的 RTT 密切相关。这里我们将介绍两种主要的方法,一个是经典方法,一个是标准方法。

    经典方法

    经典方法引入了一个新的概念——SRTT(Smoothed round trip time,即平滑往返时间),没产生一次新的 RTT. 就根据一定的算法对 SRTT 进行更新,具体而言,计算方式如下(SRTT 初始值为0):
    SRTT = (α * SRTT) + ((1 - α) * RTT)
    其中,α 是平滑因子,建议值是0.8,范围是0.8 ~ 0.9。
    拿到 SRTT,我们就可以计算 RTO 的值了:
    RTO = min(ubound, max(lbound, β * SRTT))
    β 是加权因子,一般为1.3 ~ 2.0, lbound 是下界,ubound 是上界。
    其实这个算法过程还是很简单的,但是也存在一定的局限,就是在 RTT 稳定的地方表现还可以,而在 RTT 变化较大的地方就不行了,因为平滑因子 α 的范围是0.8 ~ 0.9, RTT 对于 RTO 的影响太小。

    标准方法

    为了解决经典方法对于 RTT 变化不敏感的问题,后面又引出了标准方法,也叫Jacobson / Karels 算法。
    一共有三步。
    第一步: 计算SRTT,公式如下:

    SRTT = (1 - α) * SRTT + α * RTT
    

    注意这个时候的 α跟经典方法中的α取值不一样了,建议值是1/8,也就是0.125。
    **第二步: **计算RTTVAR(round-trip time variation)这个中间变量。

    RTTVAR = (1 - β) * RTTVAR + β * (|RTT - SRTT|)
    

    β 建议值为 0.25。这个值是这个算法中出彩的地方,也就是说,它记录了最新的 RTT 与当前 SRTT 之间的差值,给我们在后续感知到 RTT 的变化提供了抓手。
    **第三步: **计算最终的RTO:

    RTO = µ * SRTT + ∂ * RTTVAR
    

    µ建议值取1, ∂建议值取4。
    这个公式在 SRTT 的基础上加上了最新 RTT 与它的偏移,从而很好的感知了 RTT 的变化,这种算法下,RTO 与 RTT 变化的差值关系更加密切。

    相关文章

      网友评论

          本文标题:TCP协议灵魂12问(第八问)

          本文链接:https://www.haomeiwen.com/subject/xnbdmktx.html