概述
问题:
- IP协议本身并没有为终端系统提供直接的方法来发现那些发往目的地址失败的IP数据包。
- IP没有提供直接的方式来获取诊断信息
解决:
ICMP:Internet控制报文协议:
- 与IP结合使用,以便提供与IP协议层配置和IP数据包处置相关的诊断和控制信息
- ICMP不为IP网络提供可靠性,表明了某些类别的故障和配置信息
ICMP在IPv4和IPv6中的封装
IPv4:

IPv6:

ICMP报文格式

- 以8位的类型和代码字段开始
- 其后的16位校验和字段涵盖了整个报文
ICMPv4中为类型字段保留了42个不同的值,用于确定特定的报文
ICMPv6中,将涵盖一个来自IPv6头部的伪头部(pseudo-header)
ICMP报文
分类:
- 差错报文:有关IP数据报传递的ICMP报文
- 查询或信息类报文:有关信息采集和配置的ICMP报文
ICMPv4报文
| 类型 | 正式名称 | 参考 | E/I | 用途/注释 |
|---|---|---|---|---|
| 0(*) | 回显应答 | RFC0792 | I | 回显(ping)应答,返回数据 |
| 3(*)(+) | 目的不可达 | RFC0792 | E | 不可达的主机/协议 |
| 4 | 源端抑制 | RFC0792 | E | 表示拥塞(弃用) |
| 5(*) | 重定向 | RFC0792 | E | 表示应该被使用的可选路由 |
| 8(*) | 回显 | RFC0792 | I | 回显(ping)请求(数据可选) |
| 9 | 路由器通告 | RFC1256 | I | 请求路由器通告 |
| 10 | 路由器请求 | RFC1256 | I | 请求路由器通告 |
| 11(*)(+) | 超时 | RFC0792 | E | 资源耗尽(例如IPv4 TTL) |
| 12(*)(+) | 参数问题 | RFC0792 | E | 有问题的数据包或头部 |
ICMPv6报文
ICMPv6负责的不仅是差错和信息类报文,也负责大量IPv6路由器和主机的配置。
ICMPv6中,差错报文的报文类型从0-127,信息类报文的报文类型从128-255。
处理ICMP报文
一般情况下:
- 传入的信息类请求将被操作系统自动处理
- 差错类报文传递给用户进程或传输层协议