Echo 请求与应答
ICMP Echo 是最基础的连通性探测机制:探测方发出类型为 8 的请求报文,目标回一个类型为 0 的应答,两者都带标识符与序列号,发送端用发出时间与收到应答的时间差算出往返时延。ping 命令封装的就是这一对消息。它只能证明 IP 层可达,既证明不了端口在听,也证明不了应用正常。
基本信息
| 类型 8 | Echo Request,由探测方主动发出 |
|---|---|
| 类型 0 | Echo Reply,由目标主机回送 |
| Identifier | 区分不同会话,ping 用它配对请求与应答 |
| Sequence | 序列号,用来统计丢包与乱序 |
| 封装 | IP 协议号 1;IPv6 上对应 ICMPv6 的 128 与 129 |
| 权限 | Linux 普通用户即可执行,部分环境依赖 ping_group_range 设置 |
最小实验
最小实验
ping -c 3 1.1.1.1 # 最基本的三次探测
ping -c 3 -s 1200 -M do 10.0.0.9 # 指定包大小并禁止分片,用于探测 MTU
ping -6 -c 3 2400:3200::1 # IPv6 探测,链路本地地址要带 %eth0
tcpdump -nn 'icmp[0] == 8 or icmp[0] == 0' -c 6 # 同时抓到请求与应答,确认双向通路ping 输出逐列读法
| 字段 | 含义 | 异常表现 |
|---|---|---|
| icmp_seq | 序列号 | 出现跳号说明中途丢包 |
| ttl | 剩余跳数 | 可用于粗略推断对端系统与经过的路由跳数 |
| time | 往返时延,毫秒 | 数值忽大忽小说明链路抖动 |
| packet loss | 丢包率统计 | 短时高丢包要与限速策略区分开 |
| rtt min 与 avg 与 max 与 mdev | 时延的最小、平均、最大与偏差 | mdev 偏大是抖动最直接的信号 |
ping 通不代表服务可用:IP 层可达时目标端口仍可能没监听;ping 不通也不代表主机挂了,很可能只是链路上禁用了 ICMP 或做了限速。
云安全组与部分企业防火墙默认丢弃 ICMP,用 ping 判断主机存活在这些环境里不可靠,应改用 nc 或 curl 对业务端口做探测。
排查丢包时建议同时看两端:本端 ping 统计只能说明这条路的表现,如果对端也能 ping 本端且丢包率明显不同,说明去程与回程分别在不同设备上受限速或策略影响,单向丢包比双向丢包更常见。