IP、路由与 IPv6

Mac 上的 MTU 问题

MTU 是接口发送的最大数据包大小。如果路径中某段链路只接受更小的数据包,大型传输就可能卡住。

适用于:“系统设置”步骤适用于 macOS 13 Ventura 及更高版本。“终端”命令适用于所有当前 macOS 版本。核查日期:2026年10月29日

症状

  • 有些网站开始加载后就停住了。
  • 小请求正常,但上传或大文件下载会卡住。
  • 只有开启 VPN 时,或只在某个网络上才出现问题。

可能的原因

  • 链路的 MTU 较小。PPPoE、VPN 隧道和部分移动网络链路承载的数据包比标准以太网(1500 字节)更小。
  • ICMP 消息被阻止。阻止 ICMP 的防火墙会让 Mac 无法得知数据包过大。
  • 手动设置的 MTU。手动设置的值对当前网络来说可能过大或过小。

如何检查

  1. 找到每个网络端口的设备名称,例如 Wi-Fi 是 en0。

    networksetup -listallhardwareports
  2. 显示接口的 MTU。

    networksetup -getMTU en0
  3. 发送一个带 1472 字节数据、设置了“禁止分片”位的 ping。加上 28 字节的报头,正好 1500 字节。

    ping -D -s 1472 -c 3 1.1.1.1
  4. 如果没有收到回复,尝试更小的值。找出能收到回复的最大值,再加上 28。

    ping -D -s 1464 -c 3 1.1.1.1
  5. 显示接口可接受的 MTU 范围。

    networksetup -listValidMTURange en0

如何修复

  1. 仅在网络服务商或管理员建议时,或完成上述测试后,才更改 MTU。

  2. 选取苹果菜单 >“系统设置”>“网络”。点按服务,点按“详细信息”,然后点按“硬件”。

  3. 将“配置”设为“手动”,然后输入 MTU。

  4. 也可以在“终端”中设置。此示例使用 1492,这是 PPPoE 的常见值。

    networksetup -setMTU en0 1492

    需要管理员密码。

  5. 要恢复自动 MTU,使用以下命令。

    networksetup -setMTUAndMediaAutomatically en0

    需要管理员密码。

  6. 对于 VPN,如果 VPN App 提供此设置,就在其中更改 MTU。

常见问题

为什么 1472 对应 1500?

IPv4 ping 数据包包含 20 字节的 IP 报头和 8 字节的 ICMP 报头。1472 字节数据加上 28 字节报头,正好 1500。

为什么 PPPoE 用 1492?

PPPoE 会在以太网帧内加入自己的报头。RFC 2516 将 PPPoE 的 MRU 限制为 1492 字节。

参考资料

参考资料核查于 2026年10月29日。man 手册页为 macOS 自带版本;在“终端”中用 man <name> 打开。