理论上,最大 tcp 速度是 min{rwnd,cwnd} / RTT,其中 cwnd 是拥塞窗口大小,rwnd 是接收窗口大小。假设 cwnd 足够大,那么它就是 rwnd/RTT。现在,如果我得到的最大窗口大小为 65Kbytes(使用来自某个站点的这些计算):
RTT 10 ms => TCP throughput = 52428000 bps = 52Mbps
RTT 20 ms => TCP throughput = 26214000 bps = 26Mbps
RTT 50 ms => TCP throughput = 10485600 bps = 10Mbps
RTT 100 ms => TCP throughput = 5242800 bps = 5.2Mbps
RTT 150 ms => TCP throughput = 3495200 bps = 4.3Mbps
RTT 200 ms => TCP throughput = 2621400 bps = 2.5Mbps
RTT 300 ms => TCP throughput = 1747600 bps = 1.7Mbps
RTT 500 ms => TCP throughput = 1048560 bps = 1Mbps
这有多准确?由于我可以以 5Mbps 的速度从网站下载(不是 torrent,直接下载),同时 RTT 超过 200 毫秒,所以我超过了理论最大值,为什么会发生这种情况?浏览器是否使用超过 1 个 tcp 连接进行下载?
另外,我想知道 rwnd/RTT 究竟来自哪里,因为 rwnd 字节可以(并且肯定会)超过 1 个 TCP 段大小,这意味着您将在每个 RTT 开始时发送超过 1 个段,这意味着 1 RTT 不足以发送和接收来自所有已发送段的 ACK,因此 rwnd/RTT 实际上与实际吞吐量相差甚远。