TCP Reno的拥塞控制行为

网络工程 通讯协议 拥塞
2021-07-26 20:08:50

3 个 DUP ACK 后 TCP Reno 的哪种行为是正确的:

我想,是意大利语维基百科是对的,因为《计算机网络:自上而下的方法,Kurose & Ross》一书中的 FSM 也是这样显示的(http://www.linyibin.cn/images/Technology -ComputerNetworking-Internet-TCP-CongestionControl.png)。

许多来源忽略“+3*MSS”这个词是否有(好的)理由?

2个回答

当 TCP Reno 发送方收到 3 个重复的 ACK 时,它进入所谓的快速重传模式。这种模式的想法是: a) 由于传送了 ACK,它表明数据包正在离开网络 b) 如果数据包离开网络,则发送方可以在网络中注入新数据包。Duplicate ACK 表示数据包已离开网络。快速重传会为收到的每个重复 ACK 增加拥塞窗口。这被称为“充气”。进入时添加 3 个 MSS(3 个段),因为已经收到 3 个重复的 ACK。现在,这种增加仅在快速重传中持续存在。当退出模式时,拥塞窗口设置为sstresh(即cwnd_old/2,即收到第一个重复ACK之前的拥塞窗口/2)。

因此,在 3 个 dupacks 上,发件人执行以下操作:

  • 设置 sstresh = cwnd/2
  • 设置 cwnd = sstresh
  • 进入快速恢复(输入后将cwnd 增加 3 个段以说明已经收到的 dupacks cwnd=cwnd + 3 MSS)
  • 在快速恢复中,每个重复 ack 将 cwnd 增加 1 个段
  • 当收到第一个非重复 ack 时退出快速恢复;设置 cwnd = sstresh (没有 3 个额外的段!)

因此,从技术上讲,这两个来源描述了两个不同时间点的状态。

(这里的快速重传规范:https : //datatracker.ietf.org/doc/html/rfc5681#section-3.2

计算机网络自上而下的方法第 6 版由 Kurose & Ross 链接到英文维基百科:

然后拥塞窗口线性上升,直到发生三重重复确认事件,就在第 8 轮传输之后。请注意,当此丢失事件发生时,拥塞窗口为 12 • MSS。然后将 ssthresh 的值设置为 0.5 • cwnd = 6 • MSS。在 TCP Reno 下,拥塞窗口设置为 cwnd = 6 • MSS,然后线性增长。在 TCP Tahoe 下,拥塞窗口设置为 1 MSS 并呈指数增长,直到达到 ssthresh 的值,此时它会线性增长。

潜在地,当值实际增长时cwnd_new = cwnd_old / 2 + 3 * MSS对于非常小的窗口会适得其反。