全部產品
Search
文件中心

Elastic Compute Service:網路傳輸單元最大值(MTU)

更新時間:Nov 14, 2024

網路傳輸單元最大值MTU(Maximum Transmission Unit)是指在特定網路通訊協定下,通過網路能夠傳輸的最巨量資料包大小。在網路傳輸中,當遇到大包傳輸效率低或頻繁發生分區重組問題的情境時,可能需要調整MTU以確保資料包能更高效、無損地通過網路中的路由器和鏈路層限制,從而提升網路傳輸速度和穩定性。

MTU的分類

根據不同的網路層和應用情境,MTU有幾種不同的分類,包括:

  • 鏈路層MTU

    鏈路層能夠傳輸的最巨量資料載荷(Payload)的大小。在乙太網路中,MTU通常為1500位元組,不包含乙太網路頭部。標準乙太網路幀大小 (1518位元組)= 目的MAC地址(6位元組) + 源MAC地址(6位元組) + 類型/長度欄位(2位元組) + 資料載荷(1500位元組) + 幀校正序列(4位元組)。

  • IP MTU

    網路層可以處理的最巨量資料包的大小,包括IP頭部和資料負載,不包括乙太網路幀的頭部和尾部。在阿里雲環境中,當我們提到MTU,通常指的是IP MTU。

    如果考慮到IP頭部和TCP頭部的最小尺寸(可能會因為選項的存在而更長),IP MTU (1500位元組)= IP頭部(20位元組)+ TCP頭部(20位元組)+ 資料載荷(1460位元組)。

  • 巨型幀MTU

    巨型幀(Jumbo Frames)是一些廠商提出的概念,它將標準乙太網路幀的大小擴充到了9K位元組。巨型幀包括二層以太幀頭及CRC部分,而IP MTU通常不包括這些部分。合理使用巨型幀可以減少網路中資料包的數量,提高網路效率。阿里雲支援8500位元組的巨型幀,詳細資料,請參見巨型幀(Jumbo Frames)

  • 路徑傳輸單元最大值PMTU

    路徑傳輸單元最大值PMTU(Path Maximum Transmission Unit)是指在兩個網路節點之間,不包括分區的情況下,能夠傳輸的最巨量資料包大小。這個路徑包括了從源節點到目的節點之間的所有網路裝置和鏈路,如路由器、交換器和通訊鏈路。

    路徑傳輸單元最大值發現PMTUD(Path MTU Discovery)是一種TCP/IP協議棧功能,用於動態發現路徑上允許的傳輸單元最大值PMTU,以避免資料包在傳輸過程中被分區。詳細資料,請參見路徑MTU發現機制(PMTUD)

影響MTU大小的因素

MTU的大小可以由多種因素決定,包括:

  • 網路裝置:不同網路裝置如路由器、交換器在設計時會規定其支援的最大的MTU值,這是由硬體能力決定的。如果網路中的某個裝置的MTU小於其他裝置,那麼整個網路通訊過程中的MTU大小將被該裝置所限制。

  • 網路類型:不同類型的網路連接,如乙太網路、無線網路等,對MTU的要求也不盡相同。例如,無線網路的MTU往往較小,因為無線訊號傳輸的穩定性相對較差,較大的MTU容易導致資料包的丟失和重傳。

  • 傳輸介質:不同類型的網路介質(如雙絞線、光纖、無線等)可能有不同的MTU限制。

  • 網路通訊協定:不同的網路通訊協定可能會對MTU有不同的要求,例如,乙太網路的標準MTU大小是1500位元組。

  • 應用需求:某些特定應用可能對MTU有特殊要求,這也會間接影響整體網路的MTU。

MTU對網路效能的影響

