TCP Reno 快速恢复算法真的是线性的吗?

网络工程 tcp 传输协议
2022-02-20 13:48:15

我正在阅读 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 的拥塞避免模式相同的速度增长,这表明它们的行为是等效的。如果这是真的,那么当拥塞避免模式的行为相同时,为什么还要为整个复杂的快速恢复业务烦恼呢?

在此处输入图像描述

1个回答

你读错了图片。快速恢复只需要很短的时间~1RTT:它在 3 个双包到达时开始,然后重新传输丢失的段并确认,这需要一个 RTT。当然,如果更多的数据包丢失,它会稍微长一些。通常,这些数字并不代表快速恢复。如果您尝试这样做,快速恢复将看起来像一个高峰(大约 2x cwnd max),在 8 处几乎直线上升,然后下降到 cwnd/2 和恒定 cwnd 时间传输间隔的一半(这是不是快速恢复,它会立即发生)

TCP Tahoe 和 TCP Reno 之间的区别在于 TCP Reno 在 3 个双包后不会进入慢启动。相反,它将 sstresh 设置为 cwnd 的一半并开始避免拥塞。这发生退出快速恢复之后。

在我看来,Reno 线在 y 轴上的位置也是错误的。Reno 线应该从 cwnd = 6 开始,而不是 8.5。它应该从第 12 轮开始与 Tahoe 线平行,但从第 9 轮开始。

另外,不,实际上“拥塞避免”线不是以时间为单位的线。它看起来更像是朝向峰值的 sqrt。多少,取决于瓶颈环节的缓冲区大小。Cwnd 确实在传输轮次中增长了线性,这对应于 RTT。然而,当窗口增长时,Reno 会在瓶颈处用更多数据填充缓冲区,从而增加排队延迟,从而增加 RTT。使用现代廉价内存,RTT 可以增长 2 倍或更多。因此,当线路在传输轮次中线性增长时,传输轮次的持续时间会随着下降而增加,这导致了 sqrt 函数。