路由器系统路由表
IPv6网络中的ICMPv6相较于IPv4网络中的ICMP功能更加丰富和先进,其不仅仅替换了原先IPv4所使用的ICMP、ARP、IGMP、RARP等协议。
ICMPv6报文被整个封装在IPv6报头中,其报头中的下一报头值设定为58。通常情况下,ICMPv6报文的总大小不会超过IPv6的MTU值,即1280字节。其报文格式如下所述。
- 类型(Type): 此字段长度为8位,用于指明ICMPv6消息的具体类型。在差错类消息中,最高位为0;在消息类消息中,最高位为1。
- 代码(Code): 该字段同样为8位长,用于对某一特定类型的ICMPv6消息进行进一步区分。针对给定类型中的第一条消息,报文代码字段的值为0。
- 校验和(Checksum): 该字段长度为16位,用于存储ICMPv6消息的校验和。在计算校验和时,IPv6伪头部会被添加到ICMPv6消息之前。
- 消息内容(Message Body): 此部分包含了特定的ICMPv6消息数据。
具体而言,ICMPv6主要用于两大类报文:差错报文与消息报文。
- 差错报文主要用于网络错误报告和诊断。
- 消息报文则主要用于网络诊断、邻居发现(ND)、组播侦听发现(MLD)以及路由重定向等场景。
在网络通信中,每条链路都设定有最大传输单元(MTU),当数据报文长度超出此值时,便需对报文进行分片处理方可传输。与IPv4不同,IPv6严格规定分片和重组操作仅能在源节点和目的节点进行,中间路由器不得进行相关操作。
为了避免中间路由器对数据报文进行不必要的分片和重组操作,发出的数据报文大小需经过精确计算,确保其不超过路径MTU(PMTU),即源节点到目的节点间所有链路MTU中的最小值。
链路MTU指的是数据链路层能够传输的最大数据单元。这一值与帧的最大长度不同,因为帧的最大长度还需包含链路层的头部和尾部信息。例如,对于采用以太网II封装的以太网链路,其链路MTU为1500字节,而最大帧长度则为1526字节(包括以太网先导字段、源和目的地址、EtherType字段以及帧校验序列字段)。
源节点通常通过接收到的ICMPv6数据包过大消息来探测当前路径上的PMTU。以下是PMTU的发现过程:
- 源节点初步假定目的PMTU为发送流量接口的MTU。
- 源节点按照假定的PMTU长度发送IPv6数据包。
- 源节点根据收到的ICMPv6数据包过大消息中MTU字段的值来更新PMTU值。
- 重复上述步骤,直至源节点发现准确的PMTU为止。