正確地設定MTU對於網路通訊的效能和效率至關重要,通常體現在:

  • 分區與重組

    當一個資料包從一個網路傳到另一個具有不同MTU值的網路時,如果未經處理資料包的大小超過目的網路的MTU限制,資料包就需要被分割成多個小的資料包(分區)。這些分區在到達目的地後需要重新組裝起來(重組)。這個過程會增加網路延遲,降低傳輸效率,並可能增加網路裝置的處理負擔,因為分區和重組都需要額外的計算資源。

  • 傳輸效率降低

    由於分區和重組帶來的額外開銷,資料包在需要通過MTU較小的鏈路時,可能會導致整體的網路傳輸速率下降。此外,分區還可能導致某些協議或應用的效能問題,例如TCP的重傳機制可能會因分區丟失而被不當觸發,進一步降低效率。

  • 網路擁塞

    如果MTU設定得過小,會導致資料被分割為過多的小分區進行傳輸,增加了網路擁塞的可能性。而較大的MTU可以減少分組的數量,降低了網路的擁塞程度,提高了網路的輸送量。

為了最佳化網路效能,通常建議將網路路徑中的所有環節的MTU設定為一致,且儘可能地大,但又不超過路徑中任何一環節的MTU限制。這樣可以減少分區和重組的需求,提高傳輸效率。對於特定的應用情境,如視頻會議、大檔案傳輸等高頻寬需求的應用,適當調整MTU大小可以提升傳輸效率和品質。

查看ECS網路介面的MTU

MTU限定了網卡一次最多傳輸資料的位元組數。當前所有ECS執行個體都預設支援1500 MTU(網路介面遵循乙太網路標準封裝和傳輸資料)。如果您的ECS執行個體支援並開啟了巨型幀(Jumbo Frames),則支援8500的MTU。您可以遠端連線執行個體,通過作業系統命令查看目前網卡的MTU的值。

查看Windows執行個體的MTU

樣本作業系統:Windows Server 2022。

樣本執行個體規格類型系列:ecs.g8i.large。

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Windows執行個體

  2. 開啟命令提示字元或Windows PowerShell工具。

  3. 執行以下命令,查看當前網路介面的MTU。

    netsh interface ipv4 show subinterfaces

    開啟巨型幀之前

    可以看到主網卡乙太網路和輔助彈性網卡乙太網路2的MTU均為預設支援的1500:

    image

    開啟巨型幀之後

    可以看到主網卡乙太網路和輔助彈性網卡乙太網路2的MTU均變成8500:

    image

查看Linux執行個體的MTU

樣本作業系統:Alibaba Cloud Linux 3.2。

樣本執行個體規格類型系列:ecs.g8i.large。

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 執行以下命令,查看當前網路介面的MTU。

    ip a
    開啟巨型幀之前

    可以看到主網卡eth0和輔助彈性網卡eth1的MTU均為預設支援的1500:

    image

    開啟巨型幀之後

    可以看到主網卡eth0和輔助彈性網卡eth1的MTU均為8500:

    image

使用ping命令手動探測PMTU

作為手動測試方式,您也可以通過ping命令,手動探測PMTU。詳細方法如下:

警告

