📜  TCP Reno 示例

📅  最后修改于: 2022-05-13 01:57:03.124000             🧑  作者: Mango

TCP Reno 示例

TCP Reno 是负责网络拥塞控制的 TCP 协议的组成部分。 TCP Reno 是 TCP Tahoe(第一个内置拥塞控制算法)的扩展。

TCP Reno的工作

假设:

  1. 发件人有无限数据要发送
  2. initcwnd = 10 段
  3. 数据包 3 和 4 被丢弃。

让我们通过一个例子来看看 TCP reno 的工作原理:

S.No.    Packets ACKed        cwnd   inflight Packets transmitted
1.None10101, 2, 3, 4, 5, 6, 7, 8, 9, 10
2.1111111, 12
3.2121213, 14
4.2(DA1, R5)   131315, 16
5.2(DA2, R6) 141417, 18
6.2(DA3, R7) *    713Re3
7.2(DA4, R8)712
8.2(DA5, R9) 711
9.2(DA6, R10)710
10.2(DA7, R11)  79
11.2(DA8, R12)   78
12.2(DA9, R13) 77
13.2(DA10, R14)   7719
14.2(DA11, R15)7720
15.2(DA12, R16)7721
16.2(DA13, R17) 7722
17.2(DA14, R18)7723
18.3 7+1/7724
19.3(DA1, R19)  7+2/7725
20.3(DA2, R20) 7+3/7726
21.3(DA3, R21)*  (7+4/7)/27Re 4

第 1 步最初,发送方将 10 个数据包发送到网络中,而无需等待任何 ACK。

cwnd = 10, inflight = 10. 

我们预先假设数据包 3 和 4 丢失了,发送者还不知道。

步骤 2-5:发送方收到 packet-1 的 ACK 并将 cwnd 增加 1。因此,cwnd = 11。由于 packet-1 已被接收方接收,因此它不是 inflight。因此,机上 = 10 – 1 = 9。但最大。 inflight 的值等于 cwnd,因此发送方将 2 个新数据包发送到链路中。发送数据包 11 和 12。

当一个新的 ACK 到达发送方并且 inflight <= cwnd 时,发送方将其 cwnd 和 inflight 增加 1 并将 2 个新数据包传输到网络中。步骤 2-5 遵循相同的场景。

第 6 步:

  • 当接收方接收到无序的数据包(即 1、2、5、7)时,它会生成重复的 ACK。
  • 接收方按顺序发送接收到的最后一个数据包的 ACK。
  • 当发送方获得第三个重复的 ACK 时,它会重新传输丢失的数据包(数据包 3)。
  • 与上述步骤不同,这次 cwnd 不增加。

在 TCP Reno 中检测到数据包丢失时会发生 4 件事:

  1. cwnd 减半即 cwnd = cwnd/2
  2. sthresh 减少到 cwnd 的一半,即 ssthresh = cwnd/2
  3. 发送者变成沉默的半窗口称为沉默的半窗口。
  4. 发件人进入快速恢复阶段。

发送方在半个静默窗口期间不会发送任何新数据包,但由于确认数据包丢失,它会立即重新发送该数据包。这是 inflght 大于 cwnd 的独特情况。发送方保持沉默,直到 infight 等于 cwnd,这段时间本身称为沉默的半窗口。

步骤7-12:是沉默的半窗。发送方获得先前传输的数据包的 ACK,但不会将任何新数据包传输到网络中。发送方获得了 packet-2 的重复 ACK,因为它没有按顺序接收到数据包。重传的数据包 3 仍在传输中,尚未被接收方接收。

步骤 13-17: 半窗口静默结束,现在发送方通过在重复 ACK 到达时发送新数据包来维持 inflight = cwnd。如果它不发送新数据包,则每个 ACK,inflight 将比 cwnd 小 1,因此要充分利用链路,将传输新数据包。

Step-18 发送方接收到在进入快速恢复阶段之前重传的packet-3的ACK。 ACK-3 被认为是一个新的 ACK。这是发送方退出快速恢复阶段的时间点。现在,它进入了人工智能阶段。 AI代表添加剂增加。现在,每个 ACK 的 cwnd 将增加 1/cwnd。因此,每个 RTT 的飞行时间将增加 1。

Step-19 & 20: Sender 得到 packet-3 的重复 ACKs-1 和 2。我们知道 packet-4 丢失了(假设),但发送者还不知道这一点。这是 TCP Reno 的主要限制之一。

接收方已按顺序接收到数据包 1、2、3,数据包 4 丢失,这就是它发送按顺序接收到的最后一个数据包(数据包 3)的重复 ACK 的原因。

步骤 21: 发件人获得数据包 3 的第三个重复 ACK。它确认下一个数据包丢失;数据包 4 丢失。它将再次进入快速恢复阶段,但在此之前,它将重新传输数据包 4。

Thus, cwnd = current cwnd / 2
inflight > cwnd {exception}
Enters Fast recovery.

TCP Reno 的限制:

  1. 它无法在单个 cwnd 窗口大小中检测到多个数据包丢失。它在单个窗口大小中多次减少 cwnd(等于丢包)。因此,它显着降低了 cwnd,这是不必要的,因为网络可以通过减少一次 cwnd 来摆脱拥塞状态。
  2. 在半窗口静默期间,发送者处于空闲状态,浪费了它的资源。
  3. 在同一个拥塞窗口中检测多个丢包需要花费大量时间。