網站首頁 美容小常識 享受生活 東方時尚 識真假 高奢 資訊 遊戲攻略 搞笑段子
當前位置:品位站 > 享受生活 > 心理

如何計算TCP吞吐量

欄目: 心理 / 發佈於: / 人氣:8.47K
如何計算TCP吞吐量

快速計算一下從一個主機經過長距離的鏈路到另一個主機之間實際上你可以獲得的 TCP 吞吐量是多少。

  使用 TCP 傳輸數據時,兩個最重要的因素是 TCP 窗口大小 和 往返延遲。如果你知道這兩個參數,你就可以計算出兩個主機間的最大吞吐量,不管帶寬是多少。

計算 TCP吞吐量的公式

  TCP窗口大小(bits) / 延遲(秒)  =  每秒吞吐量(bits)

  舉一個簡單的例子。從芝加哥到紐約有 1G 的以太網鏈路,往返延遲 30ms。如果使用 FTP 在芝加哥的一台服務器和紐約的一台服務器之間傳輸一個大文件,所能期望的最大吞吐量是多少

  首先把 TCP窗口大小 從字節變成位。這個例子中我們使用 Windows 標準的 64K 窗口大小。

   64KB = 65536 Bytes.   65536 * 8 = 524288 bits

  接着,把用位表示的窗口大小除以用秒錶示的往返延遲。延遲 30ms 的話,在計算中使用 0.03秒。

   524288 bits / 0.030 seconds = 17476266 bits per second throughput = 17.4 Mbps maximum possible throughput

   這樣的話,儘管在數據中心之間我有 1G 的鏈路帶寬,但是基於 給定的窗口大小 和 往返延遲,在傳輸文件時我所能期望的最大的吞吐量是 17.4 Mbps。

  做什麼才能變快  增加窗口大小 或 縮減延遲。

  為了增加 TCP窗口大小,可以在每個服務器上做出手動調整,傳遞更大的窗口大小。這產生了一個問題:你將使用多大的窗口大小可以使用上面公式的反向計算來確定最優的窗口大小。

計算最優 TCP窗口大小 的公式

  帶寬(bits每秒) * 往返延遲(秒) = TCP窗口大小(bits) / 8 = TCP窗口大小(字節)

  因此在芝加哥和紐約之間 1G 的帶寬和 30ms 的延遲的例子中,可以計算如下:

   1,000,000,000 bps * 0.030 seconds = 30,000,000 bits / 8 = 3,750,000 Bytes

  因此為 FTP連接 配置 3750KB 的 TCP窗口大小,將會填充管道,獲得 1Gbps  的吞吐量。

  服務器增加 TCP窗口大小,其中一個缺點是需要更多的緩衝內存,因為未應答的數據必須存儲在內存中為了應對可能的重傳。另一個潛在的缺陷是性能(是不是很諷刺),發生在包丟失時,因為窗口內任何的包丟失都會導致整個窗口重傳 - 除非你的 TCP協議棧使用一種 TCP增強技術,叫做選擇性應答(selective acknowledgements),但是大部分服務器沒有使用此種技術。

  另一個選擇就是在需要更大窗口的一端放置廣域網加速器(WAN accelerator) 和 在加速器之間使用其他TCP優化,比如選擇性應答,對服務器不需要特殊的調優或額外的內存。加速器可能也使用第7層應用具體的優化來減少往返次數。

  減少延遲這怎麼可能 除非你能克服光速的限制,否則對於縮減延遲你什麼都做不了。再一次,你有一個選擇,就是設置加速器,加速器應答本地服務器的報文段,愚弄服務器讓它認為看到非常低的局域網延遲。因為服務器看到非常快速的局域網應答,而不是等待遠處的服務器應答,這就是為什麼我們不需要調整服務器的窗口大小的原因。

舉例 :tcp的收發窗口大小為1024Byte,網絡的鏈路帶寬是1Mb/s,往返時延RTT是50ms,問最大吞吐率帶寬1Mb/S=125000 Byte/sPacket =1024+20+20+14+12+8+4=1102Byte線速的話125000/1102≈113pps 因往返時延50ms,所以1s內packet為1000ms/50ms=20次往返,小於線速113pps,於是最大吞吐率=(1102Byte*20)/125000Byte/s=17.632%