TCP/IP之RTO、RTT

  • Post author:
  • Post category:其他




什么是 RTO、RTT

底层的网络是不可靠的, 超时、丢包各种问题, 但 TCP 协议的设计初衷是作为一个可靠的数据传输协议, 超时重传机制是实现可靠性很重要的一个设计.

每次 TCP 握手过程都会启动一个定时器, 如果在定时器时间内没有收到, 则进行重传.

而重传的超时时间 则成为 RTO (Retransmission TimeOut)

我们知道网络是一直在波动的, 所以超时重传也是随着网络一直变化的, 那我们基于什么来计算 RTO 呢?

答案是 基于 TCP 单次握手的往返时间. 连接的往返时间成为 RTT (Round Trip Time)


正常网络情况示意


在这里插入图片描述


异常情况 RTT 值


在这里插入图片描述

在这里插入图片描述

通过上图我们发现其实还有几种特殊场景的计算, 但实际计算是以发送数据包时间算起, 基于协议实现里面的 timestamp 值计算差值就可以了.

在这里插入图片描述

简单概念理解:

  1. RTT(Round Trip Time):一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值;
  2. RTO(Retransmission Time Out):重传超时时间,即从数据发送时刻算起,超过这个时间便执行重传, RTO协议实现值最小1s

RTT 和 RTO 的关系是:由于网络波动的不确定性,每个RTT都是动态变化的,所以 RTO 也应随着 RTT 动态变化。

当 RTO < RTT 时, 将会触发大量的重传, 当 RTO > RTT 时候, 如果频繁出现丢包, 重传不及时, 又会造成网络的反应慢, 最好的结果是 RTO 略大于 RTT.

上面说到了 网络是一直波动的, RTT 是一直变化的, RTO 的值基于上次 RTT 往返时间动态计算出来的.

这里基于一套公式(主要Jacobson / Karels 算法), 内容过于炸裂, 这里我要偷懒,

详情查看RFC6298 tools.ietf.org/html/rfc629…

原文: https://juejin.im/post/5dbd893ee51d452a07570339