乙太網路影格的「線上」尺寸是多少? 1518 還是 1542?

乙太網路影格的「線上」尺寸是多少? 1518 還是 1542?

根據這裡的桌子,它表示 MTU = 1500 字節,有效負載部分為 1500 - 42 位元組或 1458 位元組(<- 這實際上是錯誤的!)。現在,您必須新增 IPv4 和 UDP 標頭,它們為 28 個位元組(20 IP + 8 UDP)。這使得我的最大可能的應用程式訊息為 1430 位元組!但透過在網路上找到這個號碼,我看到的是 1472。我在這裡計算錯誤嗎?

我想知道的是我可以在沒有碎片風險的情況下透過網路發送的最大應用程式訊息。它絕對不是 1500,因為它包括幀頭。有人可以幫忙嗎?


令人困惑的是,有效負載實際上可以大到 1500 字節,這就是 MTU。那麼現在有效負載 1500 的線內尺寸是多少呢?從該表來看,它可能有 1542 個位元組那麼大。

因此,我可以發送的最大應用程式訊息為1472 條(1500 - 20 (ip) - 8 (udp)),最大線路尺寸為1542。 。我不知道如果表上寫著 1542,有人是如何想出數字 1518 的。

答案1

維基百科上的圖表很糟糕。希望我要寫的內容更清楚。


最大值有效負載在 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 位元組。


前導碼、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(在資料所採取的特定路徑上)。

答案2

這取決於您放入框架中的資料量。如果將 1500 位元組的資料放入幀中,則幀的總大小將為 1518 位元組。如果有 1472 位元組的數據,最終幀的總大小將為 1500。

http://en.wikipedia.org/wiki/Ethernet_frame

話雖這麼說,如果您確實對測試碎片感興趣,測試這一點的一個好方法是使用帶有一些標誌的舊 ping:

ping 主機名稱 -f -l 資料大小

如果封包分段,-f 標誌將導致 ping 失敗。這裡要理解的關鍵是「資料大小」是您可以在不分段的情況下放入訊息中的資料量- 因此,如果您發送1500 個有效負載,則當您超過1500 個位元組時,您將開始分段。不過,將其調低至 1472(1500 - 18 位元組開銷),您將看到 ping 能夠通過。

答案3

對於基本的Ethernet_II幀,幀大小為1518位元組(線上或離線)。它由6 個位元組組成,分別表示目標位址和來源位址,2 個位元組表示46 到1500 位元組之間的有效負載類型欄位(在您的情況下,是整個IP 封包及其IP 標頭和UDP 標頭),4 個位元組表示有效負載。除此之外,幀的大小也有限制(64 位元組)。這就是為什麼範圍從 46 個位元組開始(將其新增至兩個位址、類型和 FCS,您將獲得 64 個位元組 - 46+6+6+2+4=64)。

如果該幀位於支援多個 VLAN 的網路上,並且您需要使用 VLAN 標記來標記該幀,則在類型欄位之前新增一個額外欄位。這是 4 個位元組。現在這意味著有效負載的大小範圍可以在底部減少 4 個字節,但仍然至少有 64 個位元組。因此是 42。

因此,當範圍寫為 1500-42 時,並不意味著 1500 減 42,而是意味著 1500 到 42 位元組之間的任何內容都是有效的。在一條線路上,該標記訊框可能高達 1522 位元組(如果僅使用一個標記,如果使用兩個標記則為 1526 位元組)。這些都無法解釋數字 1542。

要達到這個數字,您需要考慮如何在乙太網路上發送幀。乙太網路LAN上沒有時鐘,因此訊框的發送器發送一系列的1和0來設定時鐘。這稱為序言。並非每個聽眾都會「聽到」所有序言,但大多數人應該聽到其中的一部分。為了表示前導碼的結束,發送的最後 8 位元之一會被翻轉,不再是 10101010,而是變成 10101011。從技術上來說,這對於離線捕獲來說沒有什麼用處,因此前導碼的7 字節和1 字節SDF 通常不會被計算在內,但如果它們是我們原來的1518,現在將是1526。不是1542。

發送訊框後,線路上會出現強制靜默,稱為幀間間隙。這相當於傳輸12個位元組。這也沒有被計算或捕獲,但如果是的話,我們將得到 1538 位元組。現在從 1538 到 1542 的唯一方法是對幀進行標記(即它確實包含 4 個位元組計劃標記)。唷,終於到了 1542 年了。

這一切都在術語中。標準幀在網路上的長度為 1518 位元組(就任何擷取裝置而言)。線路上的標記訊框(單一標記)為 1522 位元組。它們佔用線路上 1538 位元組或 1542 位元組的傳輸空間。

希望有助於澄清..

答案4

不,你希望發生碎片,這就是為什麼你得到的數據包需要碎片化,但df 設置就像這樣,一條帶有一大堆半掛車的雙向高速公路與帶有一大堆小型智能汽車的同一條高速公路,它們都將相同目的地的半拖車承載更多有效負載,但速度較慢,並且更容易擁堵 較小的汽車承載更少,但行駛速度更快 MSS 與 MTU 也不同

相關內容