一、由IPv4到IPv6
互联网协议(IP,Internet Protocol)由第4版本(IPv4)升级为第6版本(IPv6)最直接的动因是IP地址的匾乏。Internet应用范围的迅速扩大和用户数量指数级的增加,是当初制订IP地址字段长度的人所始料未及。此外,原来的地址结构也不尽合理,利用率不高,也缺少更大地灵活性。因此,IPv6将IPv4的32比特地址字段直接扩展为128比特。这样为适应其地址字段的变化,并针对原IPv4的报文格式的不足,IPv6的报文(Datagram)格式也发生了变化,但此时称之为IPv6的分组(Packet)格式了。IPv6的分组格式对IPv4的报文格式进行了优化简化。IPv6与IPv4相比其主要变化特征可归结为下表1中的6方面。
表 1:IPv6分组与IPv4报文相比其主要变化特征
欲具体了解互联网协议(IP)介绍的请进入。
二、IPv6的分组格式
下图2-1为IPv6分组(Packet)格式(注意:现实中为了延续原有的称呼,有时也习惯性地将IPv6分组称呼为IPv6报文)。由图可知,IPv6分组(Packet)格式的IP的基本数据单元,仍然保持了IPv4报文格式的4字节为一单元,每单元从左至右为第0字节到底4字节,每字节从左至右为第0比特到第7比特的二进制表示方式。最左侧的位是高阶或最高有效位。
图 2-1:IPv6分组(Packet)格式
IPv6分组格式是由IPv6基本分组头、IPv6扩展分组头以及上层协议数据(载荷)三部分组成,如下图2-2所示。相比于IPv4报文,IPv6取消了IPv4报文头中的选项字段,并引入了多种扩展分组头,在提高处理效率的同时增强了IPv6的灵活性,为IP协议提供了良好的扩展能力。
图 2-2:IPv6分组(Packet)格式的构成
欲详细了解互联网IPv4报文格式的请进入。
需要提示的是,下述只是仅对IPv6的分组格式(包括基本分组头、扩展分组头和分组数据(载荷))各字段做一简要的介绍。由于在RFC 2460《IPv6规范》中,对各字段的含义及要求做了比较详细的描述,内容是较多的。因此,需要时可在该文档查询。
欲详细了解RFC 2460文档具体内容的请进入。
三、IPv6基本分组头的字段:
IPv6的基本分组头(IPv6 Base Headers)是由8个固定长度的字段构成,相比IPv4,字段数由12个减少到8个,但字节数由20字节,增加为40字节。
1、版本(Version)字段:
该字段的含义和长度与IPv4相同,其字段长度仍是4比特。对IPv6版本其字段取值为“6”,是由RFC 1700规定的。
2、用户数据等级(Traffic Class)字段:
该字段长度为8比特,是IPv4中“TOS(Type of Service)”字段的替代物(也为8比特。其目的在于为发起节点和中转节点(Router)指明此IPv6分组传输服务级别或优先级别。有关级别的划分和代码将在专门的标准中制定。
3、数据的流标签(Flow Label )字段:
此字段长度为20比特,意在为发起节点制定对分组流的处理方式的机制,如非缺省服务质量等级、“实时”数据流等。所谓数据流是在相同的“一对一”或“一对多”(广播或组播)地址间连续分组流。发送方要使用此功能时,在此字段内填入00001[Hex]~ FFFFF[Hex]之间的一个伪随机数,作为该数据流的标志符[2、7](注:有些像连接标志符,无连接IP协议在处理连续流时,借用了面向连接协议中的连接标志符的概念),当发送方不使用此功能时,该字段全填为“0”,中间节点将忽略这一字段。
在RFC 2460的附录A中描述了当前Flow Label字段的预期语义和用法。在RFC 6437《IPv6 Flow Label Specification》中详细描述了IPv6 Flow Label字段、IPv6节点标签流的最低要求、IPv6节点转发标签报文、建立流状态的方法。
4、用户数据长度(Payload Length)字段:
此字段的长度为16比特(无符号整数)。IPv6有效载荷的长度,即,在这个IPv6报头之后的数据包的其余部分,以八位字节为单位。(注意,任何扩展头都被认为是有效负载的一部分,也就是说,包含在长度计数中。)它取代了IPv4中的“报文头长度(IHL)”字段(4比特)。由于IPv4报头可选部分长度可变,因此用报头长度字段来定界。IPv6将可选部分放入用户数据(Payload)部分,由分组头中8比特的“下一头(Next Header)”字段来指明在Payload中紧跟IPv6分组头固定部分之后的扩展分组头的类别。有关编码与IPv4中“协议(Protocol)”字段编码相同(由RFC 1700规定)。
5、下一分组头(Next Header)标志符字段:
此字段的长度为8比特。指明紧跟在IPv6分组头后面的IPv6扩展分组头或IP层之上的协议类型(如TCP、UDP或ICMPv6等),编码规则与IPv4的Protocol字段相同,由RFC 1700界定。其IPv6下一分组头字段的常见值及含义详见下表3-5。IPv6下一分组头字段的全部值(0~255)是由互联网号码分配机构(IANA)分配管理的。
表 3-5:IPv6下一分组头字段的常见值及含义
欲详细了解IPv6下一分组头字段的全部值(0~255)的请进入。
6、跨越节点数限制(Hop Limit)字段:
该字段的长度为8比特(无符号整数)。它是IPv4中“存活期(Time To Live)”字段(也为8比特)的替代物。IPv6用跨越节点数替代IPv4中的在网中存活时间(秒)更具有可操作性。每经过一个中转节点,Hop Limit之值被减1;减到0时,该分组被丢弃。
7、源地址/目的地址(Source/Destination Address)字段:
IPv6的地址字段(包括源地址和目的地址)由IPv4的4字节(32比特)增加为16字节(128比特),以解决lPv4的4字节地址的不足。RFC 2373对IPv6的地址有关结构做了详细的规定。
欲详细了解IPv6地址技术介绍的请进入。
四、IPv6扩展分组头:
1、概述
IPv6扩展分组头(IPv6 Extension Headers)其字段数及长度时任意,理论上可以任意扩展字段,具备优异的灵活性和巨大的创新空间。扩展分组头中Next header字段与基本分组头的Next header作用相同,指明下一个扩展分组头或上层协议类型。非4字节整倍数时增加填充位(Padding)。
IPv6提供的扩展分组头是为网络层的可选功能,从某种意义上讲也可以看做是IP子层之上的控制/增强子层的功能。这些字段将置于IPv6固定分组头之后,但在传送层协议数据单元之前。在IPv6中,可选的互联网层信息被编码在单独的分组头中,这些分组头可能被放置在数据包的IPv6分组头和上层报头之间。有少量这样的扩展分组头,每个都由一个不同的下一个报头值标识。如这些例子所示,一个IPv6数据包可以携带0个、1个或多个扩展分组头,每个扩展分组头由前一个分组头的下一个分组头字段标识。
2、种类
目前的RFC 2460文本中定义了4种扩展分组头,它们分别是:逐段选项扩展头(Hop-by-Hop Options)、路径选择扩展头(Routing)、分片扩展头(Fragment)和目的地选项扩展头(Destination Options);另外,RFC 2402定义了身份认证扩展头(Authentication),RFC 2406定义了用户安全数据封装扩展头(Encapsulating Security Payload)。根据RFC 8200的定义,目前IPv6的扩展分组头以及排列顺序为:逐跳选项扩展头、目的选项扩展头、路由扩展头、分片扩展头、认证扩展头、安全数据封装扩展头、目的选项扩展头和上层协议扩展头。下表4-2给出了上述某些扩展分组头的简介。
表 4-2:IPv6扩展分组头简介
五、IPv6的数据
IPv6的数据即用户间要传输的信息数据,即上层协议数据(载荷),此字段紧跟IP扩展分组头之后。IP分组头固定部分为40字节,加上可选字段(扩展分组头)和用户数据信息部分最大长度为65636字节。
六、IPv4与IPv6分组头的简单比较
对比IPv4与IPv6的组成格式,我们可以对二者的分组头固定部分的字段作如下对比,见下表6。
表 6:IPv4与IPv6报文头/分组头固定部分的字段对比
欲进一步了解IPv4与IPv6在性能方面比较的请进入。