我正在阅读 Kurose和Ross的Computer Networking- A Top-Down Approach文本,在那里我发现了 TCP 拥塞控制 FSM 的微妙之处,如下所示:
主要是我很难理解到快速恢复状态的转换。
我无法理解快速恢复状态的操作。具体来说,Forouzan文本说:
大多数 TCP 实现有两种反应:
如果发生超时,则拥塞的可能性更大;一个段可能已经在网络中被丢弃,并且没有关于已发送段的消息。在这种情况下,TCP 反应强烈:
一种。它将阈值设置为当前窗口大小的二分之一。
湾。它将 cwnd 设置为一个段的大小。
C。它再次开始慢启动阶段。
如果接收到三个ACK,则拥塞的可能性较小;一个段可能已经被丢弃,但之后的一些段可能已经安全到达,因为收到了三个 ACK。这称为快速传输和快速恢复。在这种情况下,TCP 的反应较弱:
一种。它将阈值设置为当前窗口大小的二分之一。
湾。它将 cwnd 设置为阈值(一些实现将三段大小添加到阈值)。
C。它开始拥塞避免阶段。
在Forouzan文本中,没有这样的过渡到快速恢复状态。但是在黑濑这里有这样一种状态,并且有一条弧线标记为:
我不太了解他的工作。我的意思是当
3
发送方收到重复确认时,它进入快速恢复状态,第 4 次重复确认是什么?是否是丢失数据包之后的第4个有序数据包发送的,服务器正确接收到的数据包?
我看到 Kurose 使用RFC 2581。我浏览了对应于 TCP 拥塞控制的RFC 2581 。我只是计算机网络领域的新手,因为很多事情(可能相当直观或微不足道)对我来说是未知的。问题是RFC 2581以与黑濑文本相同的方式描述事物(大部分)。除了黑濑用 FSM 解释它,而 RFC 以段落形式编写(虽然没有区别)。但是,我遇到问题的细微之处仍未得到解答。如果有人为我提供了一个数字示例,那么它将帮助我理解其中的微妙之处。在快速恢复阶段,RFC 确实在讨论:如果新值允许,则传输一个段cwnd
和接收者的广告窗口。它还谈到了快速恢复阶段artificially inflating
的cwnd
以及deflating
它们,但没有数字说明,我不太明白。甚至黑濑也使用这些术语,但遗憾的是没有提供插图。
RFC 2581讨论了用于说明的参考,但该参考包含超出我理解水平的示例/插图(它们太难了)。我看到的原始RFC 793更容易,Forouzan 的文本松散地基于RFC 2581并且主要是RFC 793。谁能在快速恢复阶段向我提供一个说明inflating
和deflating
(特别是它在数值问题中的工作方式)?