在 Linux 網路調優中通常是指 MTU (Maximum Transmission Unit)
# 測試 1472 位元組的封包(加上 28 位元組標頭剛好是 1500)
ping -s 1472 -M do 10.11.60.151
- 進行二分法測試:從
1472開始向下嘗試,直到找到一個能通的最大數值。- 如果
ping -s 1472 -M do [IP]顯示Frag needed and DF set,說明太大了。 - 嘗試
1460、1450等,直到找到最大可通數值(假設為X)。
- 如果
- 公式補回標頭:
- 最佳 MTU = 測試成功的大小 (X) + 28 位元組 (ICMP 標頭 8 + IP 標頭 20)。
- 範例:如果
-s 1464能通但1465不通,則最佳 MTU 為1464 + 28 = 1492。
eth0)的 MTU:sudo ifconfig eth0 mtu 1492
# 或者使用 ip 指令
sudo ip link set dev eth0 mtu 1492
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
- 標準 MTU:1500
- 封裝損耗 (Overhead):這些隧道協定通常會額外佔用約 50 ~ 120 bytes。
- 計算:。這說明你的虛擬化層(Overlay Network)為了預留封裝空間,限制了內部封包的大小。
手動固定 MTU:
虛擬機如果透過 DHCP 沒拿到正確的 MTU,封包在經過 Edge 節點時會因為 DF (Don't Fragment) 標誌而被丟棄。
# 針對虛擬網卡(如 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% 的網頁打不開或大檔傳輸失敗問題:
# 計算方式:1380 (MTU) - 40 (IP/TCP Headers) = 1340
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1340
共有 0 条评论