ping 是一个网络诊断工具,它通过发送 ICMP (Internet Control Message Protocol) 回显请求包到目标主机,并等待回显应答,来测试与目标主机的网络连通性。

(图片来源网络,侵删)
基本用法
最简单的用法就是直接跟上目标主机名或 IP 地址:
ping google.com # 或者 ping 8.8.8.8
这会持续发送数据包,直到你手动按下 Ctrl + C 停止。
常用核心参数
这些参数在日常网络排查中最常用。
| 参数 | 全称 | 作用 | 示例 |
|---|---|---|---|
-c |
--count |
指定发送数据包的数量。 发送指定数量的包后自动退出。 | ping -c 4 google.com (只发4个包) |
-i |
--interval |
设置发送数据包的时间间隔(秒)。 默认是1秒,对于一些网络设备,过小的间隔可能导致丢包,可以调大。 | ping -i 2 google.com (每2秒发一个包) |
-s |
--size |
设置发送数据包的大小(字节)。 默认是56字节,加上ICMP头部8字节,总共是64字节,可以用来测试MTU(最大传输单元)。 | ping -s 1472 google.com (测试1500字节的MTU) |
-W |
--timeout |
设置等待每个回显应答的超时时间(秒)。 如果在这个时间内没有收到回复,ping 就会认为该包丢失,默认是10秒。 |
ping -W 1 google.com (只等待1秒) |
-w |
--deadline |
设置整个 ping 命令运行的总时间(秒)。 无论发送了多少个包,达到这个时间后命令自动退出。 |
ping -w 10 google.com (总共运行10秒) |
高级/特殊用途参数
这些参数用于更专业的场景。

(图片来源网络,侵删)
| 参数 | 全称 | 作用 | 示例 |
|---|---|---|---|
-f |
--flood |
洪水模式。 尽可能快地发送数据包,主要用于压力测试,这会占用大量带宽,通常需要 root 权限。 |
sudo ping -f google.com |
-q |
--quiet |
静默模式。 只在开始和结束时显示摘要信息,不显示每个包的详细过程。 | ping -q -c 4 google.com |
-a |
--audible |
audible 模式。 当收到一个回显应答时,会发出一个 "滴" 声,对需要听觉反馈的场景很有用。 | ping -a google.com |
-A |
--adaptive |
自适应模式。 根据网络状况动态调整发送间隔,在延迟高的网络中表现更好。 | ping -A google.com |
-D |
--timestamp |
在每个数据包中添加一个时间戳。 方便后续分析。 | ping -D google.com |
-n |
--numeric |
以数字形式输出主机地址,不进行DNS解析。 可以加快速度,避免DNS查询失败的影响。 | ping -n google.com |
-p |
--pattern |
填充数据包的内容。 可以指定一个16位模式的十六进制数,用于调试网络问题,例如路径MTU发现。 | ping -p ff google.com (用0xff填充) |
-R |
--route-record |
记录路由。 请求路由器在IP头中记录路径信息。注意: 这个选项很少被路由器支持,已过时。 | ping -R google.com |
-S |
--source |
指定源IP地址。 当机器有多个网卡时,可以指定从哪个IP地址发送数据包。 | ping -S 192.168.1.100 google.com |
-t |
--ttl |
设置数据包的生存时间(Time-To-Live)。 TTL 决定了数据包在网络中最多能经过多少个路由器,可以用来探测网络路径。 | ping -t 64 google.com (设置TTL为64) |
-T |
--tos |
设置服务类型(Type of Service)。 用于指定数据包的优先级和路由策略。 | ping -T 0x10 google.com |
-v |
--verbose |
详细模式。 显示ICMP报文的详细信息。 | ping -v google.com |
-V |
--version |
显示 ping 命令的版本信息。 |
ping -V |
实用示例
示例1:快速测试连通性(只发3个包)
ping -c 3 192.168.1.1
输出解读:
64 bytes from 192.168.1.1: 数据包大小和来源IP。icmp_seq=1: ICMP包的序列号。ttl=64: TTL值,可以大致判断目标主机和你的距离(Windows默认是128,Linux常见是64或255)。time=0.542 ms: 往返时间,即延迟,值越小越好。3 packets transmitted, 3 received, 0% packet loss: 摘要信息,统计了发送、接收、丢包率。
示例2:测试大包传输(MTU测试)
假设你的网络MTU是1500字节,数据包大小应为 1500 - 20(IP头) - 8(ICMP头) = 1472。
ping -s 1472 -c 4 your_server.com
如果出现 packet loss,说明路径上某个设备的MTU小于1500。
示例3:指定从特定网卡发送
你的服务器有 eth0 (10.0.0.1) 和 eth1 (192.168.1.1) 两个IP,你想从 eth1 发送。

(图片来源网络,侵删)
ping -S 192.168.1.1 8.8.8.8
示例4:快速静默测试
在脚本中,你只关心是否能通,不关心过程。
ping -q -c 1 8.8.8.8 > /dev/null 2>&1 && echo "Host is up" || echo "Host is down"
> /dev/null 2>&1: 将所有标准输出和错误输出丢弃。&&: 如果前一条命令成功(返回0),则执行&&后面的命令。- 如果前一条命令失败(返回非0),则执行 后面的命令。
重要注意事项
- 需要
root权限:在大多数现代Linux发行版(如Ubuntu, CentOS 7+)中,ping默认需要root权限才能发送数据包,这是为了防止恶意用户进行DoS(拒绝服务)攻击,普通用户可以使用ping(只读)和ping6,但可能无法发送数据,使用sudo可以解决。 - 防火墙:如果目标主机开启了防火墙,或者你本地的防火墙规则阻止了ICMP流量,
ping会显示100% packet loss,但这不代表网络不通,只是ICMP包被拦截了。 - ICMP被过滤:出于安全考虑,很多网络会主动过滤ICMP流量,
ping失败是常见现象,不能仅凭ping不通就断定网络有问题。
ping6 命令
ping6 是专门用于 IPv6 网络的版本,其用法和参数与 ping 基本相同,只是操作的对象是 IPv6 地址。
ping6 -c 4 2001:4860:4860::8888
希望这份详细的参数列表和示例能帮助你更好地使用 ping 命令!
