最近有測試問我Jumbo和MTU分別限制的是什么把我問住了,網上查了一些資料,發現大部分是百科上copy下來的,都沒有說到點子上,關鍵時刻還是同事靠譜,現在根據自己的理解整理一下。
首先了解一下二者的基本概念。
- MTU
最大傳輸單元(Maximum Transmission Unit,MTU)是指一種通信協議在某一層上面所能通過的最大數據報大小(以字節為單位),它通常與鏈路層協議有密切的關系。EthernetII幀結構如下:
DMAC(6) |
SMAC(6) |
Type(2) |
Data(46-1500) |
CRC(4) |
由於以太網傳輸電氣方面的限制,每個以太網幀都有最小的大小64bytes,最大不能超過1518bytes,對於小於或者大於這個限制的以太網幀,我們都可以視之為錯誤的數據幀。一般的以太網轉發設備會丟棄這些數據幀。(注:小於64Bytes的數據幀一般是由於以太網沖突產生的 “碎片”或者線路干擾或者壞的以太網接口產生的,對於大於1518Bytes的數據幀我們一般把它叫做Giant幀,這種一般是由於線路干擾或者壞的以太網口產生)。
由於以太網EthernetII最大的數據幀是1518Bytes,除去以太網幀的幀頭(DMAC目的MAC地址 48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和幀尾CRC校驗部分4Bytes (這個部份有時候大家也把它叫做FCS),那么剩下承載上層協議的地方也就是Data域最大就只能有1500Bytes,這個值我們就把它稱之為MTU。
這個MTU就是網絡層協議非常關心的地方,因為網絡層協議比如IP協議會根據這個值來決定是否把上層傳下來的數據進行分片。就好比一個盒子沒法裝下一大塊面包,我們需要把面包切成片,裝在多個盒子里面一樣的道理。當兩台遠程PC互聯的時候,它們的數據需要穿過很多的路由器和各種各樣的網絡媒介才能到達對端,網絡中不同媒介的MTU各不相同,就好比一長段的水管,由不同粗細的水管組成(MTU不同 )通過這段水管最大水量就要由中間最細的水管決定。
-
Jumbo frame
先看看百科上的概念解釋:
巨型幀是幀長大於1522字節的以太網幀。這是一種廠商標准的超長幀格式,專門為千兆以太網而設計。巨型幀的長度各廠商有所不同,從9000字節~64000字節不等。采用巨型幀能夠令千兆以太網性能充分發揮,使數據傳輸效率提高50%~100%。在網絡存儲的應用環境中,巨型幀更具有非同尋常的意義。
(注:此處的1522應該是在1518的基礎上增加了4bytes的vlan-tag)
先說一下優點:
減少幀的開銷,增加系統吞吐量,減少CPU利用率。(其他待補充)
再說一下缺點:
(1)由於傳輸一個巨型幀需要時間比較長,占用線路時間長,造成網絡延時。
(2)一旦巨型幀傳輸失敗,則是一次更為嚴重的網絡事件,重傳則需要更多時間。
(3)所有網絡中的設備都要支持Jumbo frame才能正常使用。
(4)Internet鏈接不支持Jumbo frame。
- 二者的關系
在實際的網絡設備中,MTU的限制是軟件層面的限制,而Jumbo frame是限制的硬件層面,一般應用在千兆口或以上。原則上Jumbo frame的最小值是要大於以太網最大幀長的。
舉栗子:(這里不算幀頭部了,也不考慮不分片的情況,知道那個意思就行)
(1)Jumbo frame小於MTU:三層物理口MTU設置為900,Jumbo frame設置為1700。
發送500的報文:直接發出去。
發送1600的報文:先分片,再900+700正常發出去。
(2)Jumbo frame大於MTU:三層物理口MTU設置為3000,Jumbo frame設置為1700。
發送500的報文:直接發出去。
發送1750的報文:在Jumbo frame處作了限制,做丟包處理。
發送4000的報文:分片3000+1000,3000的部分丟掉了,1000部分發出了,對端校驗失敗,丟棄(存疑)。