TCP Reno 示例
TCP Reno 是负责网络拥塞控制的 TCP 协议的组成部分。 TCP Reno 是 TCP Tahoe(第一个内置拥塞控制算法)的扩展。
TCP Reno = Slow Start + AIMD + Fast Retransmit + Fast Recovery
TCP Reno的工作
假设:
- 发件人有无限数据要发送
- initcwnd = 10 段
- 数据包 3 和 4 被丢弃。
让我们通过一个例子来看看 TCP reno 的工作原理:
S.No. | Packets ACKed | cwnd | inflight | Packets transmitted |
---|---|---|---|---|
1. | None | 10 | 10 | 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 |
2. | 1 | 11 | 11 | 11, 12 |
3. | 2 | 12 | 12 | 13, 14 |
4. | 2(DA1, R5) | 13 | 13 | 15, 16 |
5. | 2(DA2, R6) | 14 | 14 | 17, 18 |
6. | 2(DA3, R7) * | 7 | 13 | Re3 |
7. | 2(DA4, R8) | 7 | 12 | – |
8. | 2(DA5, R9) | 7 | 11 | – |
9. | 2(DA6, R10) | 7 | 10 | – |
10. | 2(DA7, R11) | 7 | 9 | – |
11. | 2(DA8, R12) | 7 | 8 | – |
12. | 2(DA9, R13) | 7 | 7 | – |
13. | 2(DA10, R14) | 7 | 7 | 19 |
14. | 2(DA11, R15) | 7 | 7 | 20 |
15. | 2(DA12, R16) | 7 | 7 | 21 |
16. | 2(DA13, R17) | 7 | 7 | 22 |
17. | 2(DA14, R18) | 7 | 7 | 23 |
18. | 3 | 7+1/7 | 7 | 24 |
19. | 3(DA1, R19) | 7+2/7 | 7 | 25 |
20. | 3(DA2, R20) | 7+3/7 | 7 | 26 |
21. | 3(DA3, R21)* | (7+4/7)/2 | 7 | Re 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 件事:
- cwnd 减半即 cwnd = cwnd/2
- sthresh 减少到 cwnd 的一半,即 ssthresh = cwnd/2
- 发送者变成沉默的半窗口称为沉默的半窗口。
- 发件人进入快速恢复阶段。
发送方在半个静默窗口期间不会发送任何新数据包,但由于确认数据包丢失,它会立即重新发送该数据包。这是 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 的限制:
- 它无法在单个 cwnd 窗口大小中检测到多个数据包丢失。它在单个窗口大小中多次减少 cwnd(等于丢包)。因此,它显着降低了 cwnd,这是不必要的,因为网络可以通过减少一次 cwnd 来摆脱拥塞状态。
- 在半窗口静默期间,发送者处于空闲状态,浪费了它的资源。
- 在同一个拥塞窗口中检测多个丢包需要花费大量时间。