IFACE=$(ip route get 1.1.1.1 | awk '{for(i=1;i<=NF;i++) if($i=="dev"){print $(i+1); exit}}') echo"IFACE=$IFACE"
ip link show dev "$IFACE"
我的结果是:
IFACE=eth0
mtu 1500
2. 原始 baseline 测试
mkdir -p ~/mtu-test cd ~/mtu-test
{ echo"===== BASELINE $(date) =====" echo"IFACE=$IFACE"
ip link show dev "$IFACE"
sysctl net.ipv4.tcp_congestion_control net.core.default_qdisc
sysctl net.core.rmem_max net.core.wmem_max net.core.optmem_max
sysctl net.ipv4.tcp_rmem net.ipv4.tcp_wmem
tc -s qdisc show dev "$IFACE"
} 2>&1 | tee baseline-info.log
bash <(curl -sL https://Check.Place) -N 2>&1 | tee baseline-nq.log
ip linkset dev "$IFACE" mtu 1440
tc qdisc replace dev "$IFACE" root tbf rate 85mbit burst 32k latency 400ms
ip link show dev "$IFACE"
tc -s qdisc show dev "$IFACE"
然后重新跑测试:
traceroute --mtu 1.1.1.1 2>&1 | tee after-1440-traceroute-mtu.log
bash <(curl -sL https://Check.Place) -N 2>&1 | tee after-1440-nq.log
tc -s qdisc show dev "$IFACE" | tee after-1440-tc.log
我的 traceroute --mtu 结果里出现:
F=1440
后面没有继续压低到 1280 或更低。
4. 对照测试:只改 MTU,不加 TBF
tc qdisc del dev "$IFACE" root 2>/dev/null
ip linkset dev "$IFACE" mtu 1440
bash <(curl -sL https://Check.Place) -N 2>&1 | tee after-1440-no-tbf-nq.log
我的结果是:只改 MTU 1440 后,国际互连发送重传又回到几千。
所以这台主要问题不是 MTU 本身,而是出口跑满时撞机房 policing,需要本地 shaping。
5. 固化 TBF 85M
先恢复临时有效配置:
ip linkset dev "$IFACE" mtu 1440
tc qdisc replace dev "$IFACE" root tbf rate 85mbit burst 32k latency 400ms