上周末家里电视投屏突然卡成 PPT,我本能地打开终端,脑子里已经过了一遍排查清单:ping 网关、ping DNS、换 DNS、抓包、看 DHCP、重启软路由。结果折腾一圈,问题自己好了。这种瞬间消失的网络故障最难搞,因为你手上没留下任何证据。直到最近我试了一款叫 ttl 的工具,才发现原来 traceroute 可以做得这么细——细到能区分”路由器真的丢包”和”它只是懒得回 ICMP”。
如果你也经常在家庭网络、软路由、VPS 或者 VPN 隧道之间排查延迟和丢包,这篇文章可能省你几次抓耳挠腮。
tl;dr
ttl 是 lance0 用 Rust 写的现代 traceroute 替代工具,GitHub 上 1.3k+ star,Apache-2.0 协议。它不是简单地把经典 traceroute 包个皮,而是把网络诊断里常用的几个高级能力做进了交互式 TUI:ASN 和 GeoIP 查询、ECMP 多路径探测、路径 MTU 发现、NAT 检测、路由抖动告警、MPLS 标签解析、ICMP 限速识别,还能导出 JSON/CSV 做 Prometheus 监控。

安装比想象中简单
项目主页推荐 Rust 用户直接 cargo install ttl,但大多数人更省心的是预编译二进制或 Homebrew。Mac 上:
brew install ttl
sudo ttl 8.8.8.8
Linux 用户下载 musl 静态二进制后,加一次 capability 就能免 sudo 跑:
sudo setcap cap_net_raw+ep $(which ttl)
ttl 1.1.1.1
官方也提供 Docker 镜像,适合临时扔到某台机器上诊断:
docker run --rm -it ghcr.io/lance0/ttl 1.1.1.1
最新发布版是 v0.21.0(2026-07-07),主要是允许关闭启动时的版本检查。这个细节我挺喜欢——网络诊断工具就不该默认打电话回家。
主界面长什么样
打开之后是一块深色 TUI,分成若干列:跳数、Host、ASN、Loss%、Sent、Last/Avg/Min/Max RTT、StdDev、Jitter,右侧还有 sparkline 小图。快捷键类似 vim 风格:q 退出、p 暂停、Tab 切换目标、e 导出 JSON、s 进设置。

最直观的感受是:所有信息同时出现。传统 traceroute 你得跑好几遍才能凑齐延迟、丢包、反向解析;ttl 把这些直接铺在你面前,而且是实时更新的。
几个真正有用的场景
1. 区分”真丢包”和”ICMP 限速”
家庭宽带或者某些云网络里,路由器会故意限制 ICMP 回应频率。这时候你用普通 traceroute 看到某跳 30% 丢包,很容易误判成链路质量差。ttl 会在 Loss 列标注 [RL?] 或 50%RL,告诉你这是限速而不是真的掉包。

2. 发现 ECMP 多路径
CDN 和大型网络常用等价多路径路由。普通 traceroute 一次只走一条流,看到的是”某一条”路径;ttl 支持 --flows 多流探测,能把多条并行路径都画出来,并区分是按流负载均衡还是按包负载均衡。对排查”为什么同一个目标有时快有时慢”特别有用。
3. VPN 隧道 MTU 黑洞
我在某台 VPS 上跑过 WireGuard,偶尔会出现大流量网页能打开、小批量数据却卡住的情况。这通常是 MTU 问题。ttl --pmtud 会用二分查找测出路径上最大不分片包大小,并直接显示 [MTU: 1400] 这种结果,比自己一个个长度试舒服太多。
4. 抓路由抖动
用 -i 0.5 缩短探测间隔后,ttl 会持续监测每一跳的响应 IP。如果某跳的下一跳突然变了,界面会显示 ! 标记。ECMP 正常负载均衡显示 E,所以两者不会被混淆。这对定位 ISP 侧 BGP 不稳定或者软路由双 WAN 切换很有帮助。
5. NAT 检测
多流模式下如果源端口被改写,ttl 会标 [NAT]。这个在家庭网关或者代理节点排查时能快速确认 NAT 行为是否如预期。
和同类工具怎么选
README 里有一张对比表,我把常用的几个捞出来:
| 功能 | ttl | Trippy | MTR | NextTrace |
|---|---|---|---|---|
| ICMP/UDP/TCP 探针 | ✓ | ✓ | ✓ | ✓ |
| ASN / GeoIP | ✓ | ✓ | ✗ | ✓ |
| ECMP 分类 | ✓ | ✗ | ✗ | ✗ |
| 路径 MTU 发现 | ✓ | ✗ | ✗ | ✗ |
| NAT 检测 | ✓ | ✗ | ✗ | ✗ |
| 路由抖动 | ✓ | ✓ | ✗ | ✗ |
| Prometheus 导出 | ✓ | ✗ | ✗ | ✗ |
Trippy 的世界地图和长期历史记录更强,界面也好看;MTR 最老牌,但功能停留在基础延迟和丢包;NextTrace 适合”优雅地查路由”但不怎么管持续监测。ttl 的强项是把很多网络工程师才会手动做的分析自动化,并且塞进了一个实时 TUI 里。
坑和限制
用下来几个真实限制需要提前知道:
- macOS 必须 sudo。macOS 不像 Linux 可以用 capability 细粒度授权,原生接口需要 root。我日常在 Mac 上跑就 brew 装完后
sudo ttl,注意别顺手sudo -i之后忘了自己在 root 环境。 - ICMP 被过滤时要切协议。有些网络直接丢 ICMP,这时加
-p udp或-p tcp --port 443更可靠。 - 多流模式在 NAT 后可能”自己打自己”。源端口被改写后,流与流之间的对应关系会乱,ttl 能检测并标 NAT,但数据本身可能没法继续正确关联。
- GeoIP 和 IX 查询要额外数据。GeoIP 用 MaxMind 数据库,IX 检测依赖 PeeringDB。默认能用,但高频查询建议配
PEERINGDB_API_KEY。 - Windows 不支持原生运行。只能 WSL2,官方文档也这么写。Windows 用户建议直接装 WSL。
我打算怎么用它
目前我已经把它装在了常用来排查网络的两台机器上:一台是 Mac mini,一台是家里的小主机。计划用来替代以前遇到卡顿就盲 ping 的习惯——以后先 ttl -p udp --flows 4 目标 看路径,再决定是 DNS 问题、某跳丢包、MTU 问题,还是 NAT 端口被改写。
另外它的 daemon 模式 + Prometheus exporter 也很适合长期挂在一台旁路设备上,把到几个关键目标(DNS、公网 IP、工作 VPS)的延迟和抖动指标推到监控栈里。这比单纯 ping richer 多了。
总结
ttl 不是那种”装上就能让网络变快”的工具,但它是那种当你网络出问题时,能让你更快定位到”到底是哪一跳、哪种问题” 的工具。Rust 写、Apache-2.0、跨平台、输出格式丰富,对家庭网络折腾党、软路由玩家、VPS 运维都挺合适。
如果你已经厌倦了 traceroute 和 mtr 的极简输出,又不需要 Trippy 那种世界地图花活儿,ttl 可能是中间最实用的那个选择。