关于本文
本文是通过利用生成式 AI 的自动化生成流程创建的。在查阅了 iputils 的 tracepath 第一手资料后,针对 Linux 系统整理了不仅类似于 traceroute 的路由显示,还包括在何处查看 Path MTU(PMTU)的内容。验证状态:📘 已确认 tracepath 官方规范・未进行实际通信验证
信息确认基准日:2026年10月5日
当遇到“可以通信,但较大体积的通信会在中途停止”、“通过 VPN 访问特定网站时不稳定”等情况时,除了路由之外,Path MTU也是一个重要的线索。
Linux 的 tracepath 在追踪到目标地址的路由的同时,还会显示在该路由上发现的 MTU 信息。
直接执行 tracepath
tracepath example.com
根据 iputils 的手册说明,tracepath 是一个在追踪到目标地址的网络路径的同时,调查该路径上 MTU 的工具。
它类似于 traceroute,但通常不需要超级用户(superuser)权限。
什么是 Path MTU
MTU 是单次能够发送的 IP 数据包大小的上限。
然而,即使你网卡(NIC)的 MTU 是 1500,也并不意味着通往目标地址的所有路径上都能通过 1500 字节的数据。
在中途,
VPN
隧道
PPPoE
云连接
特殊网络设备
等情况可能会导致路径上的某个地方需要更小的 MTU。
从源到目标能够通过的最大尺寸被视为 Path MTU。
flowchart LR
A["PC<br>MTU 1500"] --> B["Router<br>1500"]
B --> C["VPN/Tunnel<br>1420"]
C --> D["Internet<br>1500"]
D --> E["Server"]
C --> F["Path MTUは小さい区間の影響を受ける"]
查看输出中的 pmtu
输出会根据环境而有所不同,但在 tracepath 中,pmtu 的变化和最后的摘要将成为线索。
不要死记文章中固定的输出结果作为标准答案,而是要在自己的路径中,
能看到多少跳(hop)
pmtu 是否在半途中发生变化
最后显示的是什么值
来进行确认。
使用 -n 禁用名称解析
tracepath -n example.com
-n 可以避免在显示跳数时进行 DNS 名称解析,从而专注于通过数字地址进行确认。
这在排查“路由显示缓慢究竟是网络本身的问题,还是反向解析等名称 resolving 的问题”时也非常有用。
分别查看 IPv4 和 IPv6
tracepath -4 example.com tracepath -6 example.com
在双栈环境中,IPv4 和 IPv6 的路由路径有时会有所不同。
即使是相同的主机名,
在IPv4下稳定
只有IPv6的路由不同
只有一端无法到达
可以进行这样排查。
与traceroute有什么不同?
两者都可以观察路由,但tracepath的主要目的还包括路径MTU发现(Path MTU discovery)这是它的特点。
| 要查看的内容 | 用tracepath查看 |
|---|---|
| 路由 | 跳数 |
| 仅数字地址 | -n |
| 固定IPv4 | -4 |
| 固定IPv6 | -6 |
| 路径上的MTU | pmtu |
如果只把它当成“traceroute的替代品”,就会忽视查看PMTU的价值。
尝试只更改一个地方
首先,
tracepath example.com
执行后,接下来将其更改为
tracepath -n example.com
。
我们看的不是路径本身,而是名称解析对显示和时间的影响。
此外,如果将 IPv4 和 IPv6 分开,就能逐一追踪更改。
切勿仅凭 tracepath 断定 PMTU 问题
即使 tracepath 显示较小的 PMTU,也不要仅凭这一点确定故障原因。
在实际工作中,应结合确认
接口 MTU
VPN/Tunnel 设置
ICMP 相关过滤器
TCP MSS
实际失败的通信大小
IPv4/IPv6 差异
FW/负载均衡器/CDN
等内容。
有时路径上的设备不响应,因此并非总能看到所有跃点。
常见的“仅小数据通信能通过”的症状
例如,
ping 可以通过
DNS 也能解析
小的 HTTP 响应可以通过
只有较大的上传或特定的 TLS 通信被阻止
遇到这种情况时,仅用简单的“能连接/不能连接”是无法解释的。
PMTU 和 MSS 是怀疑此类与大小相关的问题的线索之一。
权限方面的特点
iputils 的 tracepath 手册中说明,它虽然与 traceroute 类似,但通常不需要超级用户权限。
在排查故障时,无需一开始就假定需要 sudo 权限即可进行尝试,这一点非常便捷。
不过,根据发行版的不同,软件包配置和安装状态也会有所差异。
Daily-Code-Samples
我们准备了一个脚本,用于接收目标主机作为参数,并依次尝试普通显示与 -n 。
