我正在阅读 Kurose & Ross 的第 8 版 Computer Networking,我看到了这个图(下图 3.52),它描绘了 TCP Tahoe 和 TCP Reno 的操作。该图似乎表明 TCP Reno 使用的快速恢复算法具有线性行为(由图上的黑线显示,旁边写着 TCP Reno),鉴于RFC 中描述的快速恢复方式,这没有意义2001 年:
1. When the third duplicate ACK in a row is received, set ssthresh
to one-half the current congestion window, cwnd, but no less
than two segments. Retransmit the missing segment. Set cwnd to
ssthresh plus 3 times the segment size. This inflates the
congestion window by the number of segments that have left the
network and which the other end has cached (3)
2. Each time another duplicate ACK arrives, increment cwnd by the
segment size. This inflates the congestion window for the
additional segment that has left the network. Transmit a
packet, if allowed by the new value of cwnd.
3. When the next ACK arrives that acknowledges new data, set cwnd
to ssthresh (the value set in step 1). This ACK should be the
acknowledgment of the retransmission from step 1, one round-trip
time after the retransmission. Additionally, this ACK should
acknowledge all the intermediate segments sent between the lost
packet and the receipt of the first duplicate ACK. This step is
congestion avoidance, since TCP is down to one-half the rate it
was at when the packet was lost.
由于在第 2 步中,您“通过分段大小增加 cwnd,每次另一个重复的 ACK 到达”,您很可能在进入快速恢复模式后收到突发的重复 ACK,这似乎没有线性行为。但是这本书表明它确实是线性的。是什么赋予了?此外,如果它确实是线性的,并且书上是正确的,那么 TCP Reno 的快速恢复模式似乎以与 TCP 的拥塞避免模式相同的速度增长,这表明它们的行为是等效的。如果这是真的,那么当拥塞避免模式的行为相同时,为什么还要为整个复杂的快速恢复业务烦恼呢?