当我收到重复的 ACK 时,为什么 TCP Reno 会将拥塞窗口减半?

当我收到重复的 ACK 时,为什么 TCP Reno 会将拥塞窗口减半?

我很难从概念上理解这一点。

为什么 TCP Reno 在检测到三重重复 ACK 时将其拥塞窗口减半,并在超时时将其窗口削减为 1 个段?

我知道 Reno 是这样做的,但我不太理解为什么。有什么帮助吗?

答案1

简短的回答

  • 它可以使您的管道充满并提高您的吞吐量。

详细答案

  • 相比之下TCP Tahoe,它只有两个州,Slow Start并且 还有另一个称为的州。Congestion AvoidanceTCP RenoFast Recovery

  • 在三份重复中AckTCP Reno过渡到Fast Recovery

  • 在状态下,当它收到新的 时,Fast Recovery它会转换回,并将拥塞窗口重置为转换到 状态时的拥塞窗口大小的一半。Congestion AvoidanceAckFast Recovery

  • 超时后,它会返回到 ,Slow Start就像 一样Congestion Avoidance

  • 一旦收到重复的Ack,它就会将拥塞窗口增加 1。(拥塞窗口膨胀

Slow Start不进入状态(即减少拥塞窗口为 1)的原因是因为接收重复数据包Ack不仅告诉 TCP 丢失了一个数据包。接收方只能Ack在收到另一个数据包时生成重复数据包,该数据包已离开网络并位于接收方的缓冲区中。

因此两端之间仍然有数据流动,并且TCP Reno不希望突然减少流量。

通过将拥塞窗口减半,保持该Congestion Avoidance状态, TCP Reno提高网络性能。

您可以在此处看到有关TCP Reno性能的简单测试TCP Tahoe关联

答案2

重复 ACK 的到来表明有东西离开了管道,并且表明“拥塞不那么严重”,并且有数据包被缓冲,并且可能正在传输中,因此我们希望保持流量畅通。将拥塞窗口减少一半会减少管道空置​​的时间(并且有些拥塞控制方式不会减少那么多)。

超时是更严重问题的征兆,因此更合适的反应是进一步减少窗口。

答案3

如果你正在寻找乘法减少因子 0.5 的理由(而不是例如加法减少,或更大的乘法常数 0.9),附录 D 中有一个这张纸经过范雅各布森,原始TCP拥塞控制算法的设计者之一。

相关内容