ICMP 协议原理
一、基础定位
ICMP 依附 IP 协议(协议号 1),属于网络层,不独立封装链路头,报文封装在 IP 数据报的数据部分。
作用:差错报告 + 网络探测 + 控制通知,IP 本身无差错纠错能力,靠 ICMP 补全。
二、报文结构
IP首部 | ICMP首部(1B类型 + 1B代码 + 2B校验和 + 可变字段) | 原始IP报文前8字节
三、两大分类
1. ICMP 差错报告报文(被动触发,出错才发)
| Type | 名称 | 说明 |
|---|---|---|
| 3 | 目的不可达 | Code0 网络不可达、Code1 主机不可达、Code3 端口不可达 |
| 4 | 源站抑制 | 路由器拥塞通知降速(已弃用) |
| 5 | 重定向 | 告知主机存在更优路由 |
| 11 | 超时 | TTL 耗尽(traceroute 原理)、分片重组超时 |
2. ICMP 查询报文(主动收发,一问一答)
| Type | 名称 | 说明 |
|---|---|---|
| 8/0 | 回显请求/应答 | ping 核心,连通性+时延探测 |
| 13/14 | 时间戳请求/应答 | 时钟同步(已淘汰) |
四、经典应用原理
ping 原理
- 源主机构造 ICMP Type8 请求,封装 IP 发出
- 目标收到后构造 ICMP Type0 应答原路返回
- 源计算往返 RTT、丢包率
traceroute 原理(TTL + ICMP 超时)
- 第1跳:IP 包 TTL=1,首台路由 TTL-1=0 → 丢弃,返回 ICMP Type11 超时报文
- 持续递增 TTL 直到抵达目标主机
- 目标返回端口不可达/echo 应答,追踪结束
关联文档 -../网络 — 网络基础
- ../../linux/system/Linux — ping/traceroute 命令