在Peterson & Davie 所著《计算机网络:系统方法》一书的6.3.3 节(第 512 页)中,我发现了以下陈述:
考虑到当前 64 KB 的最大通告窗口大小,TCP 的快速重传机制在实践中能够检测到每个窗口最多三个丢弃的数据包。
我的问题是:为什么“最多”3 个丢弃的数据包?
我想我可能已经勾勒了部分论点,但我仍然不确定:
- 假设(最大?)MSS 为 1 kB
- 假设当前有 min(congestion_wnd,adverted_wnd) = 64 kB
- 我会根据数据包来考虑窗口大小,因此我将考虑一个数据包的大小为 1 kB,因此窗口大小为 64 个数据包。
假设 TCP 发送方当前正在传输一个大小为 64 数据包的窗口,从序列号 p 开始。假设数据包 p + d 被丢弃。如果发送方在数据包 p + d 之后还有(至少)4 个数据包要发送(即 +3 个后续数据包以生成 3 个重复的 ACK + 1 次重新传输),我们可以检测丢弃的数据包并重新传输它。这给我们留下了 64 - 4 = 60 个可以丢弃数据包的“时隙”。
丢弃数据包的成本是 5 个数据包,即 1 个丢弃数据包 + 3 个后续数据包以获得 3 个重复的 ACK + 1 次重传。这给了我们 x = 60 / 5 = 12 个要丢弃的数据包的信用,这大于 3。
我的逻辑在哪里失败?我也怀疑我关于以字节为单位的数据包和 MSS 大小的假设的有效性,但该声明似乎结合了(混淆?)数据包和字节大小,这可能会导致混淆。
谢谢!