Skip to content

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.5
text
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.1
text
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);
  • -f flood 仍需 root;
  • 容器/K8s 里 ping 常被 NetworkPolicy 或安全策略禁掉,ping 不通别直接判定服务故障。

七、新手易错点 ​

  1. 裸 ping 会一直跑:服务器上务必带 -c N,否则靠 Ctrl+C 停,忘了就一直在刷。
  2. ping 不通 ≠ 服务挂了:很多主机/云安全组禁 ICMP,但 80/443 端口正常,要再用 nc -zv 主机 端口 验证。
  3. ping 域名不通但 ping IP 通 = DNS 问题:分段排查时记住这个经典结论。
  4. -W 是单次等待,-w 是总时长:别搞混。
  5. 延迟高不代表你这边慢:time 是双向往返,瓶颈可能在对端或中间链路。
  6. 别用 -f 打公共地址:flood ping 属攻击行为,只在自己压测环境用。

八、相关命令与文档 ​