2

理论上,最大 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 实际上与实际吞吐量相差甚远。

4

2 回答 2

3

最大窗口大小不是 65Kbytes。最大窗口大小为 65,535 个窗口大小单位,可能是也可能不是字节

我不太确定我是否遵循您的最后一个问题。段大小与什么有什么关系?您可以根据需要使用尽可能多的分段来发送要发送的任何数据。

于 2012-12-19T18:01:15.407 回答
2

我是否正确理解您,您想知道如何“尽可能快地”接收?

你说的公式是正确的。窗口和 RTT 决定了您的带宽(还有其他因素,但在大多数情况下,这些是重要因素)。

但我想知道你的数字。

广告 1) 你确定 RTT 吗?这对于常规下载来说似乎相当高,除非是跨大陆的。使用 ping 检查 RTT(例如ping simtel.net,将主机名替换为有问题的主机名)。您可以使用更准确的 ping 实用程序,例如我的hrping( http://www.cfos.de/ping )(适用于 Windows)。

广告 2)您确定窗口大小吗?今天 64k 相当低,所有现代操作系统都试图通过 RFC 1323 Window Scaling ( http://en.wikipedia.org/wiki/TCP_window_scale_option ) 进行更多协商。您可以使用 SG TCP/IP Analyzer ( http://www.speedguide.net/analyzer.php ) 来检查您的 RWIN。另一个检查连接的好工具是 Netalyzr ( http://netalyzr.icsi.berkeley.edu )。

我很想看看测量的数字。

于 2012-12-20T10:42:45.997 回答