2012-12-19 101 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