为什么要加倍 TimeoutInterval 以避免将很快被确认的后续段发生过早超时?

网络工程 tcp
2022-02-17 22:47:37

我正在阅读一本教科书,其中描述了 TCP 如何管理重传超时间隔:

TimeoutInterval = EstimatedRTT + 4 *DevRTT

建议使用 1 秒的初始 TimeoutInterval 值。此外,当发生超时时,TimeoutInterval 的值会加倍以避免对即将被确认的后续段发生过早的超时。但是,一旦接收到一个段并更新了 EstimatedRTT,就会再次使用上面的公式计算 TimeoutInterval。

我不明白为什么 TimeoutInterval 需要加倍,因为每个数据包都有自己的计时器?

1个回答

TCP 通常使用乘法回退来减慢传输速度(假设存在网络拥塞)并使用加法加速来提高传输速率(假设有其他流量要处理。)

令人惊讶的是,这并不是 TCP 拥塞控制算法中最具争议的特性之一。维基百科对各种TCP 拥塞控制实现进行了很好的高级比较。这是了解它们的一个很好的起点。您会注意到大多数替代算法的作者,在他们自己的源代码和学术论文中,并没有对用于回退的函数/乘数给予很大的重视。

原因之一是 TCP 收到其他信号——重复的 ACK 和 SACK——表明它应该重新传输段。RTO 肯定会在现实世界中发生,但并不像您想象的那么频繁。