拆除 FSM 对拥塞控制的描述

网络工程 tcp 拥塞
2022-02-27 00:15:58

我正在阅读 KuroseRossComputer Networking- A Top-Down Approach文本,在那里我发现了 TCP 拥塞控制 FSM 的微妙之处,如下所示:

TCP 拥塞控制 FSM

主要是我很难理解在允许的情况下传输新段的动作并转换到快速恢复状态。

我已经阅读了 Forouzan 的教科书数据通信和网络中的等效部分,但是虽然解释很简单,但没有 FSM 或编程方法。

现在让我们考虑一下Kurose & Ross文本中所示的慢启动阶段:

TCP 慢启动阶段

他们解释cwnd每轮传输后加倍的时序图很简单,就像Forouzan文本所说的那样。但是我发现很难理解基于标记为弧的实现: 弧

慢启动阶段。

  1. 假设发送者开始 cwnd = 1 MSS然后将这个(第一个)段发送到网络层并等待确认。
  2. 发送方获得前一个数据包的“新 ACK”并cwnd增加到2 MSS. 然后根据“transmit new segment(s), as allowed”,发送方将2段(第 2 和第 3 段)发送到网络层并等待确认。
  3. 现在发送方接收到对应于第 2 段的“新 ACK”并cwnd增加到3 MSS. 然后根据“transmit new segment(s), as allowed”,发送方将3段发送到网络层并等待确认。
  4. 现在发送方收到对应于第 3 段的“新 ACK”并cwnd增加到4 MSS. 然后根据“transmit new segment(s), as allowed”,发送方将4段发送到网络层并等待确认。

从第 3 点和第 4 点来看,我发现这种情况与图 3.51 所示的慢启动阶段不匹配。(即发送的段数是 1,2,3,4 而不是 1,2,4)


我无法理解快速恢复状态的操作。具体来说,Forouzan文本说:

大多数 TCP 实现有两种反应:

  1. 如果发生超时,则拥塞的可能性更大;一个段可能已经在网络中被丢弃,并且没有关于已发送段的消息。在这种情况下,TCP 反应强烈:

    一种。它将阈值设置为当前窗口大小的二分之一。

    湾。它将 cwnd 设置为一个段的大小。

    C。它再次开始慢启动阶段。

  2. 如果接收到三个ACK,则拥塞的可能性较小;一个段可能已经被丢弃,但之后的一些段可能已经安全到达,因为收到了三个 ACK​​。这称为快速传输和快速恢复在这种情况下,TCP 的反应较弱:

    一种。它将阈值设置为当前窗口大小的二分之一。

    湾。它将 cwnd 设置为阈值(一些实现将三段大小添加到阈值)。

    C。它开始拥塞避免阶段。

Forouzan文本中,没有这样的过渡到快速恢复状态。但是在黑濑这里有这样一种状态,并且有一条弧线标记为:

标签

我不太了解他的工作。

与Forouzan文本中给出的相比, Kurose的版本做了哪些额外的工作

1个回答

与 Forouzan 文本中给出的相比,Kurose 的版本做了哪些额外的工作?

想想这些年来的变化。RFC 793,传输控制协议于 1981 年 9 月发布,没有提及快速恢复,但多年来发布了与 TCP 拥塞控制相关的各种 RFC。例如,RFC 2001,TCP 慢启动,拥塞避免,快速重传和快速恢复算法于 1997 年 1 月发布,被RFC 2581 淘汰,RFC 3990更新的TCP 拥塞控制,增加 TCP 的初始窗口和完全已被RFC 5681 TCP 拥塞控制废弃。

RFC 793 本身已被其他 RFC(1122、3168、6093、6528)更新。可以看到,TCP 官方处理这个问题的方式在不同的时间点都发生了变化,不同时间发布的书籍、文章、文档都会有不同的信息。一些书籍可能还有各种版本,更新了以前版本中的信息。您需要注意发布日期,看看是否有更新的版本。

此外,请记住,并非所有操作系统都会立即更新以支持新的 RFC,如果有的话(Windows 仍然不支持RFC 3021,在 2000 年 12 月发布的 IPv4 点对点链接上使用 31 位前缀)。

如果您真的想了解 TCP,请研究 RFC 793(所有实现都应该支持它)。当您掌握了该 RFC 中的所有概念后,开始浏览所有其他涵盖 TCP 的 RFC(您可能想跳过那些已经过时的 RFC)。

来自 RFC 793 的原始(也是我知道的唯一官方)TCP 状态机:

                              +---------+ ---------\      active OPEN
                              |  CLOSED |            \    -----------
                              +---------+<---------\   \   create TCB
                                |     ^              \   \  snd SYN
                   passive OPEN |     |   CLOSE        \   \
                   ------------ |     | ----------       \   \
                    create TCB  |     | delete TCB         \   \
                                V     |                      \   \
                              +---------+            CLOSE    |    \
                              |  LISTEN |          ---------- |     |
                              +---------+          delete TCB |     |
                   rcv SYN      |     |     SEND              |     |
                  -----------   |     |    -------            |     V
 +---------+      snd SYN,ACK  /       \   snd SYN          +---------+
 |         |<-----------------           ------------------>|         |
 |   SYN   |                    rcv SYN                     |   SYN   |
 |   RCVD  |<-----------------------------------------------|   SENT  |
 |         |                    snd ACK                     |         |
 |         |------------------           -------------------|         |
 +---------+   rcv ACK of SYN  \       /  rcv SYN,ACK       +---------+
   |           --------------   |     |   -----------
   |                  x         |     |     snd ACK
   |                            V     V
   |  CLOSE                   +---------+
   | -------                  |  ESTAB  |
   | snd FIN                  +---------+
   |                   CLOSE    |     |    rcv FIN
   V                  -------   |     |    -------
 +---------+          snd FIN  /       \   snd ACK          +---------+
 |  FIN    |<-----------------           ------------------>|  CLOSE  |
 | WAIT-1  |------------------                              |   WAIT  |
 +---------+          rcv FIN  \                            +---------+
   | rcv ACK of FIN   -------   |                            CLOSE  |
   | --------------   snd ACK   |                           ------- |
   V        x                   V                           snd FIN V
 +---------+                  +---------+                   +---------+
 |FINWAIT-2|                  | CLOSING |                   | LAST-ACK|
 +---------+                  +---------+                   +---------+
   |                rcv ACK of FIN |                 rcv ACK of FIN |
   |  rcv FIN       -------------- |    Timeout=2MSL -------------- |
   |  -------              x       V    ------------        x       V
    \ snd ACK                 +---------+delete TCB         +---------+
     ------------------------>|TIME WAIT|------------------>| CLOSED  |
                              +---------+                   +---------+

                      TCP Connection State Diagram
                               Figure 6.