Part 1: Overview
ICMPv6是工作于IPv6网络中的ICMP版本,在无法正确处理数据包时就会发送有关网络状况的信息。
例如,如果路由器无法将超大数据包发送到其他网络上时,就会向源主机发送ICMP消息。源主机通过该ICMP消息即可确定更佳的数据包大小并重新发送数据。
此外,ICMP还执行诊断功能,如ping。
ICMPv6比ICMPv4功能更加强大。
如ICMPv6包含了IPv4用于管理多播组成员关系的IGMP,包含了IPv4中负责将二层地址映射为IP地址的ARP/RARP功能。此外,还引入了ND(Neighbor Discover)机制。ND利用ICMPv6消息来确定连接在同一条链路上的邻居的链路层地址,还可以发现路由器、追踪路由器可达性并检测发生变化的链路层地址。ICMPv6定义了新的地址类型,以简化网络的重新编址工作,并在主机和路由器之间更新地址信息。ICMPv6还支持移动IPv6。ICMPv6是IPv6的一部分,每个IPv6节点都必须完全实现ICMPv6。
ICMPv6 RFC 4443, 4884
Neighbor Discover, ND RF 2461
Part 2: ICMPv6消息格式
类型(8-bit) | 代码(8-bit) | 校验和(16-bit) | 消息正文(可变长度) |
类型(Type 8-bit):指定ICMPv6消息类型,决定该消息剩余部分的格式。
代码(Code 8-bit):取决于消息类型,可以为类型字段提供更精确的说明。
校验和(Checksum 16-bit)
消息正文:ICMPv6包的大小不能超过IPv6 MTU的最小值1280字节。
ICMP消息可以分为两类:
ICMP error message(type: 00000000 - 01111111, 0 - 127)
- Destination Unreachable(message type 1)
- Packet Too Big(message type 2)
- Time Exceeded(message type 3)
- Parameter problem(message type 4)
ICMP information message(type: 10000000 - 11111111, 128 - 255)
- Echo Request(Message type 128)
- Echo Reply(Message type 129)
IMCPv4最新列表:http://www.iana.org/assignments/icmpv4-parameters
IMCPv6最新列表:http://www.iana.org/assignments/icmpv6-parameters
Part 3:Neighbor Discover, RFC 2461
IPv6节点利用邻居发现机制实现以下功能:
- 用于IPv6地址的自动配置
- 确定网络前缀、路由以及配置信息
- 用于IP地址的重复检测
- 确定同一链路上各节点的二层地址
- 发现可以转发其数据包的邻居路由器
- 追踪哪些邻居可达,哪些邻居不可达(Neighbor Unreachable Detection)
- 检测发生变化的链路层地址
邻居发现协议包括5种ICMP消息:
- Router Solicitation/Router Advertisement 消息对
- Neighbor Solicitation/Neighbor Advertiement 消息对
- ICMP Redirect 消息
1. Router Soliciation & Router Advertisement message
路由器会周期性地发出Router Advertisement消息。主机可以通过发送Router Soliciation消息来请求路由器宣告消息。
2. Neighbor Solicitation/Neighbor Advertiement 消息
该消息完成两大功能:
- 链路层地址解析
- 邻居不可达检测机制
3. Redirect 消息
路由器通过发送ICMP重定向消息,告诉节点在去往给定目的端的路径上有更优的下一跳。此外,重定向消息还可以告诉节点,目的端实际上就是同一链路上的节点,而不是位于远程子网的节点。