2.1.1 IPv6报文格式
1. IPv6报文基本头格式
IPv6报文基本头格式如图 2-1所示。
图2-1 IPv6报文基本头格式
(1) 版本:4bit,值为 6表示 IPv6报文。
(2) 流量级别:8bit,类似于 IPv4中的 TOS域。
(3) 流标签:20bit,IPv6中新增。流标签可用来标记特定流的报文,以便在网络层区分不同的报文。转发路径上的路由器可以根据流标签来区分流并进行处理。由于流标签在 IPv6报文头中携带,转发路由器可以不必根据报文内容来识别不同的流,目的节点也同样可以根据流标签识别流,同时由于流标签在报文头中,因此使 用IPSec后仍然可以根据流标签进行 QoS处理。
(4) 载荷长度:16bit,以字节为单位的 IPv6载荷长度,也就是IPv6报文基本头以后部分的长度(包括所有扩展头部分)。
(5) 下一个报头:8bit,用来标识当前头(基本头或扩展头)后下一个头的类型。此域内定义的类型与 IPv4中的协议域值相同。IPv6定义的扩展头由基本头或扩展头中的扩展头域链接成一条链。这一机制下处理扩展头更高效,转发路由器只处理必须处理的选项头,提高了转发效率。
(6) 跳数限制:8bit,与 IPv4中的 TTL字段类似。每个转发此报文的节点对此域值减 1,如果此域值减到 0则丢弃。
(7) 源地址:128bit,报文的源地址。
(8) 目的地址:128bit,报文的目的地址。
2. IPv6报文扩展头格式
IPv6报文扩展头格式如图 2-2所示。
图2-2 IPv6报文扩展头格式
IPv6选项字段是通过形成链式结构的扩展头支持的。IPv6基本头后面可以有 0
到多个扩展头。IPv6扩展头排列顺序如下。
(1) 逐跳选项头
逐跳选项头:值为0(在IPv6基本头中定义)。此选项头被转发路径所有节点处理。目前在路由告警(RSVP和 MLDv1)与 Jumbo帧处理中使用了逐跳选项头。路由告警需要通知到转发路径中的所有节点,需要使用逐跳选项头。Jumbo帧是长度超过 65 535字节的报文,传输这种报文需要转发路径中所有节点都能正常处理。
(2) 目的选项头
目的选项头:值为 60,只可能出现在以下两个位置。
① 路由头前
此选项头被目的节点和路由头中指定的节点处理。
② 上层头前(任何 ESP选项后)
此选项头只能被目的节点处理。移动IPv6中使用了目的选项头。移动 IPv6中新增加一种类型的目的选项头(家乡地址选项)。家乡地址选项由目的选项头携带, 用于移动节点离开家乡后通知接收节点此移动节点对应的家乡地址。接收节点收到 带有家乡地址选项的报文后,会把家乡地址选项中源地址(移动节点的家乡地址)和报文中源地址(移动节点的转交地址)交换,这样上层协议始终认为是在和移动 节点的家乡地址在通信,实现了移动漫游功能。
(3) 路由头
路由头:值为 43,用于源路由选项和移动IPv6。
(4) 分片头
分片头:值为 44,此选项头在源节点发送的报文超过路径 MTU(源和目的之间传输路径的 MTU)时对报文分片时使用。
(5) 验证头(AH头)
验证头:值为 51,用于 IPSec,提供报文验证、完整性检查。定义和 IPv4中相同。
(6) 封装安全载荷头(ESP头)
封装安全载荷头:值为50,用于 IPSec,提供报文验证、完整性检查和加密。定义和 IPv4中相同。
(7) 上层头
上层头用来标识数据报中上层协议类型,如 TCP/UDP/ICMP等。
目的选项头最多出现两次(一次在路由头前,另一次在上层协议头前),其他选项头最多出现一次。但 IPv6节点必须能够处理选项头(逐跳选项头除外,它固定只能紧随基本头之后)的任意出现位置和任意出现次数,以保证互通性。
3. ICMPv6报文格式
ICMPv6功能与 ICMPv4类似。如图 2-3所示,ICMPv6用于 IPv6节点报告报文处理过程中发生的错误以及完成其他层的功能,例如,诊断功能(ICMPv6“Ping”)。ICMPv6是 IPv6的一部分,每个 IPv6节点都必须实现。
图2-3 ICMPv6报文格式
ICMPv6报文主要分为两类:差错报文和信息报文。
(1) 差错报文
① 目的地不可达报文。
② 报文长度超大报文(用于路径 MTU发现协议)。
③ 传输超时报文(相当于 IPv4TTL等于 0时触发的 ICMP报文)。
④ 参数错误报文。
(2) 信息报文
① 回显请求报文。
② 回显应答报文。