為什麼乙太網無法接收大於1500位元組的資料報?

2021-07-25 02:39:25 字數 2279 閱讀 8215

這個問題不是非常嚴謹,==應該說標準乙太網介面的mtu為1500==,但現在的乙太網介面普遍可以使得mtu遠遠大於1500。

最早的乙太網工作方式:載波多路復用/衝突檢測(csma/cd),因為網路是共享的,即任何乙個節點傳送資料之前,先要偵聽線路上是否有資料在傳輸,如果有,需要等待,如果線路可用,才可以傳送。

假設a發出第乙個bit位,到達b,而b也正在傳輸第乙個bit位,於是產生衝突,衝突訊號得讓a在完成最後乙個bit位之前到達a,這個一來一回的時間間隙slot time是57.6μs。

在10mbps的網路中,在57.6μs的時間內,能夠傳輸576個bit,所以要求乙太網幀最小長度為576個bits,==從而讓最極端的碰撞都能夠被檢測到==。這個576bit換算一下就是72個位元組,去掉8個位元組的前導符和幀開始符,所以乙太網幀的最小長度為64位元組。

ip頭total length為兩個byte,理論上ip packet可以有65535 byte,加上ethernet frame頭和尾,可以有65535 +14 + 4 = 65553 byte。如果在10mbps乙太網上,將會占用共享鏈路長達50ms,這將嚴重影響其它主機的通訊,特別是對延遲敏感的應用是無法接受的。

由於線路質量差而引起的丟包,發生在大包的概率也比小包概率大得多,所以大包在丟包率較高的線路上不是乙個好的選擇。

但是如果選擇乙個比較小的長度,傳輸效率又不高,拿tcp應用來說,如果選擇乙太網長度為218byte,tcp payload = 218 - ethernet header - ip header - tcp header = 218 - 18 - 20 - 20 = 160 byte

那有效傳輸效率= 160 / 218 = 73%

而如果乙太網長度為1518,那有效傳輸效率= 1460 / 1518 = 96%

==通過比較,選擇較大的幀長度,有效傳輸效率更高==,而更大的幀長度同時也會造成上述的問題,於是最終選擇乙個折衷的長度:1518 byte ! 對應的ip packet 就是 1500 byte,這就是最大傳輸單元mtu的由來。

最早的乙太網是通過hub或集線器來工作的,在任意時刻只能有一台主機傳送,這種共享方式傳送效率很低,而現代高速交換機則讓每個連線交換機的主機工作在獨佔模式,頻寬獨享,可以同時收發,而且現在早已不是早期的10mbps的頻寬,而是1000m、10000m,即使傳送大包也不會影響別的主機,影響的只是交換機的接收和傳送佇列,既然傳送大包效率要比小包效率搞,而且特定的應用也有發大包的需求,比如nfs檔案系統,那為什麼不把介面mtu提高一些,再高一些呢?

這是乙個好主意,於是網絡卡、交換機、路由器網路介面可以實現更大的mtu,可以達到> 9000位元組的大小,==我們稱這種遠大於標準以太幀尺寸的幀為巨型幀jumbo frame 。==

於是網路介面提供可以修改mtu的配置命令,比如預設為1500,可以修改為1508以支援qinq,或者1512以支援802.1q mpls label,這樣既可以支援終端使用者標準1500 位元組ip packet,又可以避免分片。

有一點需要說明,二層交換機的介面,我們可以看成一塊普通的網絡卡,網絡卡工作在資料鏈路層,所以分片不是它的職責,如果乙個幀需要從交換機乙個介面傳送出去,而幀的長度>介面mtu,怎麼辦?丟棄!會發什麼訊息告訴源主機吧?不會的,默默地丟,當作什麼都沒有發生,這種情況最難以排查,如果traceroute可以看到端對端使通的,而傳送資料就是會失敗。

==所以切記,一台交換機要保證介面mtu的一致性。如果在乙個vlan上、或整個交換機都採用同樣的mtu,就不會發生上述情況。而如果入介面是9000位元組,而出介面是1500,就會發生上述問題。==

如果一條物理鏈路的兩端mtu不一致,則會發生什麼情況,比如一側是1500,一側是9000,1500一側發出來的資料肯定沒有問題,但是如果從9000側發給1500呢?

資料也背默默地丟了。為什麼呢?我們來談另外乙個很少提及的詞彙:mru,最大接收單元。

我們一直談的最大傳輸單元mtu是關於出方向的流量處理,而mru恰恰相反,是關於入方向的流量處理。

一般情況下mtu = mru,但比如9000側的資料到達1500,由於9000 > mru,所以直接默默丟棄。

所以在配置鏈路時,要確保兩側的裝置mtu要匹配,無論各家廠商對mtu理解如何、實現如何,一定要保證兩端匹配,==即各自允許在乙太網線上傳送、接收的資料流,乙太網幀的最大長度一樣!==

參考:

乙太網介面是什麼

首先說乙太網技術,是一種計算機區域網技術,是匯流排型拓撲結構的區域網。乙太網介面一般在路由器 集線器等上面,作用是實現 路由器的作用類似於放大器,路由器實現了,多台裝置連線路由器通過一根網線同時訪問網路的作用 而乙太網介面就是提供路由器和計算機的物理連線的埠,如果計算機沒有物理埠,也可以通過兩種方式...

乙太網為什麼要限制最小幀長?

乙太網中傳輸的資料幀的長度並不是乙個常數,而是乙個範圍內的,乙太網幀長度最大限制 mtu 是1518位元組,最小長度是64位元組。限制幀的最大長度是為了避免一台裝置長時間占用通道,所以在傳輸過程中一定要有機制強制乙個裝置停止傳輸,讓出通道的使用。那麼為何要限制最小的幀長度呢?乙個過小的資料會讓乙太網...

為什麼乙太網最短幀為64位元組

乙太網是不可靠的,這意味著它並不知道對方有沒有收到自己發出的資料報,但如果他發出的資料報發生錯誤,他會進行重傳。乙太網的錯誤主要是發生碰撞,碰撞是指兩台機器同時監聽到網路是空閒的,同時傳送資料,就會發生碰撞,碰撞對於乙太網來說是正常的。我們來看一下,假設a檢測到網路是空閒的,開始發資料報,盡力傳輸,...