ping 是什么
ping 发送 ICMP 回显请求并等待应答,用往返时间(RTT)与丢包率判断链路是否通、质量如何。它测的是三层可达性,因此 ping 通只说明 IP 层能到达,不代表服务端口可用;反过来 ping 不通也可能是对端做了 ICMP 限速或直接禁 ping,而服务本身完全正常。做连通性判断时,ping 与按端口的探测(nc、curl、telnet)要配合使用。
基本信息
| 适用平台 | Linux、macOS、Windows 均有 ping;Linux 上是 iputils 版本,Windows 的选项与输出格式完全不同 |
|---|---|
| 命令语法 | ping [选项] 目标 |
| 常用选项 | -c 发送次数、-i 发送间隔、-W 单次等待应答的超时(秒)、-w 整个命令的总超时、-I 指定出口接口或源地址、-s 报文大小、-q 只输出摘要、-n 不做反向解析、-t 设置存活时间 |
| 权限说明 | Linux 上普通用户可用(现代 iputils 使用 ICMP socket),更严格的系统或容器需要 CAP_NET_RAW,或用 sudo |
| 默认行为 | 持续发送直到 Ctrl+C 结束;非交互场景必须加 -c,否则脚本会永远卡住 |
典型使用场景
- 首次连通性验证:新交付的机器或网络段先 ping 网关与对端地址
- 丢包与抖动观察:加 -c 与 -i 连续发一批小包,看 min/avg/max 与丢包率
- 指定源地址排查:多网卡机器上用 -I 指定出口,确认策略路由是否按预期选路
- MTU 与分片问题定位:用 -s 逐步增大报文并配合 -M 设置分片策略探测路径 MTU
- 脚本健康探测:-c 2 -W 1 -q 组合,用退出码判断,输出简短便于记录
- DNS 是否正常:直接 ping 域名,观察提示是解析失败还是请求超时
常用示例
常用示例
ping -c 4 8.8.8.8
ping -c 20 -i 0.2 10.0.0.5 # 高频小包看抖动
ping -c 4 -W 1 app.internal # 单次等待 1 秒,脚本友好
ping -I eth1 -c 4 10.1.1.1 # 指定出口网卡
ping -q -c 100 192.168.1.1 | tail -3 # 只留统计摘要
ping -c 3 -s 1472 -M do 10.0.0.1 # 探测 1500 MTU 是否可用
if ping -c 2 -W 1 -q 10.0.0.9 >/dev/null; then echo up; else echo down; fi输出读法
| 字段 | 含义 | 判断 |
|---|---|---|
| icmp_seq | 回显请求序号 | 丢包时会看到序号跳号 |
| ttl | 剩余存活时间,随经过的路由跳数递减 | 数值异常小说明绕路或对端系统类型不同 |
| time | 往返时间 RTT | 内网通常低于 1ms,同城链路个位数到几十毫秒 |
| packet loss | 丢包百分比 | 持续非零说明链路不稳或对端限速 |
| min/avg/max/mdev | 最小、平均、最大 RTT 与偏差 | mdev 大说明抖动明显,影响实时类业务 |
-W 与 -w 是两回事:-W 是每次等待应答的超时,-w 是整个命令运行的截止时间。脚本里常用 -c 2 -W 1,既限制次数又限制单次等待,最大耗时可控。
ping 的退出码可以用作判断依据(全部失败返回非 0),但要注意它只反映 ICMP 可达性。对方禁 ICMP 时会返回失败,此时应改用 nc -zv 主机 端口 或 curl 按实际业务端口验证。
不带参数直接 ping 会持续发送,在脚本或自动化工具里会挂住整个流程;连带宽都要留意——高频大包对生产链路是真实压力,排查抖动时用 -i 时不要小于 0.2 秒,除非明确知道影响范围。
IPv6 与路径跟踪:现代 iputils 把 IPv4 与 IPv6 合并到同一个命令,用 ping -6 指定协议;老系统上 IPv6 目标要用 ping6。定位「哪一跳开始丢包」用 traceroute 或 mtr,mtr 把 ping 的连续统计与逐跳路径合并展示,比先 ping 再 traceroute 更直观。
排查顺序建议:先 ping 网关确认本机出网正常,再 ping 目标地址区分是链路问题还是对端问题,最后按业务端口复验服务。网关通而对端不通时,接着看 ip route get 目标地址 的输出与沿途防火墙策略,比反复 ping 同一个地址有效得多。