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 的操作很简单:

  1. 源端向目的地发送 ICMP Echo Request 数据包
  2. 目的地收到数据包后发回 ICMP Echo Reply
  3. 源端测量往返时间 (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 不通,可以尝试用 curltelnet 连接特定端口,或使用 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 年仍然被全世界的网络工程师每天使用。简单、可靠、通用,这或许就是优秀软件的理想形态。

相关术语

IP 地址 互联网上设备的标识符,作为 ping 的目标指定。 延迟 ping 测量的 RTT (往返时间) 背后的基本概念。取决于物理距离和网络设备处理时间。 防火墙 可配置为阻止 ICMP,从而阻止 ping 响应。出于安全原因被广泛采用。 DNS 在 ping 中指定主机名时,首先通过 DNS 解析为 IP 地址。DNS 延迟包含在 RTT 中。 ISP ping 数据包经过的第一个网络。ISP 质量直接影响 ping 结果。

常见问题

ping名称的由来是什么?

源自潜艇声呐发出的"ping"声。发送数据包等待反射(响应)的动作与声呐相似,因此作者Mike Muuss直觉地如此命名。"Packet InterNet Groper"的首字母缩写说法是后来附会的。

ping不通是因为服务器宕机了吗?

不一定。许多服务器和防火墙出于安全原因会阻止ICMP。如果ping不通,请尝试用curl或telnet连接特定端口。

能用ping测量网速吗?

不能。ping只发送极小的数据包(通常64字节),无法测量带宽(网速)。ping测量的是RTT(往返延迟时间)和丢包率。