我正在阅读 Kurose和Ross的Computer Networking- A Top-Down Approach文本,在那里我发现了 TCP 拥塞控制 FSM 的微妙之处,如下所示:
主要是我很难理解在允许的情况下传输新段的动作并转换到快速恢复状态。
我已经阅读了 Forouzan 的教科书数据通信和网络中的等效部分,但是虽然解释很简单,但没有 FSM 或编程方法。
现在让我们考虑一下Kurose & Ross文本中所示的慢启动阶段:
他们解释
cwnd每轮传输后加倍的时序图很简单,就像Forouzan文本所说的那样。但是我发现很难理解基于标记为弧的实现:在慢启动阶段。
- 假设发送者开始
cwnd = 1MSS然后将这个(第一个)段发送到网络层并等待确认。- 发送方获得前一个数据包的“新 ACK”并
cwnd增加到2MSS. 然后根据“transmit new segment(s), as allowed”,发送方将2段(第 2 和第 3 段)发送到网络层并等待确认。- 现在发送方接收到对应于第 2 段的“新 ACK”并
cwnd增加到3MSS. 然后根据“transmit new segment(s), as allowed”,发送方将3段发送到网络层并等待确认。- 现在发送方收到对应于第 3 段的“新 ACK”并
cwnd增加到4MSS. 然后根据“transmit new segment(s), as allowed”,发送方将4段发送到网络层并等待确认。从第 3 点和第 4 点来看,我发现这种情况与图 3.51 所示的慢启动阶段不匹配。(即发送的段数是 1,2,3,4 而不是 1,2,4)
我无法理解快速恢复状态的操作。具体来说,Forouzan文本说:
大多数 TCP 实现有两种反应:
如果发生超时,则拥塞的可能性更大;一个段可能已经在网络中被丢弃,并且没有关于已发送段的消息。在这种情况下,TCP 反应强烈:
一种。它将阈值设置为当前窗口大小的二分之一。
湾。它将 cwnd 设置为一个段的大小。
C。它再次开始慢启动阶段。
如果接收到三个ACK,则拥塞的可能性较小;一个段可能已经被丢弃,但之后的一些段可能已经安全到达,因为收到了三个 ACK。这称为快速传输和快速恢复。在这种情况下,TCP 的反应较弱:
一种。它将阈值设置为当前窗口大小的二分之一。
湾。它将 cwnd 设置为阈值(一些实现将三段大小添加到阈值)。
C。它开始拥塞避免阶段。
在Forouzan文本中,没有这样的过渡到快速恢复状态。但是在黑濑这里有这样一种状态,并且有一条弧线标记为:
我不太了解他的工作。
与Forouzan文本中给出的相比, Kurose的版本做了哪些额外的工作?



