主题
ping 命令详解:测连通性与延迟(含 -c/-i/-W/-s/-f)
本文是 网络命令速查 中
ping的从 0 到 1 详解。 目标:把ping -h里的-c/-i/-W/-s/-f等常用选项讲清楚,知道怎么测延迟、测丢包、设超时。 环境依据:iputils 20211215(本机实跑ping -V及各示例输出;RHEL/Rocky 自带 iputils 版本选项一致)。
一、命令是干什么的
ping 用 ICMP 协议(网络层的"回声请求/回声应答")去敲目标地址:发一个包过去,对方若在线就回一个包,据此判断通不通、延迟多大、丢包多少。
- 不带
-c:会一直 ping 下去,按Ctrl+C停止; - 加
-c N:发 N 个包就停(服务器上推荐,免得忘关); - 看输出里的
time=是往返延迟(RTT),末尾汇总丢包率和延迟统计。
类比:就像在山谷里喊一声"喂?",听回声。喊了有回应 = 对方在线;回声快慢 = 延迟;喊十次有几次没回音 = 丢包率。
什么时候用:
- 上不了网,先
ping 网关、再ping 公网 IP、再ping 域名,分段定位是哪一层断了; - 看链路质量:延迟稳不稳、丢包多少;
- 注意:很多服务器/云厂商禁 ICMP,ping 不通不代表服务挂了,要结合端口测试(见 nc)。
二、命令语法
bash
ping [选项]... 目标主机名或IP[选项]:控制发几个、间隔多久、包多大、等多久;目标:域名或 IP,必填。
最简用法:
bash
ping 223.5.5.5三、选项全表(对照 ping -h)
1. 最常用
| 选项 | 中文含义 | 什么场景用 |
|---|---|---|
-c 次数 | 发够 N 个包就自动停 | 服务器上首选,避免一直跑 |
-i 秒 | 每两个包之间间隔多久 | 默认 1 秒;测高频时调小 |
-W 秒 | 单个回复最多等几秒 | 网络慢时设大,快时设小 |
-w 秒 | 总截止时间,到点就停(不管发了几个) | 脚本里限定最长耗时 |
-s 字节 | 自定义数据包大小(payload 字节数) | 测大包/MTU 问题 |
-n | 不做 DNS 反解 | 更快 |
-q | 安静模式,只打印末尾统计 | 不刷屏 |
2. 较少用但要认识
| 选项 | 中文含义 | 什么场景用 |
|---|---|---|
-f | 洪水 ping(flood,狂发包,需 root) | 极限压测,谨慎 |
-I 网卡或地址 | 指定从哪个网卡/源地址发包 | 多网卡环境指定出口 |
-t TTL | 设置 IP 包头 TTL | 排路径问题 |
-M do/dont/want | 路径 MTU 发现策略 | 测 MTU 黑洞 |
-d | 打开 SO_DEBUG | 调试 |
-v | 详细输出 | 看 ICMP 错误细节 |
-4 / -6 | 强制只用 IPv4 / IPv6 | 测指定协议族 |
-D | 打印时间戳 | 记录精确时刻 |
四、由浅入深的典型示例
以下输出为本机实跑。
示例 1:固定次数 ping(服务器推荐写法)
bash
ping -c 4 223.5.5.5text
PING 223.5.5.5 (223.5.5.5) 56(84) bytes of data.
64 bytes from 223.5.5.5: icmp_seq=1 ttl=51 time=9.36 ms
64 bytes from 223.5.5.5: icmp_seq=2 ttl=51 time=8.81 ms
64 bytes from 223.5.5.5: icmp_seq=3 ttl=51 time=8.79 ms
64 bytes from 223.5.5.5: icmp_seq=4 ttl=51 time=8.95 ms
--- 223.5.5.5 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 8.790/8.978/9.357/0.227 ms逐行读:
icmp_seq=N:第几个包;ttl=51:对方回包的 TTL;time=9.36 ms:这个包的往返延迟;- 汇总:
4 transmitted, 4 received, 0% packet loss四个包全收到,0% 丢包; rtt min/avg/max/mdev:最小/平均/最大/抖动(mdev 越小越稳)。
示例 2:不通时的输出
bash
ping -c 2 -W 1 192.0.2.1text
PING 192.0.2.1 (192.0.2.1) 56(84) bytes of data.
--- 192.0.2.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1021ms
100% packet loss= 一个回包都没有。可能是对方关机、禁 ICMP、或中间路由不通。
示例 3:组合超时与等待
bash
ping -c 4 -W 2 223.5.5.5
-W 2每个包最多等 2 秒,避免网络卡时干等。
示例 4:调小包间隔,更快探测
bash
ping -c 10 -i 0.2 223.5.5.5每 0.2 秒一个包,10 个包 2 秒打完。注意
-i小于 0.2 秒需要 root。
示例 5:自定义包大小(测 MTU)
bash
ping -c 3 -s 1000 223.5.5.5
-s 1000发 1000 字节 payload。配合-M do可探测路径最大不分片传输单元(MTU 黑洞)。
示例 6:只看统计不刷屏
bash
ping -c 10 -q 223.5.5.5
-q只打印开头一行和末尾统计,中间逐条不显示。
示例 7:指定出口网卡
bash
ping -I eth1 -c 3 223.5.5.5多网卡时强制从 eth1 发出,验证某条线路通不通。
示例 8:洪水 ping(危险,需 root)
bash
sudo ping -f 223.5.5.5⚠️
-f以最快速度狂发包(flood),按 Ctrl+C 才停,会给目标和网络造成压力。只对自己可控的机器用,严禁拿来打别人,否则等同于网络攻击。
五、高频组合速记
| 命令 | 用途 |
|---|---|
ping -c 4 目标 | 发 4 个包自动停(标准写法) |
ping -c 4 -W 2 目标 | 加超时,防干等 |
ping -c 10 -q 目标 | 安静模式只看统计 |
ping -s 1472 -M do 目标 | 探测 MTU |
ping -I eth0 目标 | 指定出口网卡 |
六、RHEL 系与 Debian 系差异
ping 来自 iputils,两系选项一致。几点注意:
- 普通用户也能 ping(现代内核允许非特权用户发 ICMP);
-fflood 仍需 root;- 容器/K8s 里 ping 常被 NetworkPolicy 或安全策略禁掉,ping 不通别直接判定服务故障。
七、新手易错点
- 裸
ping会一直跑:服务器上务必带-c N,否则靠 Ctrl+C 停,忘了就一直在刷。 - ping 不通 ≠ 服务挂了:很多主机/云安全组禁 ICMP,但 80/443 端口正常,要再用
nc -zv 主机 端口验证。 - ping 域名不通但 ping IP 通 = DNS 问题:分段排查时记住这个经典结论。
-W是单次等待,-w是总时长:别搞混。- 延迟高不代表你这边慢:
time是双向往返,瓶颈可能在对端或中间链路。 - 别用
-f打公共地址:flood ping 属攻击行为,只在自己压测环境用。
八、相关命令与文档
- 速查页:网络命令速查
- 测端口连通(ping 不通时用):见 nc 与 telnet
- 看路径上每一跳:见 traceroute 与 mtr
- 解析域名对应 IP:见 dig
- 网络整体原理:见 Linux 网络专题