Linux/macOS traceroute默认用UDP、支持-I/-T/-n等多协议与精细参数,Windows tracert仅用ICMP且参数极少;macOS行为同Linux但部分版本TCP需额外支持;排障时应按业务协议统一探测模式而非依赖默认行为。

traceroute 命令在不同操作系统下不仅命令名不同(Linux/macOS 用 traceroute,Windows 用 tracert),其参数体系、默认行为和可选协议也存在实质性差异。掌握这些差异,才能避免“同一网络问题,在 Windows 看正常、Linux 却显示丢包”的误判。
Linux/macOS traceroute:高度可配置的多协议工具
Linux 和 macOS 的 traceroute 是功能完备的命令行工具,支持多种探测协议与精细控制:
- -n:跳过 DNS 反向解析,直接显示 IP 地址,显著加快输出速度
- -I:强制使用 ICMP Echo Request(需 root 权限),行为更接近 Windows tracert
- -T:改用 TCP SYN 包探测,适用于业务为 TCP 的场景(如 HTTPS 访问),可绕过禁用 UDP/ICMP 的防火墙
- -p <port>:配合 -T 使用,指定目标端口(如 -p 443),让路径更贴近真实业务流量
- -q <num>:设置每跳发送的探测包数量(默认 3 个),提高统计可靠性
- -w <sec>:调整单次探测超时时间(单位秒),避免因慢响应节点卡顿
- -m <max>:限制最大跳数(默认通常为 30),防止无限等待
Windows tracert:简洁固定、仅支持 ICMP
Windows 的 tracert 设计更偏向易用性与兼容性,参数极少,且协议不可切换:
在 Windows 上执行终端命令,或对比 Windows 与 Linux 的 Shell 语法时使用。建议先检测当前 Shell 是 PowerShell 还是 cmd.exe,再给出相应命令……
- -d:等效于 Linux 的 -n,禁用 DNS 解析,加速执行
- -h <max>:设定最大跳数(默认 30),对应 Linux 的 -m
- -w <ms>:设置每次探测的超时毫秒数(如 -w 1000 表示 1 秒),注意单位是毫秒而非秒
- 无协议切换选项:始终使用 ICMP Echo Request,不支持 UDP 或 TCP 模式
macOS traceroute:介于两者之间,但默认行为与 Linux 一致
macOS 内置的 traceroute 命令语法与 Linux 高度兼容,支持 -n、-I、-T、-p 等主流参数,但部分发行版可能默认未启用 TCP 模式(需确认是否含 libnet 支持)。值得注意的是:
- macOS 默认同样使用 UDP(端口 33434 起递增),与 Linux 行为一致
- 使用 sudo traceroute -T -p 443 example.com 可模拟 HTTPS 流量路径
- 若提示 “unknown option” 或 -T 不生效,建议安装 Homebrew 版 traceroute:
brew install traceroute
关键差异总结:别让参数习惯带偏判断
实际排障中,最容易踩坑的是把 Linux 的 -T 参数误用于 Windows,或在 Linux 下忽略 -n 导致卡在 DNS 查询上。更隐蔽的问题是:Windows 的 tracert 看起来“全通”,而 Linux traceroute 在某跳显示 * * *,这未必是故障——只是该节点选择不响应 UDP 探测包,但对 ICMP 或 TCP 仍放行。
真正有效的做法是:先用各自平台默认命令初筛,再根据业务协议(TCP 还是 UDP)统一切换到对应模式比对。比如排查网站打不开,就应在两端都走 TCP 443 端口路径,而非依赖默认 ICMP/UDP 输出。

















