2012-12-04 143 views
2

假設我有一個4MBits網絡,我想計算數據吞吐量,這是考慮最大傳輸速率減去以太網/ IP/TCP報頭的開銷。 在網上閱讀我發現TCP段的MSS(最大段大小)是576-20-20,後兩個是TCP和IP頭的開銷,導致93%的數據,這意味着我將只是使用我的4MBits鏈接的93%來傳輸數據。現在鏈路ayer在哪裏開銷?不應該添加它嗎?如果我沒有錯,一個以太網頭大約是46個字節,所以最後的總和將是576 - 20 - 20 - 46 = 490,導致85%的數據吞吐量,但我做錯了什麼?計算網絡吞吐量

+0

這是MSS的最小值。通常情況下它會是1460. – cnicutar

+0

仍然不回答這個問題,如果使用TCP,它是否應計算鏈路層報頭以計算鏈路的最大數據吞吐量? – user1777914

+1

我沒有試圖回答你的問題本身。我只回答了*,但我做錯了什麼*。 – cnicutar

回答

3

只是自下而上。普通的以太網幀(無巨型幀,無vlan標記)總共爲1542 bytes,可以有有效載荷1500 bytes。沒有選項的Ipv4頭部是20 bytes,而沒有選項的TCP頭部也是20 bytes。所以你最終得到鏈路層幀的可能有效載荷。所以你的效率是1460/1542=0.9468223086900129,導致最大的吞吐量爲3.7872892347600517Mbps

但是請注意,這通常會更低。這是在TCP會話建立後以及當您是該鏈接的唯一用戶時,您可以在全雙工鏈路上獲得的連續流的理論最大速率。另請注意,只要您以稍高的速率發送一段時間,您的鏈接就會發生擁塞,您將看到丟包,並且由於啓動緩慢,您的實際TCP吞吐量可能會顯着下降。

如果鏈路是無線的(802.11),由於RTS/CTS機制,計算變得複雜得多,但它僅對於一個活動用戶而言大約爲/2,並且沒有合併損失,這是不現實的。

+1

我們是否應該考慮來自tcp的ack數據包消耗部分鏈路?即使他們沒有有效載荷,他們仍然擁有標題,甚至更多地降低了吞吐量,對嗎? – user1777914

+0

不,如果您持續流式傳輸並延遲ACK(應爲默認值),則ACK將包含在常規數據包的標頭中。 – KillianDS

2

一般來說,協議會影響網絡吞吐量,而不僅僅是數據包開銷。您提到您要測量以太網/ IP/TCP網絡的吞吐量,但這些協議的數據包開銷並不是唯一需要考慮的因素。 TCP是面向連接的協議,使用ACK來發送是否接收到數據包。 user1777914錯過了關於ACK的標記,但是卻是一些東西 - 它們不佔用更多的空間,但它們可以延遲數據包的傳輸。隨着延遲增加,整體網絡吞吐量可能會降低,這取決於應用程序或託管OS預期響應的頻率。

W. Richard Stevens撰寫了一本關於TCP/IP的驚人書。 Here是一個除了解釋理論TCP性能,什麼影響它,以及如何計算。

Nagle算法也有助於延遲,但是如果禁用則會減慢吞吐量。