1. MTU 的概念
最大傳輸單元(Maximum Transmission Unit,MTU)是指一種通信協議在某一層上面所能通過的最大數據報大小(以字節為單位),它通常與鏈路層協議有密切的關系。
由於以太網傳輸電氣方面的限制,每個以太網幀都有最小的大小 64bytes,最大不能超過 1518bytes,對於小於或者大於這個限制的以太網幀,我們都可以視之為錯誤的數據幀。一般的以太網轉發設備會丟棄這些數據幀。(注:小於 64Bytes 的數據幀一般是由於以太網沖突產生的 “碎片”或者線路干擾或者壞的以太網接口產生的,對於大於 1518Bytes 的數據幀我們一般把它叫做Giant 幀,這種一般是由於線路干擾或者壞的以太網口產生)。
由於以太網 EthernetII 最大的數據幀是 1518Bytes,除去以太網幀的幀頭( DMAC目的MAC地址 48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes 和幀尾 CRC 校驗部分 4Bytes (這個部份有時候大家也把它叫做 FCS),那么剩下承載上層協議的地方也就是 Data 域最大就只能有 1500Bytes,這個值我們就把它稱之為 MTU。
2. 什么是 Jumbo Frames
Jumbo frames 是指比標准 Ethernet Frames 長的 frame,即比 1518/1522bit 大的 frames,Jumbo frame的大小是每個設備廠商規定的,不屬於IEEE標准;Jumbo frame 在 full-duplex 的 Ethernet 網絡上運行;Jumbo frame 定義了一個“link negotiation”協議,來和對端的設備協商,是否對端設備支持使用 Jumbo frames;標准的以太網 IP 報文大小是:1500bit,不包含以太網頭和 FCS 的 18bit(6+6+2+4),如果包含以太網頭和 FCS,則為 1518bit;Jumbo frame 一般指的是二層封裝三層 IP 報文的值大於 9000bit 的報文。
Jumbo frames 的提出背景:在 1998 年,Alteon Networks 公司提出把 Data Link Layer 最大能傳輸的數據從 1500 bit 增加到 9000 bit,這個提議雖然沒有得到 IEEE 802.3 Working Group 的同意,但是大多數設備廠商都已經支持。
3. 使用 Jumbo Frames 的優點
在數據傳輸時,由於 IEEE 的規定最大的幀規定為 1,500比特(主機在早期的半雙功網絡中),所以需要數傳輸需要經過“數據的切要 --- 傳輸 ---數據組合”的過程。而使用的最大幀越小,傳輸包的量就越大,計算量相應會多,而產生的后果是:
a:增加主機的計算量,消耗CPU資源;
b:影響網絡傳輸的速度。
而使用大幀優點自然也不言而喻 ———— 降低CPU計算量、加快數據傳輸
再說一下缺點:
(1)由於傳輸一個巨型幀需要時間比較長,占用線路時間長,造成網絡延時。
(2)一旦巨型幀傳輸失敗,則是一次更為嚴重的網絡事件,重傳則需要更多時間。
(3)所有網絡中的設備都要支持Jumbo frame才能正常使用。
(4)Internet鏈接不支持Jumbo frame。
使用傳統1500
enahisic2i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
改成巨幀
root@ubuntu:~/dpdk-19.11# ifconfig enahisic2i0 mtu 9000 root@ubuntu:~/dpdk-19.11# ^C root@ubuntu:~/dpdk-19.11# ^C root@ubuntu:~/dpdk-19.11# ip a show enahisic2i0 2: enahisic2i0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9000 qdisc mq state UP group default qlen 1000 link/ether 48:57:02:64:e7:ab brd ff:ff:ff:ff:ff:ff
Packet needs to be fragmented but DF set