2012-12-19 348 views
2

理论上,最大TCP速度是min {rwnd,cwnd}/RTT,其中cwnd是拥塞窗口大小,rwnd是接收窗口大小。假设cwnd足够大,那么它就是rwnd/RTT。 现在,如果最大窗口大小为65Kbytes我得到(使用这些计算从一些网站):TCP最大吞吐量和浏览器

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的速度从网站上下载(不是洪流,直接下载),同时拥有超过200ms的RTT,所以我高于理论最大值,为什么会发生这种情况?浏览器是否使用多个tcp连接进行下载?

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

回答

2

我是否正确理解你,你是否想知道如何获得“更快的可能”?

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

但我想知道你的数字。

广告1)你确定RTT?这对于普通下载来说似乎相当高,除非是横贯大陆。使用ping检查RTT(例如ping simtel.net,用主机名替换主机名)。您可以使用更精确的ping实用程序,如我的hrpinghttp://www.cfos.de/ping)(适用于Windows)。

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

我希望看到测量的数字。

+0

嗯,我用ping来确定RTT,你知道南美洲的200ms对世界上任何地方都是非常正常的。 你可能是对的,也许窗口大小是不同的,我说65KBytes,因为你只有16位来指示大小,所以这是顶部,但可能有新的方法,像每个更多的字节左右。 – user1777914

+0

尝试我提到的一些链接或Netalyzr。 – cxxl

+0

有趣的我得到了这个: – user1777914

3

最大窗口大小不是65K字节。最大窗口大小为65535个窗口大小单位,其中may or may not be bytes

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

+0

如果您发送的分段数超过1个,那么在1个RTT中您可能不会适用所有这些分段,因此公式将会出错。 – user1777914

+0

另外,你确定它不是65K字节吗? 从这里阅读http://cisconet.com/traffic-analysis/throughput/104-tcp-throughput-calculation-formula.html – user1777914

+0

更不用说从维基百科:“窗口大小(16位) - 接收窗口的大小,它指定了该段的发送者当前愿意接收的字节数(超出确认字段中的序列号)(参见流量控制和窗口缩放)“ 因此,16位最大字节数是2^16 - 1. – user1777914