ICMP
- ICMP - 互联网控制消息协议(Internet Control Message Protocol)
- ICMP 是互联网协议族的核心协议之一。
- IMCP 用于发送控制消息,提供可能发生在通信环境中的各种问题反馈。
- ICMP 消息都是直接封装在一个 IP 数据包中的,因此,和 UDP 一样,ICMP 是不可靠的。
原理及技术细节
- 每个路由器在转发数据报的时候都会把 IP 包头中的 TTL 值减 1。
报文结构
ICMP 报头从 IP 报头的第 160 位 (20 字节) 开始:(有可选部分另算)
8bit 8bit 8bit 8bit
+------+------+------+------+
| Type | Code | Checksum |
+------+------+------+------+
| ID | Sequence |
+------+------+------+------+
- Type: ICMP 报文类型。
- Code:进一步划分 ICMP 的类型;该字段用来查找产生错误的原因。
- 例如,ICMP 的目标不可达类型可以把这个位设为 1 至 15 等来表示不同的意思。
- Checksum:校验和。
- ID:ID/标识,在 Echo Reply 类型的消息中需要返回这个字段。
- Sequence:序号,在 Echo Reply 类型的消息中需要返回这个字段。
报文类型
Type | Code | Status | 描述 | 查询 | 差错 | 备注 |
---|---|---|---|---|---|---|
0:Echo 响应 | 0 | Echo 响应 | ✓ | ping 中使用 | ||
1 | 未分配 | ✓ | 保留 | |||
2 | 未分配 | ✓ | 保留 | |||
3:目的不可达 | 0 | 目标网络不可达 | ✓ | |||
1 | 目标主机不可达 | ✓ | ||||
2 | 目标协议不可达 | ✓ | ||||
3 | 目标端口不可达 | ✓ | ||||
4 | 要求分段并 (但) 设置 DF 标记 | ✓ | ||||
5 | 源路由失败 | ✓ | ||||
6 | 未知的目标网络 | ✓ | ||||
7 | 未知的目标主机 | ✓ | ||||
8 | 源主机隔离(作废不用) | ✓ | ||||
9 | 禁止访问的网络 | ✓ | ||||
10 | 禁止访问的主机 | ✓ | ||||
11 | 对特定的 TOS 网络不可达 | ✓ | ||||
12 | 对特定的 TOS 主机不可达 | ✓ | ||||
13 | 由于过滤 网络流量被禁止 | ✓ | ||||
14 | 主机越权 | ✓ | ||||
15 | 优先权终止生效 | ✓ | ||||
4:源端关闭 | 0 | 弃用 | 源端关闭(拥塞控制) | ✓ | ||
5:重定向 | 0 | 重定向网络 | ✓ | |||
1 | 重定向主机 | ✓ | ||||
2 | 基于 TOS 的网络重定向 | ✓ | ||||
3 | 基于 TOS 的主机重定向 | ✓ | ||||
6 | 弃用 | 备用主机地址 | ||||
7 | 未分配 | 保留 | ||||
8 | 0 | Echo 请求 | ✓ | |||
9 | 0 | 路由通告 | ✓ | |||
10 | 0 | 路由器的发现/选择/请求 | ✓ | |||
11:超时 | 0 | TTL 超时 | ✓ | |||
1 | 分片重组超时 | ✓ | ||||
12:参数问题-IP 头部错误 | 0 | IP 报文首部参数错误 | ✓ | |||
1 | 丢失必要选项 | ✓ | ||||
2 | 不支持的长度 | |||||
13 | 0 | 时间戳请求 | ✓ | |||
14 | 0 | 时间戳应答 | ✓ | |||
15 | 0 | 信息请求 | ✓ | |||
16 | 0 | 信息应答 | ✓ | |||
17 | 0 | 地址掩码请求 | ✓ | |||
18 | 0 | 地址掩码应答 | ✓ | |||
19 | 保留 | 因安全原因保留 | ||||
20~29 | 保留 | 保留用于稳健性实验 | ||||
30~39 | 弃用 | |||||
40 | Photuris, Security failures | ??? | ||||
41 | 用于实验性移动协议,如 Seamoby[RFC4065] | |||||
42~255 | 保留 | |||||
235 | 实验性 | RFC3692 | ||||
254 | 实验性 | RFC3692 | ||||
部分报文结构示例
3:目标不可达
目的地不可达由主机或其入站网关生成,以通知客户端由于某种原因目的地不可达。
0 8 16 24 32
+---------+----------+----------+----------+
| Type=3 | Code=... | Checksum |
+---------+----------+----------+----------+
| 未使用 | 下一跳MTU |
+------------------------------------------+
| IP报头和原始数据报数据的前8个字节 |
+------------------------------------------+
11: 超时
超时由网关生成,以便通知源
,数据报在 TTL=0 时被丢弃了。
0 8 16 32
+---------+----------+----------+
| Type=11 | Code=0/1 | Checksum |
+---------+----------+----------+
| 未使用 |
+-------------------------------+
| IP报头和原始数据报数据的前8个字节 |
+-------------------------------+
相关
- RFC 792