網(wǎng)絡(luò)最大傳輸單元(MTU)
本文中含有需要您注意的重要提示信息,忽略該信息可能對您的業(yè)務(wù)造成影響,請務(wù)必仔細(xì)閱讀。
網(wǎng)絡(luò)最大傳輸單元MTU(Maximum Transmission Unit)是指在特定網(wǎng)絡(luò)協(xié)議下,通過網(wǎng)絡(luò)能夠傳輸?shù)淖畲髷?shù)據(jù)包大小。在網(wǎng)絡(luò)傳輸中,當(dāng)遇到大包傳輸效率低或頻繁發(fā)生分片重組問題的場景時,可能需要調(diào)整MTU以確保數(shù)據(jù)包能更高效、無損地通過網(wǎng)絡(luò)中的路由器和鏈路層限制,從而提升網(wǎng)絡(luò)傳輸速度和穩(wěn)定性。
MTU的分類
根據(jù)不同的網(wǎng)絡(luò)層和應(yīng)用場景,MTU有幾種不同的分類,包括:
鏈路層MTU
鏈路層能夠傳輸?shù)淖畲髷?shù)據(jù)載荷(Payload)的大小。在以太網(wǎng)中,MTU通常為1500字節(jié),不包含以太網(wǎng)頭部。標(biāo)準(zhǔn)以太網(wǎng)幀大小 (1518字節(jié))= 目的MAC地址(6字節(jié)) + 源MAC地址(6字節(jié)) + 類型/長度字段(2字節(jié)) + 數(shù)據(jù)載荷(1500字節(jié)) + 幀校驗序列(4字節(jié))。
IP MTU
網(wǎng)絡(luò)層可以處理的最大數(shù)據(jù)包的大小,包括IP頭部和數(shù)據(jù)負(fù)載,不包括以太網(wǎng)幀的頭部和尾部。在阿里云環(huán)境中,當(dāng)我們提到MTU,通常指的是IP MTU。
如果考慮到IP頭部和TCP頭部的最小尺寸(可能會因為選項的存在而更長),IP MTU (1500字節(jié))= IP頭部(20字節(jié))+ TCP頭部(20字節(jié))+ 數(shù)據(jù)載荷(1460字節(jié))。
巨型幀MTU
巨型幀(Jumbo Frames)是一些廠商提出的概念,它將標(biāo)準(zhǔn)以太網(wǎng)幀的大小擴(kuò)展到了9K字節(jié)。巨型幀包括二層以太幀頭及CRC部分,而IP MTU通常不包括這些部分。合理使用巨型幀可以減少網(wǎng)絡(luò)中數(shù)據(jù)包的數(shù)量,提高網(wǎng)絡(luò)效率。阿里云支持8500字節(jié)的巨型幀,詳細(xì)信息,請參見巨型幀(Jumbo Frames)。
路徑最大傳輸單元PMTU
路徑最大傳輸單元PMTU(Path Maximum Transmission Unit)是指在兩個網(wǎng)絡(luò)節(jié)點之間,不包括分片的情況下,能夠傳輸?shù)淖畲髷?shù)據(jù)包大小。這個路徑包括了從源節(jié)點到目的節(jié)點之間的所有網(wǎng)絡(luò)設(shè)備和鏈路,如路由器、交換機(jī)和通信鏈路。
路徑最大傳輸單元發(fā)現(xiàn)PMTUD(Path MTU Discovery)是一種TCP/IP協(xié)議棧功能,用于動態(tài)發(fā)現(xiàn)路徑上允許的最大傳輸單元PMTU,以避免數(shù)據(jù)包在傳輸過程中被分片。詳細(xì)信息,請參見路徑MTU發(fā)現(xiàn)機(jī)制(PMTUD)。
影響MTU大小的因素
MTU的大小可以由多種因素決定,包括:
網(wǎng)絡(luò)設(shè)備:不同網(wǎng)絡(luò)設(shè)備如路由器、交換機(jī)在設(shè)計時會規(guī)定其支持的最大的MTU值,這是由硬件能力決定的。如果網(wǎng)絡(luò)中的某個設(shè)備的MTU小于其他設(shè)備,那么整個網(wǎng)絡(luò)通信過程中的MTU大小將被該設(shè)備所限制。
網(wǎng)絡(luò)類型:不同類型的網(wǎng)絡(luò)連接,如以太網(wǎng)、無線網(wǎng)絡(luò)等,對MTU的要求也不盡相同。例如,無線網(wǎng)絡(luò)的MTU往往較小,因為無線信號傳輸?shù)姆€(wěn)定性相對較差,較大的MTU容易導(dǎo)致數(shù)據(jù)包的丟失和重傳。
傳輸介質(zhì):不同類型的網(wǎng)絡(luò)介質(zhì)(如雙絞線、光纖、無線等)可能有不同的MTU限制。
網(wǎng)絡(luò)協(xié)議:不同的網(wǎng)絡(luò)協(xié)議可能會對MTU有不同的要求,例如,以太網(wǎng)的標(biāo)準(zhǔn)MTU大小是1500字節(jié)。
應(yīng)用需求:某些特定應(yīng)用可能對MTU有特殊要求,這也會間接影響整體網(wǎng)絡(luò)的MTU。
MTU對網(wǎng)絡(luò)性能的影響
正確地設(shè)置MTU對于網(wǎng)絡(luò)通信的性能和效率至關(guān)重要,通常體現(xiàn)在:
分片與重組
當(dāng)一個數(shù)據(jù)包從一個網(wǎng)絡(luò)傳到另一個具有不同MTU值的網(wǎng)絡(luò)時,如果原始數(shù)據(jù)包的大小超過目的網(wǎng)絡(luò)的MTU限制,數(shù)據(jù)包就需要被分割成多個小的數(shù)據(jù)包(分片)。這些分片在到達(dá)目的地后需要重新組裝起來(重組)。這個過程會增加網(wǎng)絡(luò)延遲,降低傳輸效率,并可能增加網(wǎng)絡(luò)設(shè)備的處理負(fù)擔(dān),因為分片和重組都需要額外的計算資源。
傳輸效率降低
由于分片和重組帶來的額外開銷,數(shù)據(jù)包在需要通過MTU較小的鏈路時,可能會導(dǎo)致整體的網(wǎng)絡(luò)傳輸速率下降。此外,分片還可能導(dǎo)致某些協(xié)議或應(yīng)用的性能問題,例如TCP的重傳機(jī)制可能會因分片丟失而被不當(dāng)觸發(fā),進(jìn)一步降低效率。
網(wǎng)絡(luò)擁塞
如果MTU設(shè)置得過小,會導(dǎo)致數(shù)據(jù)被分割為過多的小分片進(jìn)行傳輸,增加了網(wǎng)絡(luò)擁塞的可能性。而較大的MTU可以減少分組的數(shù)量,降低了網(wǎng)絡(luò)的擁塞程度,提高了網(wǎng)絡(luò)的吞吐量。
為了優(yōu)化網(wǎng)絡(luò)性能,通常建議將網(wǎng)絡(luò)路徑中的所有環(huán)節(jié)的MTU設(shè)置為一致,且盡可能地大,但又不超過路徑中任何一環(huán)節(jié)的MTU限制。這樣可以減少分片和重組的需求,提高傳輸效率。對于特定的應(yīng)用場景,如視頻會議、大文件傳輸?shù)雀邘捫枨蟮膽?yīng)用,適當(dāng)調(diào)整MTU大小可以提升傳輸效率和質(zhì)量。
查看ECS網(wǎng)絡(luò)接口的MTU
MTU限定了網(wǎng)卡一次最多傳輸數(shù)據(jù)的字節(jié)數(shù)。當(dāng)前所有ECS實例都默認(rèn)支持1500 MTU(網(wǎng)絡(luò)接口遵循以太網(wǎng)標(biāo)準(zhǔn)封裝和傳輸數(shù)據(jù))。如果您的ECS實例支持并開啟了巨型幀(Jumbo Frames),則支持8500的MTU。您可以遠(yuǎn)程連接實例,通過操作系統(tǒng)命令查看目前網(wǎng)卡的MTU的值。
查看Windows實例的MTU
示例操作系統(tǒng):Windows Server 2022。
示例實例規(guī)格族:ecs.g8i.large。
遠(yuǎn)程連接ECS實例。
具體操作,請參見通過密碼或密鑰認(rèn)證登錄Windows實例。
打開命令提示符或Windows PowerShell工具。
執(zhí)行以下命令,查看當(dāng)前網(wǎng)絡(luò)接口的MTU。
netsh interface ipv4 show subinterfaces
開啟巨型幀之前
可以看到主網(wǎng)卡以太網(wǎng)和輔助彈性網(wǎng)卡以太網(wǎng)2的MTU均為默認(rèn)支持的1500:
開啟巨型幀之后
可以看到主網(wǎng)卡以太網(wǎng)和輔助彈性網(wǎng)卡以太網(wǎng)2的MTU均變成8500:
查看Linux實例的MTU
示例操作系統(tǒng):Alibaba Cloud Linux 3.2。
示例實例規(guī)格族:ecs.g8i.large。
遠(yuǎn)程連接ECS實例。
具體操作,請參見通過密碼或密鑰認(rèn)證登錄Linux實例。
執(zhí)行以下命令,查看當(dāng)前網(wǎng)絡(luò)接口的MTU。
ip a
開啟巨型幀之前
可以看到主網(wǎng)卡eth0和輔助彈性網(wǎng)卡eth1的MTU均為默認(rèn)支持的1500:
開啟巨型幀之后
可以看到主網(wǎng)卡eth0和輔助彈性網(wǎng)卡eth1的MTU均為8500:
使用ping命令手動探測PMTU
作為手動測試方式,您也可以通過ping
命令,手動探測PMTU。詳細(xì)方法如下:
進(jìn)行此類測試可能會影響網(wǎng)絡(luò)通信,請在非高峰時段進(jìn)行。
測試方法:通過發(fā)送一個包含“不分片”標(biāo)志的數(shù)據(jù)包,并逐漸增加數(shù)據(jù)包的大小,直到收到“需要分片但設(shè)置了不分片標(biāo)志”的ICMP錯誤消息,表明前一個大小就是PMTU減去IP頭部(20字節(jié))和ICMP頭部(8字節(jié))的大小。
測試命令:執(zhí)行以下命令,測試網(wǎng)絡(luò)鏈路上的MTU大小。
ping -c 1 -M do -s [包大小] 目標(biāo)地址
命令解釋:
-c 1:表示只發(fā)送一個數(shù)據(jù)包。
-M do:表示設(shè)置DF(Don't Fragment)不分片標(biāo)志。
-s [包大小]:指定數(shù)據(jù)包的大?。↖CMP的PDU),初始值可以從一個常見的值開始(例如1472)。
說明ping 使用的是ICMP協(xié)議,ICMP的下層協(xié)議是IP協(xié)議,ICMP頭部共8字節(jié),IP頭部共20字節(jié),ICMP的IP數(shù)據(jù)包 = IP頭部大小 + ICMP頭部大小 + ICMP的PDU,所以 -s 1472 表示整個IP數(shù)據(jù)包的長度等于20+8+1472 = 1500 字節(jié)。
測試示例:
兩端主機(jī)MTU信息:
FROM:172.17.0.127 ,為方便測試對比,啟用ECS巨型幀,MTU為8500字節(jié)。關(guān)于啟用巨型幀,請參見開啟/關(guān)閉巨型幀。
TO:172.17.0.128 MTU為1500。
測試:執(zhí)行以下命令,嘗試發(fā)送8472字節(jié)的數(shù)據(jù)包(不包括IP和ICMP頭部大?。?/p>
ping -c 1 -M do -s 8472 172.17.0.128
測試結(jié)果:收到了一個ICMP錯誤消息,顯示"Frag needed and DF set(mtu=1500)",表示數(shù)據(jù)包因為超過了MTU(1500字節(jié))而需要分片,但是由于DF標(biāo)志位被設(shè)置,數(shù)據(jù)包不能被網(wǎng)絡(luò)路徑上的轉(zhuǎn)發(fā)設(shè)備分片,因此被丟棄。
手動修改網(wǎng)絡(luò)接口的MTU
在阿里云上,一些通信場景或網(wǎng)絡(luò)產(chǎn)品(例如VPN網(wǎng)關(guān)、流量鏡像)對ECS發(fā)出的數(shù)據(jù)包大小有著更加嚴(yán)格的要求,需要您主動縮小數(shù)據(jù)包尺寸,以保證網(wǎng)絡(luò)連通性或更好的用戶體驗。您需要修改ECS網(wǎng)絡(luò)接口的MTU值,以滿足這些產(chǎn)品的要求。
在修改MTU之前,請確保了解降低或提高M(jìn)TU可能對網(wǎng)絡(luò)性能產(chǎn)生的影響。不恰當(dāng)?shù)腗TU值可能導(dǎo)致某些類型的數(shù)據(jù)包需要分片,從而影響網(wǎng)絡(luò)效率。
Linux操作系統(tǒng)的MTU會通過DHCP服務(wù)器自動獲取,如果您沒有主動禁用DHCP或者不是在VPN網(wǎng)關(guān)等隧道場景中,一般情況下無需手動修改網(wǎng)卡MTU。
如果您是在巨型幀等特定場景下,請參考相關(guān)的最佳實踐來解決,而不是手動修改MTU。關(guān)于巨型幀,請參見開啟/關(guān)閉巨型幀。
修改ECS網(wǎng)卡MTU時,注意不要超過ECS實例支持的MTU上限(開啟巨型幀時為8500,關(guān)閉或不支持巨型幀時為1500),否則可能導(dǎo)致網(wǎng)絡(luò)不通。
在本示例中,我們演示不同操作系統(tǒng)下手動修改ECS網(wǎng)卡MTU到1399字節(jié)。
Windows實例
示例操作系統(tǒng):Windows Server 2022。
遠(yuǎn)程連接Windows實例。
具體操作,請參見通過密碼或密鑰認(rèn)證登錄Windows實例。
打開命令提示符或Windows PowerShell工具。
執(zhí)行以下命令,查看以太網(wǎng)網(wǎng)卡的MTU。
netsh interface ipv4 show subinterfaces
返回信息如下所示,表示以太網(wǎng)網(wǎng)卡當(dāng)前的MTU值為1500。
您可以執(zhí)行以下命令,查看接口信息查詢命令參數(shù)詳情
netsh interface ipv4 show subinterfaces ?
參數(shù)解釋如下:
執(zhí)行以下命令,設(shè)置以太網(wǎng)網(wǎng)絡(luò)接口的MTU為1399,且設(shè)置永久生效。
netsh interface ipv4 set subinterface "以太網(wǎng)" mtu=1399 store=persistent
返回“確定”表示命令執(zhí)行成功。如果返回有錯誤信息,根據(jù)錯誤信息提示修改即可。
再次查看以太網(wǎng)網(wǎng)卡的MTU,可以看到變更已經(jīng)生效。
您可以執(zhí)行以下命令查看修改子接口命令配置參數(shù)詳情:
netsh interface ipv4 set subinterface ?
參數(shù)解釋如下:
Linux實例
示例操作系統(tǒng):Alibaba Cloud Linux 3.2。
ip 命令臨時修改
此方式為臨時修改網(wǎng)卡接口的MTU值,如果重啟網(wǎng)絡(luò)服務(wù)或重啟實例,修改會失效。
遠(yuǎn)程連接Linux實例。
具體操作,請參見通過密碼或密鑰認(rèn)證登錄Linux實例。
執(zhí)行以下命令,查看當(dāng)前網(wǎng)卡的MTU。
ip a
可以看到,當(dāng)前實例主網(wǎng)卡eth0和輔助彈性網(wǎng)卡eth1的MTU均為1500。
執(zhí)行以下命令,臨時修改網(wǎng)絡(luò)接口eth1的MTU為1399。
sudo ip link set dev eth1 mtu 1399
再次查看網(wǎng)卡信息,可以看到eth1的MTU已經(jīng)變?yōu)?399:
編輯網(wǎng)絡(luò)配置文件(永久生效)
您可以通過編輯網(wǎng)絡(luò)配置文件的方式修改網(wǎng)絡(luò)接口的MTU,并且重啟網(wǎng)絡(luò)接口服務(wù)或者重啟實例,使修改永久生效。
不同Linux發(fā)行版及版本不同,網(wǎng)絡(luò)配置文件不同,本文以RHEL/CentOS系的Alibaba Cloud Linux 3.2為例說明具體配置。
如果您綁定了輔助彈性網(wǎng)卡(如eth1),且需要修改輔助彈性網(wǎng)卡的MTU,請您確保輔助彈性網(wǎng)卡已經(jīng)正確配置。具體操作,請參見配置輔助彈性網(wǎng)卡。
遠(yuǎn)程連接Linux實例。
具體操作,請參見通過密碼或密鑰認(rèn)證登錄Linux實例。
執(zhí)行以下命令,查看當(dāng)前網(wǎng)卡的MTU。
ip a
可以看到,當(dāng)前實例主網(wǎng)卡eth0和輔助彈性網(wǎng)卡eth1的MTU均為1500。
執(zhí)行以下命令,查看網(wǎng)絡(luò)接口的配置文件信息。
ls /etc/sysconfig/network-scripts
以下為當(dāng)前實例的網(wǎng)絡(luò)接口eth0和eth1的主網(wǎng)絡(luò)配置文件
執(zhí)行以下命令,禁用cloud-init的網(wǎng)絡(luò)配置功能。
sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
添加如下配置項:
network: {config: disabled}
執(zhí)行以下命令,編輯eth1的網(wǎng)絡(luò)配置文件,增加MTU配置。
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1
執(zhí)行以下命令,重啟網(wǎng)絡(luò)服務(wù),使配置生效。
sudo systemctl restart NetworkManager
執(zhí)行成功后,再次查看網(wǎng)絡(luò)接口信息,可以看到當(dāng)前網(wǎng)絡(luò)接口eth1的MTU值已經(jīng)是1399:
實際應(yīng)用中MTU的限制
ECS互訪鏈路MTU限制
支持巨型幀(Jumbo Frames)的ECS實例作為源主機(jī)時,目的主機(jī)在不同通信場景下的鏈路最大MTU限制如下表所示:
目的主機(jī) | 允許的最大MTU |
“同VPC內(nèi)” 或 “同region對等連接的VPC內(nèi)” 開啟巨型幀的ECS實例 | 8500 |
“同VPC內(nèi)” 或 “同region對等連接的VPC內(nèi)” 未開啟巨型幀的ECS實例 | 1500 |
“通過CEN實現(xiàn)互通的VPC內(nèi)”任意ECS實例 | |
“通過高速通道連接的線下IDC內(nèi)”的主機(jī) | |
“通過EIP、PIP訪問”的外部主機(jī) |
云網(wǎng)絡(luò)產(chǎn)品MTU限制
當(dāng)您處于以下場景時,需要關(guān)注網(wǎng)絡(luò)產(chǎn)品自身的MTU限制:
在阿里云網(wǎng)絡(luò)內(nèi),鏈路默認(rèn)支持1500 MTU,對于不支持巨型幀的ECS實例通信時,需要關(guān)注VPN網(wǎng)關(guān)等網(wǎng)絡(luò)組件自身的MTU限制。
在使用非TCP協(xié)議(UDP、ICMP)訪問特定網(wǎng)絡(luò)產(chǎn)品時,需要注意不同網(wǎng)絡(luò)產(chǎn)品自身的MTU限制。
當(dāng)前阿里云云產(chǎn)品普遍不支持巨型幀,部分網(wǎng)絡(luò)產(chǎn)品的最大MTU限制如下表所示:
網(wǎng)絡(luò)產(chǎn)品 | 支持的最大MTU | 說明 |
NAT網(wǎng)關(guān) | 1500 | 無 |
負(fù)載均衡(包括ALB、NLB、CLB) | ALB和CLB不支持分片報文的轉(zhuǎn)發(fā),因此使用UDP/ICMP進(jìn)行通信時,需要嚴(yán)格控制源ECS實例發(fā)出的數(shù)據(jù)包的整包大小不超過1500。 | |
云服務(wù)(OSS,RDS等) | 由于流量會經(jīng)過負(fù)載均衡產(chǎn)品,需注意負(fù)載均衡產(chǎn)品的限制。 | |
全球加速 | 無 | |
云防火墻 | 無 | |
私網(wǎng)連接PrivateLink | 無 | |
VPN網(wǎng)關(guān) | 1399 | 更多信息,請參見IPsec-VPN連接中MTU配置說明。 |
如何合理設(shè)置MTU
優(yōu)化MTU的設(shè)置可以提高網(wǎng)絡(luò)效率和性能,減少分片和重組數(shù)據(jù)包的需求,從而降低網(wǎng)絡(luò)延遲和提高吞吐量。以下是一些關(guān)于MTU設(shè)置的最佳實踐:
確定合理的MTU:
了解實際網(wǎng)絡(luò)環(huán)境的標(biāo)準(zhǔn)MTU值:以太網(wǎng)默認(rèn)MTU通常是1500字節(jié)。詳細(xì)信息,請參見MTU的分類。
可以通過ping命令探測PMTU。詳細(xì)信息,請參見使用ping命令手動探測PMTU。
啟用和適配PMTUD:確保操作系統(tǒng)或網(wǎng)絡(luò)設(shè)備支持并啟用PMTUD,這樣可以通過動態(tài)的方式發(fā)現(xiàn)和適應(yīng)網(wǎng)絡(luò)路徑上允許的PMTU,應(yīng)用程序通過適配感知并響應(yīng)ICMP消息,對數(shù)據(jù)包進(jìn)行處理(縮小數(shù)據(jù)包長度),避免分片。詳細(xì)信息,請參見PMTUD工作原理。
考慮網(wǎng)絡(luò)設(shè)備的限制:確保路由器、交換機(jī)等網(wǎng)絡(luò)設(shè)備的MTU設(shè)置與操作系統(tǒng)的MTU設(shè)置一致,以避免數(shù)據(jù)包在傳輸過程中被分片或丟棄。
適應(yīng)特定應(yīng)用:某些應(yīng)用程序或協(xié)議有其推薦的MTU大小。VoIP、視頻會議等實時應(yīng)用可能從較小的MTU中受益,減少延遲和提高包傳輸效率。
定期監(jiān)測網(wǎng)絡(luò)性能:應(yīng)定期監(jiān)視網(wǎng)絡(luò)性能和MTU大小的變化,以便及時調(diào)整以適應(yīng)網(wǎng)絡(luò)條件的變化,包括但不限于網(wǎng)絡(luò)吞吐量測試、延遲測試以及特定應(yīng)用性能的評估。