乙太網框架的“線內”尺寸是多少?1518 還是 1542?
根據此處的表格,它表示 MTU = 1500 字節,並且有效負載部分是 1500 - 42 字節或 1458 字節(<- 這實際上是錯誤的!)。現在最重要的是您必須添加 IPv4 和 UDP 標頭,它們是 28 字節(20 IP + 8 UDP)。這使我的最大可能應用程序消息為 1430 字節!但是通過在 Internet 上查找這個數字,我看到的是 1472。我在這裡做這個計算錯了嗎?
我只想找出我可以通過網路發送的最大應用程序消息,而不會有碎片的風險。它絕對不是 1500,因為它包括幀頭。有人可以幫忙嗎?
令人困惑的是 PAYLOAD 實際上可以大到 1500 字節,這就是 MTU。那麼現在 1500 有效載荷的線內尺寸是多少?從該表中,它可以大到 1542 字節。
因此,我可以發送的最大應用程序消息是 1472(1500 - 20 (ip) - 8 (udp)),最大線路大小為 1542。令我驚訝的是,當事情實際上很簡單時,事情會變得如此復雜。如果表格顯示 1542,我不知道有人是如何得出數字 1518 的。
維基百科上的圖表太可怕了。希望我要寫的更清楚。
802.3 乙太網中的最大有效負載為 1500 字節。
這是您嘗試通過網路發送的數據(以及 MTU 所指的內容)。
[payload]
<- 1500 字節有效負載封裝在乙太網幀中(其中添加了源/目標 MAC、VLAN 標記、長度和 CRC 校驗和。這是總共 22 個字節的附加“東西”
[SRC+DST+VLAN+LENGTH+[payload]+CRC]
<- 1522 字節幀是通過網路傳輸的——在你的乙太網卡傳輸之前,它基本上會站起來大聲喊叫,以確保沒有其他人在使用網路(CSMA/CD)——這是序言和幀開始分隔符(SFD) – 額外的 8 個字節,所以現在我們有:
[Preamble+SFD+[Ethernet Frame]]
<- 1530 字節最後,當乙太網收發器完成發送幀時,802.3 要求它在允許發送下一幀之前傳輸 12 個字節的靜默(“幀間間隙”)。
[Preamble+SFD+[Ethernet Frame]+Silence]
<- 線上傳輸的 1542 字節。Preamble、SFD 和幀間間隙不計為幀的一部分。它們是乙太網協議本身的支持結構。
MTU 適用於有效負載——它是您可以塞進數據包的最大數據單元。因此,一個 MTU 為 1500 字節的乙太網數據包實際上是一個 1522 字節的幀,並且線上路上有 1542 個字節(假設有一個 vLAN 標記)。
所以你的問題的答案 -我可以通過 802.3 乙太網發送的最大數據包是什麼而不產生碎片?- 是1500 字節的有效載荷數據。
但是,乙太網層可能不是您的限制因素。要發現沿途是否有某些東西將 MTU 限制為小於 1500 字節的有效負載數據,請使用以下方法之一:
- Windows:(
ping hostname -f -l sizeofdata
提到的技術 John K)- BSD:
ping -D -s sizeofdata hostname
- Linux:
ping -M do -s sizeofdata hostname
最大的價值
sizeofdata
是 MTU(在您的數據所採用的特定路徑上)。