在 Linux 網路調優中通常是指 MTU (Maximum Transmission Unit)

# 測試 1472 位元組的封包(加上 28 位元組標頭剛好是 1500)
ping -s 1472 -M do 10.11.60.151

如何計算 MTU 最佳值
MTU 是指網路上可傳輸的最大封包大小。如果封包超過路徑中某個節點的 MTU 且設置了「不分段」,封包就會被丟棄。
計算步驟:
  1. 進行二分法測試:從 1472 開始向下嘗試,直到找到一個能通的最大數值。
    • 如果 ping -s 1472 -M do [IP] 顯示 Frag needed and DF set,說明太大了。
    • 嘗試 14601450 等,直到找到最大可通數值(假設為 X)。
  2. 公式補回標頭
    • 最佳 MTU = 測試成功的大小 (X) + 28 位元組 (ICMP 標頭 8 + IP 標頭 20)
    • 範例:如果 -s 1464 能通但 1465 不通,則最佳 MTU 為 1464 + 28 = 1492

修改 MTU 值的指令
找到最佳值後,可以使用以下指令臨時修改網路卡(如 eth0)的 MTU:
sudo ifconfig eth0 mtu 1492
# 或者使用 ip 指令
sudo ip link set dev eth0 mtu 1492

快速自動測試腳本 (選用)
如果你不想手動試,可以直接在終端機貼上這行指令,它會自動從 1472 開始往下找第一個能通的大小:
for s in $(seq 1472 -1 1400); do ping -c 1 -s $s -M do 10.11.69.151 >/dev/null 2>&1 && echo "最大成功 Payload: $s, 建議 MTU: $((s+28))" && break; done

🌐─(root㉿wise)-[~]
└─# ping -s 1354 -M do 10.11.69.254
PING 10.11.69.254 (10.11.69.254) 1354(1382) bytes of data.
ping: sendmsg: 消息过长
^C
--- 10.11.69.254 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

🌐─(root㉿wise)-[~]
└─# ping -s 1352 -M do 10.11.69.254
PING 10.11.69.254 (10.11.69.254) 1352(1380) bytes of data.
1360 bytes from 10.11.69.254: icmp_seq=1 ttl=64 time=96.7 ms
^C
--- 10.11.69.254 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 96.659/96.659/96.659/0.000 ms

既然是在 虛擬網路(Virtual Network)  Edge 邊緣節點 環境下,1380 是一個非常經典的數值。
為什麼是 1380?
在雲端環境(如 Google Cloud VPC、Azure 或自建的 OpenStack/Kubernetes 網路)中,底層通常使用了 GeneveVXLAN  GRE 等隧道協定(Tunneling)。
  • 標準 MTU:1500
  • 封裝損耗 (Overhead):這些隧道協定通常會額外佔用約 50 ~ 120 bytes
  • 計算。這說明你的虛擬化層(Overlay Network)為了預留封裝空間,限制了內部封包的大小。
在 Edge/虛擬環境中的建議操作
如果這台機器是你的 Edge Gateway  虛擬機 (VM)

手動固定 MTU
虛擬機如果透過 DHCP 沒拿到正確的 MTU,封包在經過 Edge 節點時會因為 DF (Don't Fragment) 標誌而被丟棄。

bash
# 針對虛擬網卡(如 eth0 或 ens3)
sudo ip link set dev [網卡名稱] mtu 1380
ip link set dev edge0 mtu 1380

設定 MSS Clamping (最推薦)
如果你這台機器是作為 路由器/防火牆 使用,且無法控制所有用戶端的 MTU,你應該在 iptables 層級強制修改 TCP 三次握手的 MSS (Maximum Segment Size) 值,這能自動解決 90% 的網頁打不開或大檔傳輸失敗問題:

bash
# 計算方式:1380 (MTU) - 40 (IP/TCP Headers) = 1340

iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1340
請謹慎使用程式碼。

版权声明:
作者:yxbinghe
链接:https://www.zhanhao.ch/?p=661
来源:ice.99
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>