什么是MTU
根據(jù)AWS EC2的文檔:
The maximum transmission unit (MTU) of a network connection is the size, in bytes, of the largest permissible packet that can be passed over the connection. The larger the MTU of a connection, the more data that can be passed in a single packet. Ethernet packets consist of the frame, or the actual data you are sending, and the network overhead information that surrounds it.
MTU卸察,即是一個connection上最大允許的packet/frame大小废赞。我們知道宴凉,交換機(switch)和路由(router)的CPU都是按幀(frame)來處理信息秀存。那么每個frame越大艺骂,理論上我們部署的網(wǎng)絡(luò)中的router和switch總體效率便會得到提高报慕。
Ethernet Frame
拿Ethernet Frame作例子:
每個frame的header大小是固定的(frame delimiter之后的:MAC destination + MAC source + 802.1Q tag + length) = 18 bytes晕鹊。802.1Q協(xié)議,也被稱為Dot1q沫浆,本質(zhì)上是用來在IEEE 802.3 Ethernet network上支持VLAN的,這里不贅述滚秩。由于VLAN的廣泛使用专执,我們這里將其考慮進來。
由于header+preamble的大小固定郁油,很顯然每個frame/packet越小本股,收發(fā)的網(wǎng)絡(luò)設(shè)備(switch/router)CPU花費在組合和拆分信息(收到frames時組合,發(fā)送信息時拆分)的時間和資源就越多桐腌,舉一個極端情況拄显,如果每幀payload只有1 byte,那我們不需要計算也能直觀感覺到案站,這個網(wǎng)絡(luò)的信息處理效率(吞吐量 / throughput)低得莫名其妙躬审。從信息有效的比率的角度來說,F(xiàn)ixed Header + Payload = Unit Size蟆盐,如果允許的Unit Size越大承边,那么每個frame的payload也就越大,所以所有的frames的信息里石挂,fixed header占的比例就越小博助,網(wǎng)絡(luò)設(shè)備就更多地在處理有效信息——payload。
Why Jumbo Frame
根據(jù)IEEE 802.3痹愚,現(xiàn)在IEEE規(guī)定的Ethernet MTU是1500個字節(jié)富岳。滿打滿算,1500個字節(jié)在payload上用完拯腮,1500/1542 (1500+26+4+12=1544)= 97.28%是這個限制下最高的利用效率(假設(shè)使用802.1Q VLAN tagging )城瞎。隨著網(wǎng)絡(luò)的日漸發(fā)達,對性能的要求愈加苛刻疾瓮,人們不滿足于1500MTU脖镀,所以擁有9000字節(jié)payload的Jumbo Frame便應(yīng)運而生。
Jumbo Frame并不是什么新鮮的東西狼电,Jumbo Frame起源于 Alteon WebSystems 推出的ACEnic Gigabit Ethernet adapters⊙鸦遥現(xiàn)在的Jumbo Frame是9000MTU這一規(guī)范,也是源自于此肩碟。所以并不是說固定9000字節(jié)强窖,不同的網(wǎng)絡(luò)(設(shè)備)供應(yīng)商可能提供不同的選擇。
Jumbo這個詞本意就是“巨大削祈,特大”翅溺,所以一般frame size非標(biāo)準(zhǔn)(1500MTU)的frame規(guī)制脑漫,我們都可以稱其為Jumbo Frame。
說到這里咙崎,我們可能會有些迷惑的地方在于优幸,1500MTU 或者9000MTU,到底是指的payload size還是整個frame的大小呢褪猛?這真的是一個case by case的問題网杆,各個網(wǎng)絡(luò)設(shè)備供應(yīng)商可能從未統(tǒng)一過。比如Cisco IOS 1500可能跟Juniper 1518一樣伊滋,很明顯一個標(biāo)明的MTU沒包含header一個包含了header碳却,又比如AWS的Jumbo Frame是指的整個packet size 9000,而AWS又稱這個standard為9001MTU笑旺。
Jumbo Frame的應(yīng)用
使用上昼浦,比較重要的一點是,Jumbo Frame在一套系統(tǒng)中的應(yīng)用筒主,必須是end-to-end的关噪。因為一旦中間有任何一個hop,任何一環(huán)沒能支持同一MTU的Jumbo Frame物舒,那么那一個部分就可能成為整個系統(tǒng)的網(wǎng)絡(luò)瓶頸——木桶原理色洞,最慢的一環(huán)決定了整體的速度戏锹。
現(xiàn)在的主流廠商基本上都支持Jumbo Frame冠胯。比如說Juniper Networks的SRX Series Services Gateway都支持最多9192字節(jié)的Jumbo Frame,當(dāng)然這是整個packet size锦针,payload部分仍是9000字節(jié)荠察。
IP Fragmentation和Path MTU Discovery
IP Fragmentation,即是一個支持IP協(xié)議的link(比如兩個router)MTU大小小于packet size時奈搜,該IP packet被切分傳送悉盆。然后link的接收方則會將MTU的packet重新組合。比如說router A開始發(fā)送Jumbo Frame馋吗,而下一個hop的router B仍舊認(rèn)為這個link的MTU是1500焕盟,那么這里就可能會發(fā)生IP Fragmentation,否則router B就只能丟掉不合標(biāo)準(zhǔn)的來自于A的packets宏粤。
Path MTU Discovery則是基于ICMP的脚翘,用于確定一個link的MTU的技術(shù)。如果要支持Jumbo Frame绍哎,一個網(wǎng)絡(luò)勢必要支持Path MTU Discovery来农,否則該網(wǎng)絡(luò)中的設(shè)備會缺乏調(diào)整MTU的能力。
Jumbo Frame的問題
Jumbo Frame之所以沒有成為現(xiàn)今IEEE的正式標(biāo)準(zhǔn)崇堰,恐怕是因為它所具有的一些問題沃于。
一個問題便來自于上面所說的Path MTU Discovery涩咖。眾所周知,ICMP有著很多安全隱患(比如典型的DoS--ICMP flood)繁莹,因而許多網(wǎng)絡(luò)設(shè)備供應(yīng)商/ISP/用戶自己會關(guān)掉/block掉整個ICMP檩互,這便會限制Jumbo Frame的使用。
另一個問題蒋困,如上所述盾似,Jumbo Frame要發(fā)揮價值,必須要一個網(wǎng)絡(luò)end-to-end的支持并開啟Jumbo Frame雪标,這一點零院,在很復(fù)雜的網(wǎng)絡(luò)環(huán)境中,不論是開發(fā)角度還是實踐角度村刨,都是很難的告抄。當(dāng)然有一些特殊的網(wǎng)絡(luò)環(huán)境很適合使用,比如說AWS的Direct Connect——為用戶提供AWS到自己的onprem網(wǎng)絡(luò)(比如公司/自己的datacenter等等)提供一條不經(jīng)過Internet基于802.1q VLAN的專屬通路嵌牺。
現(xiàn)代的NIC有著非常豐富和強大的處理功能打洼。比如一個有著64k buffer的NIC,它并不會太在乎一個個1500字節(jié)的packet逆粹,而是先把現(xiàn)有的packets塞進buffer募疮,然后便可以根據(jù)自己的處理能力高效的處理buffer,而非frame by frame地處理數(shù)據(jù)僻弹。
總而言之阿浓,使用Jumbo Frame,聽起來很美好蹋绽,能有效提高網(wǎng)絡(luò)吞吐芭毙,可是具體的使用,需要考慮具體網(wǎng)絡(luò)環(huán)境和所涵蓋的所有網(wǎng)絡(luò)設(shè)備卸耘,權(quán)衡之下才能知道使用它是一個能夠有效改進網(wǎng)絡(luò)的手段退敦,還是弊大于利的多余操作。