如何确定TCP连接的吞吐量?

网络工程 通讯协议 吞吐量
2021-07-22 18:00:20

在此处输入图片说明

APP 1 通过 IP 网络通过 TCP 连接向 APP 2 发送数据。单向延迟为 10ms。TCP 连接带宽为 100 Mbps。系统以设置为 4,000 字节的 WINDOW 启动。此后,APP 2 将在确认的基础上向发送方 APP 1 通告 4,000 字节的 WINDOW。APP 2 维护一个 16,000 字节的缓冲区,它可以以 200,000 字节/秒的速率消耗接收到的数据。我如何计算它的吞吐量?

RCV 缓冲区大小 / RTT = 最大 TCP 吞吐量

RTT = 2 * 10ms = 20 * 10^-3

WINDOW 大小可以增加到 16,000 字节。那么 16,000 字节是 RCV 缓冲区大小吗?

因此,吞吐量 = (16,000 * 8)/(20 * 10^-3) / 8 = 800,000 字节/秒。

但是,这个结果比APP 2的消费率还要大。这看起来太奇怪了。如果将 16,000 替换为 4,000,则答案为 200,000。这看起来正常吗?

1个回答

是的,这是完全正常的。并且您使用您在上面完成的计算的最小值。想想在大厅里移动一盒纸需要多长时间 - 现在想象一下你必须一次完成一页。然而,增加接收窗口并不总是解决方案。有时客户端会发出小的第 7 层请求(SMB 经常这样做)。因此,如果客户端只要求 4KB 块等待它到达然后要求下一个,则 64K TCP 窗口将无济于事。您可能还需要在等式中考虑 TCP 慢启动。

好的,现在想象一下您可以一次携带多页纸穿过大厅,但您不想一次携带太多。所以你从 3 开始,如果你没有掉落,那么下次你带来,然后是 8,然后是 13...直到你掉一个,然后你减少 50% 并再次开始增加。那就是 TCP 慢启动。计数称为 CWND。

但这都没有任何区别,因为 win/rtt bw=800kb/s 但 APP2 消耗率只有 200,所以这是限制因素。