VPN 的 MTU 更小会更快吗?对比真实证据
更低的 MTU 可以绕开路径限制,却仍可能牺牲吞吐。保留改动之前,请比较真实约束、包头开销与工作负载。
隧道会丢弃大流量却能通 ping,于是建议来得很快:把 MTU 调低。这个修法有时有效,随后就被套用到每个网络上的每个配置。正是从这一刻起,一次有针对性的修复变成了长期的性能税。真正该做的比较,是路径的真实上限与把每个包都压到它之下的代价。
调低 MTU 时究竟缩小了什么
每个包在承载你的数据之前先承载报头。在 1500 字节的以太网路径上,IPv4 与 TCP 占去 40 字节,留给载荷 1460 字节;封装又在外面叠加 IP、UDP 与隧道报头,于是内部载荷预算再次下降。调低接口 MTU,就是有意缩小这份预算。
开销与包的数量成正比,与字节数无关。同一个文件拆成更多包,路径上的每台设备都要处理更多中断、更多路由决策和更多逐包处理。在一台已经接近每秒包数上限的路由器上,这是实打实的变慢,而不是四舍五入的误差。即使传输本身成功,代价依然存在。
所以更小的 MTU 是对约束的绕行,而不是通用优化。它用可靠性换取对无法承载更大帧的路径的适配,却让本不需要缩小的每个包都付出了额外开销。
什么时候更小的 MTU 才是正确的修复
典型症状很具体:TCP 握手完成,小响应能收到,而较大的下载会卡住或重置。带禁止分片位、1472 字节的 ping 失败,而 1400 字节的 ping 成功,这说明路径无法承载满尺寸数据包,也没有回送那条本应告诉发送方缩小分片的 ICMP 消息。
路径 MTU 发现依赖那些 ICMP 需要分片消息。防火墙把它们丢掉时,发送方会不断重试大包,连接看起来就像挂住了。在隧道一侧调低 MTU 可以避开这次重试,对那个网络而言这是合理的修复。
接入技术也各有上限:PPPoE 通常封顶在 1492,部分移动与 DSL 路径更低,嵌套隧道会把开销扣两次。要测量真实路径,而不是从指南里抄一个数字;并记住 IPv6 要求承载它的每条链路至少有 1280 字节的 MTU,如 RFC 8200 所规定。
改动一个控制项之前,先比较三个
MTU、MSS 与分片是不同层次上的不同控制项,改错了一个,症状仍会留在原处。
| Control | Layer | What it changes | Where it misleads |
|---|---|---|---|
| Interface MTU | IP link | Largest frame the interface will send | Penalizes every protocol, not just the one that failed |
| TCP MSS clamp | TCP | Segment size advertised in the handshake | Leaves UDP and QUIC untouched |
| DF and fragmentation | IP | Whether a router may split a packet | Can break path MTU discovery and security assumptions |
| Tunnel overhead | Encapsulation | Inner MTU after outer headers | Mismatch shows up only for large inner packets |
限制 MSS 往往是最小侵入的修复,因为它只影响 TCP,把接口留给其他流量。更低的接口 MTU 覆盖面更广、更容易推演,所以在家用路由器上很常见,但它让每个协议都为一个协议的问题买单。
关闭禁止分片的行为,等于允许分片来掩盖症状;它通常会让延迟更糟,同时破坏本可以找到正确尺寸的反馈。不要把它当作长期修复。
要衡量权衡,而不是只看一个数字
用禁止分片探测找出路径上限:从较大的值开始,逐步下调,直到收到回应:
ping -M do -s 1472 203.0.113.10
ping -M do -s 1400 203.0.113.10
tracepath 203.0.113.10然后在两种设置上比较真实任务:同一个文件传输、同一个端点、同一个网络。记录完成时间与重传次数,例如用 nstat -az TcpRetransSegs,并留意设备 CPU(若隧道终结在小路由器上)。短时间的合成吞吐测试可能错过几兆字节之后才出现的停顿。
缩小之后包计数会上升,因为同一次传输现在用了更多包。这是预期之内,并不能证明吞吐更高。要比较完成的应用数据量、重传次数与响应性,而不只是包速率。
分阶段引入改动,并把范围收窄
记录原始值,只改一个控制项,在长期保留之前重复测量。如果证据显示没有收益,就用当初设置时用的同一条接口命令恢复原值:
ip link set dev wg0 mtu 1420
ip link set dev wg0 mtu 1500把结果限定在真正需要它的网络上。一个必须在酒店 Wi-Fi、手机热点和办公 LAN 上工作的配置,不应继承其中任何一个所需的最低值,除非客户端无法探测路径。
正确的值是路径上能存活的 MTU 最大值,而不是让症状消失的最小值。记录路径、探测结果与回滚步骤,并在接入网络变化时重新审视这项设置。