在IPv6的网络架构中,ICMPv6展现出了比IPv4网络中的ICMP更为丰富的功能集,它承担了IPv4网络中ICMP、ARP、IGMP以及RARP等多种协议的综合功能。
在IPv6协议体系中,ICMPv6消息被完整地封装在IPv6数据包内,其IPv6报头中的“下一报头”字段值被设定为58。ICMPv6消息的整体尺寸通常不会超过IPv6的最大传输单元(MTU),即1280字节。关于ICMPv6消息的格式结构,具体如下所述:
类型标识(Type): 此字段用于标示ICMPv6消息的具体类别。该字段占用8位,在ICMPv6的错误消息类别中,最高位为0;而在非错误消息类别中,最高位则为1。代码值(Code): 它是对特定类型消息的进一步细分。此字段同样为8位,对于某一类型中的首个消息,代码字段值通常为0。校验和计算(Checksum): 该字段用于存储ICMPv6消息的校验和值。字段长度为16位。在计算校验和时,需要将IPv6的伪头部信息附加到ICMPv6消息的前面。消息主体(Message Body): 包含了特定ICMPv6消息的相关数据。错误报告类消息:主要用于网络错误的报告和诊断工作。功能类消息:主要用于网络诊断、邻居发现(ND)、组播监听报告(MLD)以及路由重定向等服务。在ICMPv6协议中,常见的错误报告类消息类型及其代码定义如下。
在ICMPv6协议中,常见的功能类消息类型及其代码定义如下。
在计算机网络中,每一条通信链路都定义了一个最大传输单元(MTU),即允许传输的最大数据包尺寸。当数据包的尺寸超过了链路的MTU时,就需要进行分片处理才能成功传输。
与IPv4相比,IPv6协议规定中间的路由设备不再负责对数据包进行分片和重组操作,这些任务仅在源节点和目标节点之间进行。
为了避免中间路由设备执行分片和重组操作,从源节点发出的数据包尺寸必须确保在传输路径上的所有链路MTU的最小值之下,这个最小值被称为路径最大传输单元(PMTU)。
链路MTU指的是在特定链路上能够发送的最大有效载荷尺寸。需要注意的是,这个值并不等同于链路上能够发送的最大帧尺寸,因为最大帧尺寸还包括了链路层的头部和尾部信息。例如,在采用以太网II封装方式的以太网链路上,链路MTU为1500字节,而最大帧尺寸为1526字节,其中包括了以太网的前导字段、源和目标地址、类型字段以及帧校验序列等。
源节点通过接收到的ICMPv6数据包过大消息来探测当前传输路径的PMTU值。PMTU的探测过程具体如下:
1.源节点将目标PMTU值初始化为发送数据流接口的MTU值。
2.源节点按照预设的PMTU值发送IPv6数据包。
3.如果某个路由接口的链路MTU小于数据包的尺寸,该路由器会向源节点发送一条ICMPv6数据包过大消息,并在消息中包含发生超载的接口的链路MTU值,同时丢弃该数据包。
4. 源节点根据收到的ICMPv6数据包过大消息中的MTU字段值,更新PMTU值。
5. 源节点重复步骤2至4,直到成功探测到PMTU值为止。