我很难从概念上理解这一点。
为什么 TCP Reno 在检测到三重重复 ACK 时将其拥塞窗口减半,并在超时时将其窗口削减为 1 个段?
我知道 Reno 是这样做的,但我不太理解为什么。有什么帮助吗?
答案1
简短的回答
- 它可以使您的管道充满并提高您的吞吐量。
详细答案
相比之下
TCP Tahoe
,它只有两个州,Slow Start
并且 还有另一个称为的州。Congestion Avoidance
TCP Reno
Fast Recovery
在三份重复中
Ack
,TCP Reno
过渡到Fast Recovery
。在状态下,当它收到新的 时,
Fast Recovery
它会转换回,并将拥塞窗口重置为转换到 状态时的拥塞窗口大小的一半。Congestion Avoidance
Ack
Fast 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 的到来表明有东西离开了管道,并且表明“拥塞不那么严重”,并且有数据包被缓冲,并且可能正在传输中,因此我们希望保持流量畅通。将拥塞窗口减少一半会减少管道空置的时间(并且有些拥塞控制方式不会减少那么多)。
超时是更严重问题的征兆,因此更合适的反应是进一步减少窗口。