单个和多个 TCP 连接之间的网络利用率差异

单个和多个 TCP 连接之间的网络利用率差异

我们知道,TCP 的基本工作方式是从慢启动阶段开始,然后是拥塞窗口 (CWD) 的线性增加。CWD 会根据网络状态进行调整。因此,一旦我们发起连接,连接将需要一段时间才能达到稳定的 CWD,具体取决于网络状况。

因此,按照这种逻辑,TCP 连接将尝试填充链路的所有可用带宽。因此,如果有多个 TCP 连接,则每个连接都会调整其 CWD,以最大程度地减少拥塞。

假设我有一个 100 Mbps 的链路(拓扑结构如下所示),我有一个应用程序正在发送 UDP 流量,还有另一个应用程序iperf可以沿着同一条链路启动并行 TCP 连接

[h1] ---- 100 Mbps ---- [h2]

h1 (UDP + iperf client)
h2 (UDP + iperf server)

我正在按照以下方式进行实验

  1. 1 UDP + 1 TCP
  2. 1 UDP + 2 TCP
  3. 1 个 UDP + 4 个 TCP
  4. 1 UDP + 8 TCP 等等

我的发现表明,1 个 TCP 连接的吞吐量低于 8 个 TCP 连接的总吞吐量(Exp 1 vs Exp 4)。应该记住的是,8 个连接的单独吞吐量要低得多(这是显而易见的)。

我的问题是,为什么单个 TCP 连接不能利用 8 个 TCP 一起完成的全部黑白功能?

答案1

如果您使用的是 CUBIC 或其他 AIMD 拥塞控制算法,当它遇到拥塞时,它会迅速将速率降低一点,然后慢慢将其恢复到最大值。这会留下一些未使用的带宽“扇贝”(在 tcptrace 图中),其他流可以填充这些带宽。如果 UDP 流是固定速率的,它不会填补这些空白。但其他竞争的 TCP 流肯定会。我怀疑您拥有的 TCP 流越多,它们填充其他拥塞控制措施留下的任何带宽就越多。

相关内容