理论上,最大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

这有多精确?既然我可以从一个网站(不是Torrent,直接下载)以5 Mbps的速度下载,同时有超过200毫秒的RTT,所以我高于理论最大值,为什么会发生这种情况?浏览器是否使用1个以上的TCP连接进行下载?
另外,我想知道rwnd/rtt到底是从哪里来的,因为rwnd字节可以(而且肯定会)大于1tcp段大小,这意味着您将在每个rtt开始时发送超过1个段,这意味着1rtt不足以从所有发送的段发送和接收ack,所以rwnd/rtt实际上与实际吞吐量相差甚远。

最佳答案

我对你的理解正确吗?你想知道你怎么能得到“更快,可能”?
你所说的公式是正确的。窗口和rtt决定您的带宽(还有其他因素,但在大多数情况下,这些是重要的因素)。
但我想知道你的电话号码。
广告1)你确定RTT吗?这对于定期下载来说似乎相当高,除非是跨大陆的。使用ping检查rtt(例如ping simtel.net,用有问题的主机名替换主机名)。您可以使用更精确的ping实用程序,如myhrpinghttp://www.cfos.de/ping)(对于windows)。
广告2)你确定窗户的尺寸吗?64K现在相当低,所有现代操作系统都试图通过RFC1323窗口缩放(aa>)进行更多协商。您可以使用SG TCP/IP Analyzer(http://en.wikipedia.org/wiki/TCP_window_scale_option)检查您的rwin。另一个检查连接的好工具是netalyzr(http://www.speedguide.net/analyzer.php)。
我想看看这些测量的数字。

关于performance - TCP max吞吐量和浏览器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13957768/

10-11 21:41