2

TCP 快速恢复算法描述如下(来自 TCP 图解 vol. 1)。我无法理解的是在第 1 步中,为什么 CWD 窗口膨胀是分段大小的三倍?

  1. 当收到第三个重复 ACK 时,将 ssthresh 设置为当前拥塞窗口 cwnd 的一半。重新传输丢失的段。 将 cwnd 设置为 ssthresh 加上段大小的 3 倍。
  2. 每次另一个重复的 ACK 到达时,将 cwnd 增加分段大小并传输一个数据包(如果 cwnd 的新值允许)。
  3. 当下一个确认新数据的 ACK 到达时,将 cwnd 设置为 ssthresh。这应该是来自步骤 1 的重传的 ACK,即重传后的一个往返时间。此外,此 ACK 应确认在丢失数据包和收到第一个重复 ACK 之间发送的所有中间段。这一步是避免拥塞,因为我们将速度减慢到数据包丢失时的一半。
4

1 回答 1

2

来自 [RFC 2001][1]

当连续收到第三个重复的ACK时,设置ssthresh

为当前拥塞窗口 cwnd 的二分之一,但不少于两个段。重新传输丢失的段。将 cwnd 设置为 ssthresh 加上段大小的 3 倍。这会根据已离开网络且另一端已缓存的段数来扩大拥塞窗口

因此,当您连续收到 3 个重复的 ACK 时,您将 cwnd 减半并执行快速重传,从现在开始,您不仅要在等待下一个新的 ACK(最好是 1 个 RTT)时空闲。进入快速恢复后,您将发送新数据

cwnd = 原始 cwnd + # 收到的重复 ACK

直到您收到您正在等待的 ACK 或该 ACK 的计时器到期。

基本上,“+3”考虑了收到的 3 个确认,这些确认使您首先进入快速恢复,因此您传输的新字节数量等于丢失的字节 + 到达接收器但被丢弃的字节。[1]:https ://www.rfc-editor.org/rfc/rfc2001

于 2020-06-13T10:22:39.737 回答