在RFC2463中定义Internet Control Message Protocol Version 6(ICMPv6协议),ICMP是在TCP/IP网络中传递网络控制信息的主要手段,同时,ICMP还提供了差错报告的功能。在IPv6中,ICMPv6实现IPv4中ICMP、ARP、RARP和IGMP的功能;
1. ICMPv6报文的基本格式
graph LR
类型/1字节-->代码/1字节
代码/1字节-->校验和/2字节
校验和/2字节-->ICMP报文体/可变长
- 类型:标识ICMPv6报文类型,它的值根据报文的内容来确定。
- 代码:用于确定ICMPv6进一步的信息,对同一类型的报文进行了更详细的分类。
- 校验和:用于检测ICMPv6的报文是否正确传送。
- 报文体:用于返回出错的参数和记录出错报文的片段,帮助源结点判断错误的原因。或是其它参数。
ICMPv6报文类型
2 差错报文
2.1 目地不可达报文(type=1)
代码字段值 | 对应的原因 |
---|---|
0 | 没有到达目的结点的路由,路由器无法转发 |
1 | 路由器或防火墙的管理策略上禁止与某个目的结点通信 |
3 | 因链路或无法解析到目的结点链路层地址,导致目的地址不可到达 |
4 | IPv6分组己经传送到目的IP结点,但是不能递交给目的TCP或UDP端口的端口不可到达 |
2.2 分组太长(type=2)
当路由器转发一个分组时,发现分组的长度大于准备转发该分组的出口链路MTU ,那么路由器只能丢器该分组,并且向发送该分组的源结点发送"包过大报文”,报告出现差错。代码值为0 。
应用:Path MTU Discovery
2.3 超时报文(type=3)
当路由器接收到一个分组时发现分组的跳数限制字段值为0或1 ,路由器将丢弃该分组,并且向发送该分组的源结点发送"超时报文",报告出错。
代码字段值 | 对应的原因 |
---|---|
0 | 表示传送过程中超过了跳数的限制值; |
1 | 表示分段重组超时. |
2.4 参数问题报文(type=4)
当路由器或主机接收到一个分组的基本报头或扩展报头出现错误,而不能继续处理时,路由器将丢弃该分组,并且发送"参数问题报文” ,报告出错。
代码字段值 | 对应的原因 |
---|---|
0 | 表示报头字段错误 |
1 | 表示无法识别"下一个报头” |
2 | 表示无法识别IPv6选项 |
2.5 PMTU发现功能
Path MTU Discovery是利用ICMPv6分组太长差错报文,重复的检测源到达目的节点的指定路径上所有链路的最小链路MTU值。
3. 消息报文
3.1 回送请求报文
类型字段值为128 ,表示该ICMPv6信息报文中的回送请求报文。代码字段在发送端置为0校验和字段在计算之前被置0.标识字段与序列号字段用于在回送请求报文与回送应答报文之间建立对应关系。数据字段是诊断的内容,为8b的整数倍。
3.2 回送应答报文
当结点收到一个回送请求报文时,回送请求报文会发送一个回送应答报文。结构与回送请求报文相同。类型字段值为129.
常见应用:
1、Ping是测试目的主机是否能够到达的一种通用的方法。如下图:
2、tracert是IP 网络中重要的诊断工具之一,它可以给出到达目的地址的路径。其工作原理如下图:
4. ICMPv4与ICMPv6消息对应表
ICMPv4消息 | ICMPv6的对应消息 |
---|---|
目的不可达-网络不可达(类型3,代码0) | 目的不可达-没有目的地址的路由(类似1,代码0) |
目的不可达-主机不可达(类型3,代码1) | 目的不可达-地址不可达(类型1,代码3) |
目的不可达-协议不可达(类型3,代码2) | 参数问题-无法识别下一个头部的类型(类型4,代码1) |
目的不可达-端口不可达(类型3,代码3) | 目的不可达-端口不可达(类型1,代码4) |
目的不可达-需要分片并将DF置位(类型3,代码4) | 数据包过大(类型2,代码0) |
目的不可达-与目标主机的通讯被管理策略禁止(类型3,代码10) | 目的不可达-与目标的通信被管理策略禁止(类型1,代码1) |
源站抑制(类型4,代码0) | IPv6中不发这个消息 |
重定向(类型5,代码0) | 邻居节点发现重定向消息(类型137,代码0) |
超时-传输中的TTL超时(类型11,代码1) | 超时-超过传输中的跳数限制(类型3,代码0) |
超时-分片重组超时(类型11,代码1) | 超时-分片重组超时(类型3,代码1) |
参数问题(类型12,代码0) | 参数问题(类型4,代码0或代码2) |