ping - 诞生于潜艇声呐的命令
排查网络故障时你运行的第一个命令:ping。它的名字来源于潜艇声呐 (声学测深仪) 发出的"ping"声。就像声呐发出声波并通过计时反射波的返回来测量距离一样,ping 发送数据包并通过计时响应来测量网络可达性和延迟。
ping 的诞生 - Mike Muuss 1983 年的通宵之作
ping 由美国陆军弹道研究实验室 (BRL) 的工程师 Mike Muuss 于 1983 年 12 月编写。起因是 BRL 的 IP 网络出现了可疑的异常。Muuss 想起此前从 David Mills 那里听到的思路,即用 ICMP 的 echo 数据包来诊断路径,于是当晚就把 ping 写了出来。
正如 Muuss 后来回忆的,这个名字的灵感来自潜艇声呐。"发送数据包并等待反射"的操作类似于声呐,所以他直觉地将其命名为"ping"。有些资料声称它代表"Packet InterNet Groper",但 Muuss 说过,对他而言 ping 不是缩写,而是声呐的比喻,这一展开被视为事后构造的逆向缩写。
ICMP - ping 背后的协议
ping 使用 ICMP (Internet Control Message Protocol) 的 Echo Request 和 Echo Reply 消息。与 TCP 或 UDP 不同,ICMP 不是为数据传输设计的,而是用于网络控制和诊断。
ping 的操作很简单:
- 源端向目的地发送 ICMP Echo Request 数据包
- 目的地收到数据包后发回 ICMP Echo Reply
- 源端测量往返时间 (RTT)
这个 RTT 就是你在 IP 确认上可以观察到的网络延迟的基本指标。从东京到美国西海岸的 ping 通常约 100-120 毫秒,到欧洲约 200-250 毫秒。这些延迟大部分是光在海底光缆中传播的物理时间。
ping 能告诉你什么和不能告诉你什么
能告诉你的
- 可达性:目标主机在网络上是否可达
- RTT (往返延迟):数据包往返的时间。让你感受网络"距离"
- 丢包率:发送的数据包中没有收到响应的百分比。网络质量指标
- TTL (生存时间):可以估算数据包经过了多少路由器。用初始值 (通常为 64 或 128) 减去响应 TTL 即可得到跳数
不能告诉你的
- 带宽:ping 只发送微小的数据包 (通常 64 字节),无法测量实际连接速度
- 服务状态:即使 ping 得到响应,Web 服务器或应用程序也可能没有正常运行
- 精确路由:ping 无法显示数据包经过了哪些路由器 (那是
traceroute的工作)
没有响应不一定意味着故障
当 ping 没有得到响应时,目标不一定是宕机了。许多服务器和防火墙出于安全原因故意阻止 ICMP Echo Request。
- Windows 防火墙:默认配置为阻止 ICMP Echo Request
- 云提供商:AWS 安全组除非明确允许,否则阻止 ICMP
- DDoS 防护:许多网络对 ICMP 进行速率限制或阻止,以防止使用大量 ICMP 数据包的 Ping Flood 攻击
如果 ping 不通,可以尝试用 curl 或 telnet 连接特定端口,或使用 traceroute 查看能到达多远。
ping 衍生的命令
把 ping 本身也放进来一起对照,就能看清每个命令各自是用来测量什么的。
| 命令 | 发送的数据包 | 能得知什么 | 主要用途 |
|---|---|---|---|
ping |
发送 ICMP Echo Request,并接收返回的 Echo Reply | 可达性、RTT (往返延迟)、丢包率,以及根据 TTL 估算的跳数 | 了解对方是否可达以及延迟大致有多大。无法得知带宽、服务状态和精确路由 |
traceroute / tracert |
把 TTL 从 1 起逐步递增地发送数据包 (Unix 的 traceroute 默认用 UDP,Windows 的 tracert 用 ICMP Echo Request) |
到目的地路径上每个路由器的 IP 地址和延迟 | 查看 ping 无法显示的路由;在 ping 没有响应时确认数据包能到达哪里 |
mtr (My Traceroute) |
结合 ping 和 traceroute 持续发送 | 持续实时显示每一跳的延迟和丢包率 | 持续观察路径上哪一跳的质量在下降 |
fping |
同时向多个主机发送 ping | 一次性掌握大量主机的响应情况 | 大规模网络监控 |
hping |
使用 TCP、UDP 和 ICMP 等任何协议发送数据包 | 主机对 ICMP 以外协议的响应 | 防火墙测试和端口扫描,对阻止 ICMP 的主机也可以使用 |
Mike Muuss 的后来
ping 的创造者 Mike Muuss 也是 BRL-CAD (开源 3D CAD 系统) 的开发者。遗憾的是,他于 2000 年 11 月在一场交通事故中去世,年仅 42 岁。
他在一个晚上写出的工具,距 1983 年诞生已过去 40 多年,到 2026 年仍然被全世界的网络工程师每天使用。简单、可靠、通用,这或许就是优秀软件的理想形态。
相关术语
常见问题
ping名称的由来是什么?
源自潜艇声呐发出的"ping"声。发送数据包等待反射(响应)的动作与声呐相似,因此作者Mike Muuss直觉地如此命名。"Packet InterNet Groper"的首字母缩写说法是后来附会的。
ping不通是因为服务器宕机了吗?
不一定。许多服务器和防火墙出于安全原因会阻止ICMP。如果ping不通,请尝试用curl或telnet连接特定端口。
能用ping测量网速吗?
不能。ping只发送极小的数据包(通常64字节),无法测量带宽(网速)。ping测量的是RTT(往返延迟时间)和丢包率。