核心 · Key Idea
一句话:ping 看「能不能通」和「延迟多少」;traceroute / mtr 看「数据包在哪一跳出问题」。两个命令是网络排查的第一步。
是什么#
- ping:发送 ICMP Echo Request,等 Echo Reply,测往返延迟(RTT)和丢包率。
- traceroute:故意发一系列 TTL 从小到大的包,让每一跳路由器都回报「我把它丢了」 —— 反向得到完整路径。
打个比方#
打个比方 · Analogy
ping = 朝对面喊「喂!能听到吗?」对方答「能!」并且你能感觉到回音的快慢。 traceroute = 你扔很多个**「最多跳 1 次」「最多跳 2 次」**的纸飞机,让沿途每一站告诉你「我是谁,我接到了」。
关键概念#
ICMPInternet Control Message Protocol
网络层的「控制 / 错误」协议,ping 和 traceroute 都基于它。
RTTRound-Trip Time
往返时间,ping 直接展示。
TTLTime To Live
包每过一跳 -1,到 0 就丢。traceroute 利用它探路径。
丢包率Packet Loss
ping 100 个包,丢了几个的百分比。
MTRMy Traceroute
traceroute + ping 持续探测的结合体,看每一跳的稳定性。
怎么工作#
每一跳报告耗时,组合起来就能看出慢在 / 丢在哪一段。
实操要点#
ping -c 10 host:发 10 个包就停(Linux/macOS)。Windows-n 10。ping -s 1472 -M do host:发 1472 字节不分片,测 MTU。- traceroute 在国内常常断:很多运营商屏蔽 ICMP TTL 回报,用
traceroute -T(TCP)或tcptraceroute/mtr -T走 TCP 80/443 通常能穿过。 - mtr 是金标:
mtr host持续刷新,看每跳的丢包 / 抖动 / 平均 RTT。长时间观察才能看出哪一跳真的不稳。 - ping 通 ≠ 服务能用:ping 是网络层 ICMP,服务可能挂了;ping 不通也未必网络坏(ICMP 被拦截,TCP 还能通)。
易混点#
ping 不通
可能:网络层不通 / **目标禁 ping**(防火墙)。
服务连不上
可能:网络通但服务没监听 / **端口被防火墙拦**。
用 `nc -vz host port` 或 `telnet host port` 实测。
用 `nc -vz host port` 或 `telnet host port` 实测。
延伸阅读#
- TCP vs UDP
- Wireshark —— 能看到 ICMP 帧的真实内容
- mtr / traceroute 进阶