【问题标题】:TCP max Throughput and browsersTCP 最大吞吐量和浏览器
【发布时间】:2012-12-07 02:57:05
【问题描述】:

理论上,最大 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,直接下载),同时具有超过 200 毫秒的 RTT,所以我高于理论最大值,为什么会发生这种情况?浏览器是否使用超过 1 个 tcp 连接进行下载?

另外,我想知道 rwnd/RTT 究竟来自哪里,因为 rwnd 字节可以(并且肯定会)超过 1 个 TCP 段大小,这意味着您将在每个 RTT 开始时发送超过 1 个段,这意味着 1 个 RTT 不足以发送和接收来自所有已发送段的 ACK,因此 rwnd/RTT 实际上与实际吞吐量相差甚远。

【问题讨论】:

    标签: performance networking tcp throughput


    【解决方案1】:

    最大窗口大小不是 65Kbytes。最大窗口大小为 65,535 个窗口大小单位,may or may not be bytes

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

    【讨论】:

    • 如果您发送超过 1 个片段,甚至更多,您可能不会在 1 个 RTT 中容纳所有这些片段,因此公式将是错误的。
    • 另外,你确定不是 65Kbytes 吗?从这里阅读cisconet.com/traffic-analysis/throughput/…
    • 更不用说来自维基百科了:“窗口大小(16 位) – 接收窗口的大小,它指定了这个发送者的字节数(超出确认字段中的序列号)段当前愿意接收(请参阅流控制和窗口缩放)”所以 16 位字节的最大大小为 2^16 - 1。
    • 您阅读我的链接了吗?窗口大小不一定是字节。它是字节,除非有什么改变它,现代系统总是这样做的。
    • @user1777914 维基百科不是第一次出错,尤其是关于 TCP/IP。我自己修了好几次。这不是一个规范的参考。但是,您应该进一步阅读“窗口缩放”部分,该部分在您引用的同一句话中引用。
    【解决方案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)。

    我很想看看测量的数字。

    【讨论】:

    • 嗯,我用 ping 来确定 RTT,你知道从南美到世界各地的 200 毫秒是很正常的。你可能是对的,也许窗口大小不同,我说的是 65KBytes,因为你只有 16 位来指示大小,所以这就是顶部,但可能有新的方法,比如每一个都是更多字节左右。
    • 试试我提到的一些链接或 Netalyzr。
    • 您的 TCP 窗口将您限制为:707 kbps (88 KBytes/s) @ 200ms 这是完全错误的,因为我以 530KBytes/s 的速度下载。
    • 但是,它还显示“默认 TCP 接收窗口 (RWIN) = 17680”,它是 MSS 的倍数,MSS 为 1360 字节(奇怪的是不应该是 1460 吗?可能是因为我使用的是 wi-fi ?) 所以我可以达到 900MBPS。
    • 对不起,我错了,实际上我的 tcp 连接使用 2 位。
    猜你喜欢
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多