ping 命令简介
ping 是一个网络诊断工具,它使用 ICMP (Internet Control Message Protocol) 协议的 "Echo Request"(回显请求)消息来测试与另一台主机的网络连接,它会发送数据包到目标主机,并等待目标主机返回 "Echo Reply"(回显应答)。

(图片来源网络,侵删)
通过分析返回的应答,你可以判断:
- 目标主机是否可达:是否收到了响应。
- 网络延迟:数据包往返所需的时间(RTT, Round-Trip Time)。
- 数据包丢失率:发送了多少数据包,收到了多少。
基本语法
ping [选项] 目标主机
目标主机 可以是 IP 地址(如 8.8.8)或域名(如 google.com)。
核心常用参数
这些参数在日常网络排查中最常用。
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-c |
--count |
指定发送数据包的数量,发送完指定数量的包后,ping 会自动退出。 |
ping -c 4 google.com (只发4个包) |
-i |
--interval |
指定发送数据包的时间间隔(单位:秒),默认值是1秒。注意:普通用户通常只能设置大于等于0.2秒的间隔,root 用户可以设置更小的值。 | ping -i 2 192.168.1.1 (每2秒发一个包) |
-s |
--size |
指定发送数据包的大小(单位:字节),默认是56字节,加上ICMP头部8字节,总共是64字节。 | ping -s 1472 192.168.1.1 (发送1472字节数据包) |
-W |
--timeout |
指定等待每一回显响应的超时时间(单位:秒),如果在超时时间内没有收到响应,ping 会认为该包丢失,默认是10秒。 |
ping -W 1 192.168.1.1 (等待响应最多1秒) |
-w |
--deadline |
指定 ping 命令运行的总时间(单位:秒),无论发送了多少个数据包,与 -c 类似,但一个是按数量结束,一个是按时间结束。 |
ping -w 10 google.com (总共运行10秒) |
其他重要参数
这些参数在特定场景下非常有用。

(图片来源网络,侵删)
| 参数 | 全称 | 描述 | 示例 |
|---|---|---|---|
-f |
--flood |
洪水模式,以最快速度发送大量数据包,每发送一个数据包就打印一个点,这会占用大量网络带宽,通常需要 root 权限。 | sudo ping -f 192.168.1.1 |
-l |
--preload |
在发送第一个数据包之前,预先发送多个数据包,必须与 -f 一起使用。 |
sudo ping -f -l 5 192.168.1.1 (先发5个包) |
-q |
--quiet |
静默模式,只输出摘要信息(总发送、接收、丢失、时间统计),不显示每个包的详细信息。 | ping -q -c 4 google.com |
-A |
--adaptive |
自适应模式,根据网络延迟动态调整发包间隔,以避免在网络拥塞时增加负担。 | ping -A google.com |
-D |
--timestamp |
在每个输出行前打印时间戳,格式为 [timestamp],方便与其他日志关联分析。 |
ping -D google.com |
-n |
--numeric |
只输出 IP 地址,不尝试将地址解析为主机名,可以加快速度,避免 DNS 查询失败的影响。 | ping -n 192.168.1.1 |
-p |
--pattern |
指定填充数据包的十六进制模式,用于测试数据包内容是否被修改。 | ping -p ff 192.168.1.1 (用0xff填充数据包) |
-R |
--record-route |
记录路由,要求路由器记录数据包的路径,但很多路由器会忽略这个选项。 | ping -R 192.168.1.1 |
-t |
--tos |
设置服务类型 (Type of Service),设置低延迟、高吞吐量等。 | ping -t 0x10 192.168.1.1 (设置低延迟) |
-v |
--verbose |
详细模式,显示 ICMP 数据包的详细信息。 | ping -v google.com |
-4 |
-ipv4 |
强制使用 IPv4,在有 IPv6 地址的环境下,可以明确指定使用 IPv4 协议进行 ping。 | ping -4 google.com |
-6 |
-ipv6 |
强制使用 IPv6,与 -4 相对,明确使用 IPv6 协议。 |
ping -6 ipv6.google.com |
实战示例
示例 1:快速测试与 google.com 的连接
这是最常见的用法,发送4个包后自动退出。
ping -c 4 google.com
输出解读:
PING google.com (142.250.185.78) 56(84) bytes of data.
64 bytes from lhr4s01-in-f14.1e100.net (142.250.185.78): icmp_seq=1 ttl=116 time=15.2 ms
64 bytes from lhr4s01-in-f14.1e100.net (142.250.185.78): icmp_seq=2 ttl=116 time=16.1 ms
64 bytes from lhr4s01-in-f14.1e100.net (142.250.185.78): icmp_seq=3 ttl=116 time=15.8 ms
64 bytes from lhr4s01-in-f14.1e100.net (142.250.185.78): icmp_seq=4 ttl=116 time=15.5 ms
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 15.231/15.610/16.112/0.345 ms
4 packets transmitted, 4 received, 0% packet loss: 发送4个,收到4个,丢包率0%,连接良好。rtt min/avg/max/mdev: 往返时间的最小值、平均值、最大值和标准差,数值越小且稳定,说明网络延迟越低。
示例 2:以更快的速度发包(每0.5秒一个)
ping -i 0.5 192.168.1.1
注意:普通用户可能没有权限设置小于0.2秒的间隔,此时会提示 ping: cannot flood; minimal interval is 200ms。
示例 3:测试更大的数据包(常用于 MTU 路径发现)
ping -s 1472 192.168.1.1
小知识:以太网帧的 MTU (Maximum Transmission Unit) 通常是1500字节,减去IP头部(20字节)和ICMP头部(8字节),最大有效数据载荷是1472字节,如果发送大于1472的包,可能会在中间路由器被分片或丢弃,可用于排查 MTU 问题。

(图片来源网络,侵删)
示例 4:静默模式,只看统计结果
ping -q -c 5 8.8.8.8
输出:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
--- 8.8.8.8 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4005ms
rtt min/avg/max/mdev = 8.521/9.110/9.821/0.493 ms
非常适合用在脚本中,只关心最终结果。
ping 的工作原理
- 构建 ICMP Echo Request 包:
ping命令会创建一个 ICMP Echo Request 数据包,并将其封装在一个 IP 数据包中。 - 发送数据包:IP 数据包被发送到目标主机的 IP 地址。
- 路径上的路由器:数据包经过沿途的路由器,每个路由器都会查看 IP 头部,决定下一跳的地址,并将 TTL (Time To Live) 值减1。
- 目标主机接收:当数据包到达目标主机时,目标主机的操作系统会识别出这是一个 ICMP Echo Request 包。
- 发送 ICMP Echo Reply:目标主机会创建一个 ICMP Echo Reply 包,并将其发回给源主机。
- 计算时间:源主机在发送 Echo Request 的同时记录时间,在收到 Echo Reply 后再次记录时间,两者之差就是往返时间。
- TTL 耗尽:TTL 在到达目标主机前减为0,最后一个处理该包的路由器会发送一个 "Time Exceeded" (ICMP 类型11) 的消息给源主机,告知数据包已过期。
注意事项
- 防火墙:如果目标主机有防火墙,可能会阻止 ICMP 请求,导致
ping失败。ping失败不代表网络一定不通,可能只是对方禁用了 ICMP。 - 权限:某些高级参数(如
-f)需要root或sudo权限才能使用。 - 网络负载:
ping会产生网络流量,在生产环境的网络上进行ping -f测试可能会对其他业务造成严重影响,请谨慎使用。