進行此類測試可能會影響網路通訊,請在非高峰時段進行。

  • 測試方法:通過發送一個包含“不分區”標誌的資料包,並逐漸增加資料包的大小,直到收到“需要分區但設定了不分區標誌”的ICMP錯誤訊息,表明前一個大小就是PMTU減去IP頭部(20位元組)和ICMP頭部(8位元組)的大小。

  • 測試命令:執行以下命令,測試網路鏈路上的MTU大小。

    ping -c 1 -M do -s [包大小] 目標地址

    命令解釋:

    • -c 1:表示只發送一個資料包。

    • -M do:表示設定DF(Don't Fragment)不分區標誌。

    • -s [包大小]:指定資料包的大小(ICMP的PDU),初始值可以從一個常見的值開始(例如1472)。

      說明

      ping 使用的是ICMP協議,ICMP的下層協議是IP協議,ICMP頭部共8位元組,IP頭部共20位元組,ICMP的IP資料包 = IP頭部大小 + ICMP頭部大小 + ICMP的PDU,所以 -s 1472 表示整個IP資料包的長度等於20+8+1472 = 1500 位元組。

  • 測試樣本

    • 兩端主機MTU資訊:

      FROM:172.17.0.127 ,為方便測試對比,啟用ECS巨型幀,MTU為8500位元組。關於啟用巨型幀,請參見開啟/關閉巨型幀

      TO:172.17.0.128 MTU為1500。

    • 測試:執行以下命令,嘗試發送8472位元組的資料包(不包括IP和ICMP頭部大小)。

      ping -c 1 -M do -s 8472 172.17.0.128

    • 測試結果:收到了一個ICMP錯誤訊息,顯示"Frag needed and DF set(mtu=1500)",表示資料包因為超過了MTU(1500位元組)而需要分區,但是由於DF標誌位被設定,資料包不能被網路路徑上的轉寄裝置分區,因此被丟棄。

      image

手動修改網路介面的MTU

在阿里雲上,一些通訊情境或網路產品(例如VPN網關、流量鏡像)對ECS發出的資料包大小有著更加嚴格的要求,需要您主動縮小資料包尺寸,以保證網路連通性或更好的使用者體驗。您需要修改ECS網路介面的MTU值,以滿足這些產品的要求。

警告
  • 在修改MTU之前,請確保瞭解降低或提高MTU可能對網路效能產生的影響。不恰當的MTU值可能導致某些類型的資料包需要分區,從而影響網路效率。

    • Linux作業系統的MTU會通過DHCP伺服器自動擷取,如果您沒有主動禁用DHCP或者不是在VPN網關等隧道情境中,一般情況下無需手動修改網卡MTU。

    • 如果您是在巨型幀等特定情境下,請參考相關的最佳實務來解決,而不是手動修改MTU。關於巨型幀,請參見開啟/關閉巨型幀

  • 修改ECS網卡MTU時,注意不要超過ECS執行個體支援的MTU上限(開啟巨型幀時為8500,關閉或不支援巨型幀時為1500),否則可能導致網路不通。

在本樣本中,我們示範不同作業系統下手動修改ECS網卡MTU到1399位元組。

Windows執行個體

樣本作業系統:Windows Server 2022。

  1. 遠端連線Windows執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Windows執行個體

  2. 開啟命令提示字元或Windows PowerShell工具。

  3. 執行以下命令,查看乙太網路網卡的MTU。

    netsh interface ipv4 show subinterfaces

    返回資訊如下所示,表示乙太網路網卡當前的MTU值為1500。

    image

    netsh interface ipv4 show subinterfaces命令詳情

    您可以執行以下命令,查看介面資訊查詢命令參數詳情

    netsh interface ipv4 show subinterfaces ?

    參數解釋如下:

    image

  4. 執行以下命令,設定乙太網路網路介面的MTU為1399,且設定永久生效。

    netsh interface ipv4 set subinterface "乙太網路" mtu=1399 store=persistent

    返回“確定”表示命令執行成功。如果返回有錯誤資訊,根據錯誤資訊提示修改即可。

    image

    再次查看乙太網路網卡的MTU,可以看到變更已經生效。

    image

    netsh interface ipv4 set subinterface命令詳情

    您可以執行以下命令查看修改子介面命令配置參數詳情:

    netsh interface ipv4 set subinterface ?

    參數解釋如下:

    image

Linux執行個體

樣本作業系統:Alibaba Cloud Linux 3.2。

ip 命令臨時修改
重要

此方式為臨時修改網卡介面的MTU值,如果重啟網路服務或重啟執行個體,修改會失效。

  1. 遠端連線Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 執行以下命令,查看當前網卡的MTU。

    ip a

    可以看到,當前執行個體主網卡eth0和輔助彈性網卡eth1的MTU均為1500。

    image

  3. 執行以下命令,臨時修改網路介面eth1的MTU為1399。

    sudo ip link set dev eth1 mtu 1399

    再次查看網卡資訊,可以看到eth1的MTU已經變為1399:

    image

編輯網路設定檔(永久生效)
重要
  • 您可以通過編輯網路設定檔的方式修改網路介面的MTU,並且重啟網路介面服務或者重啟執行個體,使修改永久生效。

  • 不同Linux發行版及版本不同,網路設定檔不同,本文以RHEL/CentOS系的Alibaba Cloud Linux 3.2為例說明具體配置。

  • 如果您綁定了輔助彈性網卡(如eth1),且需要修改輔助彈性網卡的MTU,請您確保輔助彈性網卡已經正確配置。具體操作,請參見配置輔助彈性網卡

  1. 遠端連線Linux執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 執行以下命令,查看當前網卡的MTU。

    ip a

    可以看到,當前執行個體主網卡eth0和輔助彈性網卡eth1的MTU均為1500。

    image

  3. 執行以下命令,查看網路介面的設定檔資訊。

    ls /etc/sysconfig/network-scripts

    以下為當前執行個體的網路介面eth0和eth1的主網路設定檔

    image

  4. 執行以下命令,禁用cloud-init的網路設定功能。

    sudo vim /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg

    添加如下配置項:

    network: {config: disabled}
  5. 執行以下命令,編輯eth1的網路設定檔,增加MTU配置。

    sudo vi /etc/sysconfig/network-scripts/ifcfg-eth1

    image

  6. 執行以下命令,重啟網路服務,使配置生效。

    sudo systemctl restart NetworkManager

    執行成功後,再次查看網路介面資訊,可以看到當前網路介面eth1的MTU值已經是1399:

    image

實際應用中MTU的限制

ECS互訪鏈路MTU限制

支援巨型幀(Jumbo Frames)的ECS執行個體作為源主機時,目的主機在不同通訊情境下的鏈路最大MTU限制如下表所示:

目的主機

允許的最大MTU

“同VPC內” 或 “同region對等串連的VPC內” 開啟巨型幀的ECS執行個體

8500

“同VPC內” 或 “同region對等串連的VPC內” 未開啟巨型幀的ECS執行個體

1500

“通過CEN實現互連的VPC內”任意ECS執行個體

“通過Express Connect串連的線下IDC內”的主機

“通過EIP、PIP訪問”的外部主機

更多資訊,請參見VPC對等串連VPC串連

雲網路產品MTU限制

當您處於以下情境時,需要關注網路產品自身的MTU限制:

  • 在阿里雲網路內,鏈路預設支援1500 MTU,對於不支援巨型幀的ECS執行個體通訊時,需要關注VPN網關等網路組件自身的MTU限制。

  • 在使用非TCP協議(UDP、ICMP)訪問特定網路產品時,需要注意不同網路產品自身的MTU限制。

當前阿里雲雲產品普遍不支援巨型幀,部分網路產品的最大MTU限制如下表所示:

網路產品

支援的最大MTU

說明

NAT Gateway

1500

負載平衡(包括ALB、NLB、CLB)

ALB和CLB不支援分區報文的轉寄,因此使用UDP/ICMP進行通訊時,需要嚴格控制源ECS執行個體發出的資料包的整包大小不超過1500。

雲端服務(OSS,RDS等)

由於流量會經過負載平衡產品,需注意負載平衡產品的限制。

Global Acceleration

Cloud Firewall

私網串連PrivateLink

VPN網關

1399

更多資訊,請參見IPsec-VPN串連中MTU配置說明

如何合理設定MTU

最佳化MTU的設定可以提高網路效率和效能,減少分區和重組資料包的需求,從而降低網路延遲和提高輸送量。以下是一些關於MTU設定的最佳實務:

  • 確定合理的MTU

    • 瞭解實際網路環境的標準MTU值:乙太網路預設MTU通常是1500位元組。詳細資料,請參見MTU的分類

    • 可以通過ping命令探測PMTU。詳細資料,請參見使用ping命令手動探測PMTU

  • 啟用和適配PMTUD:確保作業系統或網路裝置支援並啟用PMTUD,這樣可以通過動態方式發現和適應網路路徑上允許的PMTU,應用程式通過適配感知並響應ICMP訊息,對資料包進行處理(縮小資料包長度),避免分區。詳細資料,請參見PMTUD工作原理

  • 考慮網路裝置的限制:確保路由器、交換器等網路裝置的MTU設定與作業系統的MTU設定一致,以避免資料包在傳輸過程中被分區或丟棄。

  • 適應特定應用:某些應用程式或協議有其推薦的MTU大小。VoIP、視頻會議等即時應用可能從較小的MTU中受益,減少延遲和提高包傳輸效率。

  • 定期監測網路效能:應定期監視網路效能和MTU大小的變化,以便及時調整以適應網路條件的變化,包括但不限於網路輸送量測試、延遲測試以及特定應用效能的評估。