IPv6报文由IPv6基本报文头、IPv6扩展报文头以及上层协议数据单元3部分组成。上层协议数据单元一般由上层协议报文头和它的有效载荷构成,上层协议数据单元可以是一个ICMPv6报文、一个TCP报文或一个UDP报文。

1、IPv6基本报文头

IPv6基本报文头有8个字段,固定大小为40 Byte,每一个IPv6数据报都必须包含基本报文头。基本报文头提供报文转发的基本信息,由转发路径上的所有设备解析。

IPv6报文头深度解析_Ipv6

IPv6基本报文头主要字段的说明:

IPv6报文头深度解析_Ipv6_02

IPv4和IPv6的报文头对比:

IPv6报文头深度解析_Ipv6_03

和IPv4相比, IPv6去除了分片、校验和、选项等相关字段,只增加了流标签字段,简化了 IPv6报文头的处理,提高了处理效率。另外,IPv6为了更好支持各种选项处理,提出了扩展报文头的概念,新增选项时不必修改现有结构就能做到,理论上可以无限扩展,在保持报文头简化的前提下,还具备了优异的灵活性。

2、IPv6扩展报文头

在IPv4中,IPv4报文头包含可选字段Options,内容涉及Security、Timestamp和Record Route等,这些Options可以将IPv4报文头长度从20 Byte扩充到60Byte。在转发过程中,处理携带这些Options的IPv4报文会占用设备很多的资源,因此实际中也很少使用。

与IPv4不同, IPv6扩展报文头长度不受40 Byte 的限制,这样便于日后新增选项,这一特征加上选项的处理方式,使得 IPv6选项能被真正地使用。但是为了提高处理选项头和传输层协议的性能,扩展报文头总是8Byte 长度的整数倍。

IPv6扩展报文头主要字段的说明:

IPv6报文头深度解析_Ipv6_04

3、IPv6扩展报文头的排列顺序

当超过一种扩展报文头被用在同一个IPv6报文里时,报文头推荐按照下列顺序出现:

  • IPv6基本报文头(IPv6 Header);
  • 逐跳选项扩展报文头(Hop-by-Hop Options Header);
  • 目的选项扩展报文头(Destination Options Header);
  • 路由扩展报文头(Routing Header);
  • 分片扩展报文头(Fragment Header);
  • 认证扩展报文头(Authentication Header);
  • 封装安全有效载荷扩展报文头(Encapsulating Security Payload Header);
  • 目的选项扩展报文头(Destination Options Header,指那些将由IPv6报文的最终目的地处理的选项);
  • 上层协议报文(Upper-Layer Header)

路由设备根据基本报文头中Next Header值来决定是否要处理扩展报文头,并不是所有的扩展报文头都需要被查看和处理。除了目的选项扩展报文头可能出现两次(一次在路由扩展报文头之前,另一次在上层协议报文之前),其余扩展报文头只能出现一次。

  1. 逐跳选项扩展报文头

逐跳选项扩展报文头用来携带需要由转发路径上的每一跳路由器处理的信息。它的Next Header协议号为0。一个逐跳选项扩展报文头的Value区域是由一系列的Options区块构成的,这让它可以承载多份不同种类的信息。

  1. 目的选项扩展报文头

目的选项扩展报文头用于携带需要由当前目的地址对应的节点处理的信息。该节点可以是报文的最终目的地,也可以是源路由方案中的Endpoint节点。目的选项扩展报文头的Next Header协议号为60,报文头的格式及要求与逐跳选项扩展报文头一致。

  1. 路由扩展报文头

路由扩展报文头用来指明一个报文在网络内需要依次经过的路径点,用于源路由方案。报文发送者或网络节点将路由扩展报文头放入报文中,后续的网络节点读取路由扩展报文头中的节点信息,将报文依次转发到指定的下一跳节点(Endpoint节点),并最终转发到目的地。路由扩展报文头可以使报文按照指定的转发路线行进,而不使用默认的最短路径。

  1. 分片扩展报文头

当一个应用层报文的长度超过了路径MTU时,就需要在网络层对该报文进行分片传输和接收重组。分片扩展报文头携带了各个分片的识别信息,其功能与IPv4报文头中与分片相关的字段相同。IPv6只允许报文发送者对报文进行分片,不允许路由器在中途将报文分片。

  1. 认证扩展报文头

认证扩展报文头通常用于IPsec,能提供3种安全功能:无连接的完整性验证、IP报文来源认证和重放防护。在RFC 4302中定义了报文头处理过程 。认证扩展报文头的Next Header协议号为51。

  1. 封装安全载荷扩展报文头

封装安全载荷扩展报文头通常用于IPsec,能提供无连接的完整性验证、数据来源认证、重放防护以及数据加密等安全功能 。封装安全载荷扩展报文头的Next Header协议号为50。此外,当IPv6报文头或扩展报文头之后没有任何数据了,Next Header字段值需要设为59。如果IPv6报文头的Payload Length表明在Next Header为59的扩展报文头之后还有数据,那么这些数据在转发过程中应该被透传,不能被改变。