我正在阅读 Kurose和Ross的Computer Networking- A Top-Down Approach文本,在那里我发现了 TCP 拥塞控制 FSM 的微妙之处,如下所示:
主要是我在理解允许的情况下传输新段的动作有困难。
我已经阅读了 Forouzan 的教科书数据通信和网络中的等效部分,但是虽然解释很简单,但没有 FSM 或编程方法。
现在让我们考虑一下Kurose & Ross文本中所示的慢启动阶段:
他们解释
cwnd
每轮传输后加倍的时序图很简单,就像Forouzan文本所说的那样。但是我发现很难理解基于标记为弧的实现:在慢启动阶段。
- 假设发送者开始
cwnd = 1
MSS
然后将这个(第一个)段发送到网络层并等待确认。- 发送方获得前一个数据包的“新 ACK”并
cwnd
增加到2
MSS
. 然后根据“transmit new segment(s), as allowed”,发送方将2
段(第 2 和第 3 段)发送到网络层并等待确认。- 现在发送方接收到对应于第 2 段的“新 ACK”并
cwnd
增加到3
MSS
. 然后根据“transmit new segment(s), as allowed”,发送方将3
段发送到网络层并等待确认。- 现在发送方收到对应于第 3 段的“新 ACK”并
cwnd
增加到4
MSS
. 然后根据“transmit new segment(s), as allowed”,发送方将4
段发送到网络层并等待确认。从第 3 点和第 4 点来看,我发现这种情况与图 3.51 所示的慢启动阶段不匹配。(即发送的段数是 1,2,3,4 而不是 1,2,4)。我在哪里犯错?
我看到 Kurose 使用RFC 2581。我浏览了对应于 TCP 拥塞控制的RFC 2581 。我只是计算机网络领域的新手,因为很多事情(可能相当直观或微不足道)对我来说是未知的。问题是RFC 2581以与黑濑文本相同的方式描述事物(大部分)。除了黑濑用 FSM 解释它,而 RFC 以段落形式编写(虽然没有区别)。但是,我遇到问题的细微之处仍未得到解答。如果有人为我提供了一个数字示例,那么它将帮助我理解其中的微妙之处。我在 RFC 中看到的几件事是它没有明确何时"transmit new segment(s), as allowed"
在慢启动状态或在"congestion avoidance state"
.
RFC 2581讨论了用于说明的参考,但该参考包含超出我理解水平的示例/插图(它们太难了)。我看到的原始RFC 793更容易,Forouzan 的文本松散地基于RFC 2581并且主要是RFC 793。从RFC 2581中,我无法理解(参考我的问题)是怎么回事。发送的段1,2,3,4
数不是RFC 7931,2,4
中通常的。