1、ICS 33.040.40 M 33 YD 中华人民共和国通信行业标准YDIT 1341-2005 IPv6基本协议IPv6协议Internet Protocol version6 (IPv6) specification 2005-05-11发布2005-11-01实施中华人民共和国信息产业部发布YD/T 1341-2005 目次前言. . 11 l 范围.2 规范性引用文件3 定义及缩略语.3.1 定义3.2 缩略语.24 概述.2 5 IP而头格式.3 6 IPv6扩展头.4 6.1 扩展头的顺序.5 6.2选项.5 6.3 逐跳选项头.66.4 路由头.7 6.5 分段头.9 6.6
2、目的地选项头6.7 元下一个头.12 7 IPv6数据包的长度.12 8 流标签.13 9 业务等级.1310 上层协议.1310.1 上层校验和.13 10.2 数据包最大生存时间.14 10.3 最大上层载荷长度.14 10.4 响应承载路由头的数据包.14 附录A(规范性附录)流标签的语义及使用.15 附录B(资料性附录)选项格式准则.16YDIT 1341-2005 E 刚昌本标准修改采用IETF的RFC2460 (1998),主要差异如下:1.按照GB1(2创泊)系列的要求对标准格式进行了修改;2.将一些适用于国际标准的表述改为我国标准的表述;3.增加了3.2节;4.将标准附录B改为
3、资料性附录。本标准是IPv6协议系列标准之一,该系列标准预计的结构及名称如下:1. lPv6基本协议一一IPv6协议2. IPv6技术要求一一支持计算机移动部分3. (IPv6技术要求一一地址、过搜及服务质量4. lPv6地址结构协议一一IPv6无状态地址自动配置5. (IPv6邻居发现协议一一基于IP币的邻居发现协议6. (IPv6协议一致性测试方法本标准的附录A为规范性附录,附录B为资料性附录。本标准由中国通信标准化协会提出并归口。本标准起草单位:信息产业部电信研究院本标准主要起草人:赵锋赵惜张德华杜和青YD/T 1341-2005 IPv6基本协议一-IPv6协议1 范围本标准规定了IP
4、v6协议,包括IPv6头格式、扩展头格式、数据包的长度、流标签、业务等级、对上层协议的影响等内容。有关IPv6的安全性特征不在本标准的讨论范围之内。本标准适用IPv6设备开发、系统组建。2 规范性引用文件下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准o.RFC 791 (1981) 互联网协议规范版本4(1岛的RFC 1661 (1 994) 点到点协议(thePont-to-Point P
5、rotocol , PPP) RFC 1981 (1996) IP吨的路径最大传输单元发现(Pa由MTUDscovery for IP Version 6 ) RFC 2373 (1998) IPv6地址结构(IPVersion 6 Addressing Architecture) RFC 2401 (I 998) IP协议的安全体系结构(SecurityArchitecture for由eInternet Protocol) RFC 2402 (1998) IP认证头(IPAuthentication Header) RFC 2406 (1998) IP封装安全有效载荷(IPEncapsul
6、ating Security Payload , ESP) RFC 2463 (1998) IPv6的互联网控制消息协议(ICMPfor the IPv6) 3 定义及缩畸语3.1 定义下列定义和缩略语适用于本标准。3.1.1 节点node 实现IPv6的设备。3.1.2 路囱器router 负责转发(目标地址不是它本身)IPv6数据包的节点。3.1.3 主机host 除路由器外的任何节点。3.1 .4 上层upper layer 紧接在IPv6之上的协议层。例如,传输层协议(如TCP或UDP),控制协议(如ICMP),路由协议(如OSPF)以及通过隧道方式封装在IP咱中的互联网层或低层协议(
7、如IPX、AppleTalk、IPv4甚至IPv6)。3.1.5 链路link 是通信设备或媒体。节点可以通过链路在数据链路层(紧接在IPv6的下层)进行通信。例如,1 YD/T 1341-2005 Ethernet、PPP链路、帧中继、ATM网络以及互联网(或更高)层的隧道(如在IPv4或IPv6上的隧道)0 3.1.6 邻居neighbors 连接在同一链路上的不同节点,这些节点之间的数据包传输不通过路由器转发。3.1.7 接口inte巾ce节点到链路的连接点。3.1.8 地址address 一个或一组接口的IP层标识。3.1.9 撤据包packet IPv6头和有效载荷构成的数据块。3.
8、1.10 链路最大传输单元link MTU 能通过链路完整传输的数据包的最大长度,以字节为单位。3.1.11 路径最大传输单元path MTU 摞节点和目的节点之间的一条路径上所有链路最大传输单元的长度中的最小值。注:有一些可能的情况,对于一个具有多个接口的设备作如下设置:转发来自于某些接口且不是以它自身为目的地的数据包;丢弃来自于另一些接口且不是以它自身为目的地的数据包。这时,该设备在接收来自转发接口的数据包,或在转发接口与邻居节点交互时,要遵守路由器的协议要求;而在接收来自非转发接口的数据包,或在非转发接口与邻居节点交互时,要遵守主机的协议要求。3.2 缩赂语下列缩略语适用于本标准。IET
9、F ICMP IP IPv6 MTU MSS TCP TLV UDP 4 概述Internet Engineering Task Force Internet Control Message Protocol Internet Protocol Internet Protocol Verson 6 Maxmum Transmission Unit Maximum Segment Size Transmission Control Protocol Type-Length-Value User Datagram Protocol 互联网工程任务组互联网控制消息协议互联网协议互联网协议版本6最大传
10、输单元最大分段长度传输控制协议类型一长度一值用户数据报协议互联网协议第六版(IPv6)是互联网协议的一个新的版本。IPv6相对于IPv4主要改变如下: 扩展的寻址能力IPv6把IP地址空间从32比特增加到了128比特,从而能够支持更多层次的寻址结构,更多的可寻址节点的数量,以及更为简化的地址的自动配置。IPv6通过在组播地址中加入了一个范围域而提高了组播选路的扩展性。在IPv6中还定义了一种称为泛播地址的新的地址类型,它被用来向一组节点中的任一个节点发送数据包(注)。 简化的头格式IPv6省略了一些IPv4头中的域或将其改成了可选项,从而减少了数据包的公共处理开销,并减少了2 YD厅1341-
11、2005IPv6头所占的带宽开销。 对扩展和选项的增强支持IPv6在IP头选项的编码方式上作了一些变化,其目的是更有效地进行转发,并放宽了对选项长度的严格限制,为将来加入新选项提供更大的灵活性。 流标签能力为了满足发送者所要求的特殊处理,IPv6增加了一个新的域来标记属于特殊传输数据流的数据包,例如,非缺省的服务质量或实时业务等。 认证和保密能力IPv6规定了包括认证、数据完整性和数据加密(可选)在内的扩展功能。本标准规定了基本的IPv6头和最初定义的IPv6扩展头及选项。本标准还讨论了数据包的长度问题,流标签和业务等级的语义,以及IPv6对上层协议的影响。IPv6地址的格式和语义在RFC23
12、73中分别进行了规定。在RFC2463中规定了IPv6版的ICMP,它是所有IPv6实现所必须包括的。注:泛播地址(AnycastAddress)是分配给一组接口的地址,该组接口可以属于不同的节点,以泛播地址为目的地址的数据包会被转发到根据路由协议测量的距离最近的一个接口上。5 IPv6头格式IPv6的头格式如下所示。4 12 版本业务等级载荷长度源地址目的地址各域含义如下:a)版本(Version):该域长度为4比特,IPv6版本号为60b)业务等级(TrafficClass):该域长度为8比特,参见第9章。c)流标签(FlowLabel):该域长度为20比特,参见第8章。31 流标签下一个
13、头跳数限制d)载荷长度(PayloadLength):该域为16比特的无符号整数,表示IPv6载荷长度,即数据包中IPv6头之后其余部分的长度,以字节为单位(注1:任何的扩展头都被认为是载荷的一部分,其长度应被计算在内)。e)下一个头(NextHeader):该域长度为8比特,表示紧接在IPv6头后面的下一个头的类型。这个域取不阔的值,对应的扩展头类型不同,值与扩展头类型之间的对应关系见IANA协议值与指定服务网页(注2)。f)跳数限制(HopLimit):该域为8比特无符号整数,数据包每向前经过一个转发节点,跳数限制减1,当跳数限制减至0时,该数据包被丢弃。g)源地址(SourceAddre
14、ss):该域长度为128比特,表示产生数据包的节点的IPv6地址。h)目的地址(DestinationAddress):该域长度为128比特,表示期望数据包到达的IPv6地址,如果出现路由头,这个地址可能不是最终的接收数据包的IPv6地址。注2:IANA (lntemet Assigned Numhers Au由ority,互联网地址分配机构)管理互联网运行所必须的许多特殊参数和协议值,包括特殊端口号的指派和字符集的注册,下面我们称这些特殊参数和协议值为特殊号码。以前,IANA通过系列RFC文档发布这些特殊号码,最后的文档RFC17也已经过时;现在IANA将这些特殊号码的最新集合列在名为IAN
15、A协议值与指定服务(ProtocolNumbers and Assignment Services)的网页上供查阅,网址是http:/www.iana.o唱/nw由ers.html,并在3 YDIT 1341-2005 批准新的特殊号码和指定服务时随时更新这个网页的内容。6 IPv6扩展头在IPv6中,可选择的互联网层信息被编码在单独的头中,并放在一个数据包内的IPv6头和上一层头之间。这种扩展头的数量不多,每个扩展头都被一个明确的下一个头域的值所确定,如下所示,每个IPv6数据包可带有0个、1个或多个扩展头,每个扩展头由前一个头的下一个头域所确定。据数+ 头paA FU T且-P且-FU-中
16、且一-=-头一丁头个一-而一一-P下一由路头川可乐u-胁下IPv6头下一个头=路由路由头下一个头=分段分段头下一个头=TCPTCP头+数据除了逐跳选项头之外的其他扩展头不被数据包发送路径上的任何一个节点检查或处理,除非是数据包到达了IPv6头中目的地址域所指明的节点(或在组播路由的情况下,节点组中的任一个节点)。在对IPv6头中下一个头域正常解复用时首先要处理第一个扩展头(当没有扩展头时直接处理上层头)。每一个扩展头的内容和语义决定了是否要继续处理下一个头。因此,必须严格按照扩展头在数据包中出现的顺序对它们进行处理。接收者不能在数据包中搜索一个特定的扩展头,并且不能在处理完所有排在它前面的头之
17、前处理它。逐跳选项头中携带的信息必须被数据包传送路径上包括源节点和目的节点在内的每一个节点检查和处理。逐跳选项头如果存在,则它必须紧随在IPv6头之后。当IPv6头中下一个头域的值为0时,说明后面有逐跳选项头存在。如果节点处理一个头的结果是要进行下一个头的处理,但这个头的下一个头域的值不能被节点所识别,则节点将丢弃这个数据包并向数据包的源节点发送一个ICMP参数错误消息,ICMP代码值为1(不能识别下一个头的类型),ICMP指针域包含源数据包中不能被识别的域的偏移量。若一个节点遇到除IPv6头外的任一个头的下一个头域为0,则节点对这个数据包也应按上面的方法进行处理。每个扩展头的长度应为8的整数
18、倍(以字节为单位),以保证下面的头也按8个字节对齐。每个扩展头内的多字节域按它们的自然分界来对齐。IPv6的完整实现包括下面扩展头的实现: 逐跳选项; 路由(类型的; 分段; 目的地选项: 认证(注1,注3); 封装安全载荷(注2,注3)。前4个头在本标准中规定,后两个分别在RFC2402和RFC2406中规定,不属于本标准的讨论范围。注1:认证头用于为IP数据报提供元连接完整性和数据初始认证,此外还能防止重发攻击的发生。注2:封装安全载荷头用于提供机密性、数据初始认证、元连接完整性、防止重发攻击以及受限的数据流机密性。注3:认证头和封装安全载荷头可以结合使用,也可以通过使用隧道模式嵌套使用。
19、它们可以在主机之间、安全网管之间或安全网管与主机之间提供安全服务。封装安全载街头还可以提供机密性(加密)服务。它们之间的主要区别在于覆4 YDIT 1341-2005 盖的范围不同。此外,如果IP头不通过封装安全载荷头来封装(以隧道模式).那么封装安全载荷头将不会保护任何的IP头中的域。6.1 扩展头的顺序当一个数据包中使用多个扩展头时,这些头应按照下面的顺序出现: IPv6头; 逐跳选项头; 目的地选项头(注1); 路由头; 分段头: 认证头(注2); 封装安全载荷头(注2); 目的地选项头(注3); 上层头。注1:这些选项要在IPv6目的地址城所列出的第一个目的地进行处理,也要在路由头所列
20、出的后续目的地进行处理。注2:在RFC1827中给出了有关认证头和封装安全载荷头之间的相对顺序的附加建议。注3:这些选项只在数据包的最终目的地进行处理。同一类型的扩展头最多只能出现一次(如果有多个同种扩展头,它们应顺次、连续地排列在一起), 惟一例外是目的地选项头可以出现两次,一次在路由头前出现,另一次在上层头前出现。如果上层头是另一个IPv6头(即IPv6通过隧道方式封装在IPv6中),那么接在它后面的是它自己的扩展头,这些扩展头也应按照上面规定的顺序来排列。如果要定义其他的扩展头,则必须要说明它们同以上所列的头的顺序约束关系。IPv6的节点必须接受并处理同一个数据包中以任何顺序、任何次数出
21、现的扩展头,只有逐跳选项头才必须严格地接在IPv6头之后。然而,我们强烈建议数据包的发送者严格遵守上面建议的顺序,除非以后的规范推翻这一顺序。6.2 选顶在前面介绍的扩展头中,逐跳选项头和目的地选项头可携带不定数量的选项。这些选项采用TI.V编码方式,格式如下:选项类型选项数据长度选项数据选项类型(OptionType):无符号的8位整数,说明选项的类型。选项数据长度(OptionData Length):元符号的8位整数,以宇节为单位,表示选项数据的长度。选项数据(OptionData):可变长度域,包含选项类型的数据。接收者在处理一个头时,必须严格按照每个选项在头中出现的顺序来处理。例如,
22、不能在头中搜索出一个选项并在处理排在它前面的选项之前处理它。在内部编码时,选项类型域的最高位两比特指明了当IPv6节点不能识别该选项类型时,所必须采取的动作:一跳过这个选项并继续处理该头;01一丢弃这个数据包;10一丢弃这个数据包,并且无论这个数据包的目的地址是否是组播地址,都向该数据包的源地址发送一个ICMP数据包,指出不能识别的选项类型;11一丢弃这个数据包,并且只有当目的地址不是组播地址时,向该数据包的源地址发送一个ICMP参数错误消息,代码值为2,指针域指向不能识别的选项类型。选项类型域的第三位指明这个选项的数据是否能改变数据包到达最终目的地的路由。当一个数据包中有认证头时,对于选项数
23、据可能改变选路的任何选项,在计算或验证数据包的认证值时,这个选项5 YDIT 1341-2005 的整个数据域必须当作0值来处理。住一选项数据不改变选路;1一选项数据可能改变选路。上述的3个高位比特应被视为选项类型的一部分,而不应独立于选项类型。也就是说,应由一个完整的8比特选项类型来标识一个特别的选项,而不能仅由选项类型的低位5个比特来标识。逐跳选项头和目的地选项头都使用相同的选项类型编号空间。然而,一个特别的选项可能会被限制只能用于这两个头中的一个。个别的选项有特殊的对齐要求,以确保选项数据域中的多字节值符合自然分界。一个选项的对齐要求是用xn+y表示的。也就是说,选项类型必须是在从该扩展
24、头开始算的z字节的整数倍加上y个字节的位置出现。例如:2n 指从该扩展头开始的任何2字节偏移。8n+2 指从该扩展头开始的任何8字节偏移,加上2字节。有两类填充选项,当需要时用于后续选项的排列,以填充该头使其长度为8字节的整数倍。所有IPv6节点必须能识别这些填充选项:Padl选项结构(对齐要求:无)。7 。注:Padl选项是一个特例,它没有长度域和值域,只是一个8比特的O值码。Padl选项用于在扩展头的选项域中填充一个字节的长度。当填充量多于一个字节时,要用PadN选项,而不是多个Padl选项。PadN选项结构(对齐要求:无)。7 15 选项数据长度选项数据PadN选项用于在扩展头的选项域中
25、填充2个或多个字节。如填充n个字节,则选项数据长度域的值为n-2,选项数据域是n-2个0值字节。附录B包括了设计新选项的格式准则。6.3 逐跳选项头逐跳选项头用来携带那些在数据包发送路径上必须由每个节点检查的信息。如果IPv6头的下一个头域的值为0,则说明紧接着IPv6头的下一个头是逐跳选项头。逐跳选项头的格式为:。31 下一个头扩展头长度选项下一个头(NextHeader):该域长度为8比特,定义紧接在逐跳选项头之后的头的类型。这个域取不同的值,对应的扩展头类型不同,值与扩展头类型之间的对应关系见IANA协议值与指定服务网页。扩展头长度(HdrExt Len):该域是一个8比特元符号整数,以
26、8个字节为单位表示逐跳选项头的长度,它不包括起始的8个字节。选项域(Options):该域长度可变,其长度应保证整个逐跳选项头的长度为8个字节的整数倍长,包含有一个或多个1LV编码的选项。6 YD厅1341-2005在本标准中只为逐跳选项头规定了5.2节中定义的Padl和PadN选项。6.4 路由头IPv6源数据包使用路由头来列出数据包从源地址到目的地址之间需要访问的一个或多个中间节点。该功能非常类似于IPv4的松散源选项和记录路由选项。如果某一个头的下一个头域值为43,则说明紧接着它的下一个头是路由头。路由头的格式如下:。31 下一个头扩展头长度路由类型剩余段与类型相关的数据下一个头(Nex
27、tHeader):该域长度为8比特,定义紧接在路由头之后的头的类型。这个域取不同的值,对应的扩展头类型不间,值与扩展头类型之间的对应关系见IANA协议值与指定服务网页。扩展头长度(HdrExt Len):该域为8比特无符号整数,以8个字节为单位表示路由头的长度,不包括起始的8个字节。路由类型(RoutingType):该域长度为8比特.标识不同类型的路由头。剩余段(SegmentsLeft):该域为8比特元符号整数,表示剩余的路由段的数量,即在到达最终目的节点之前已经列出的但尚未访问的中间节点的数目。与类型相关的数据(Type-SpecificData):该域长度可变,格式由路由类型决定,长度
28、应保证整个路由头的长度是8个字节的整数倍。节点在处理接收到的数据包时,如果遇到一个路由头包含有不能识别的路由类型值,则节点要依据剩余段域的值采取措施。具体方法如下所述:a)如果剩余段的值为0,则节点忽略这个路由头,继续处理数据包中的下一个头(其类型由路由头的下一个头域的值标识)。b)如果剩余段的值不为0,则节点必须丢弃这个数据包,并且向数据包的源地址发送一个ICMP参数错误消息(代码值为0),ICMP指针指向不能识别的路由类型。如果一个中间节点在处理完接收数据包的路由头后,决定应将该数据包转发到一条链路MTU小于该包长度的链路上,那么该节点必须丢弃此数据包并向该包的源地址发送一个ICMP数据包
29、过大消息。下面是0型路由头的格式:。31 下一个头扩展头长度路由类型:()剩余段保留域地址1地址2地址n7 YDIT 1341-2005 下一个头(NextHeader):该域长度为8比特,定义紧接在路由头之后的头的类型。这个域取不同的值,对应的扩展头类型不同,值与扩展头类型之间的对应关系见IANA协议值与指定服务网页。扩展头长度(HdrExt Len):该域为8比特无符号整数,以8个字节为单位表示路由头的长度,不包括起始的8个字节。对于0型路由头,扩展头长度是头内地址数的两倍。路由类型(RoutingType):该域长度为8比特,值为0。剩余段(Segments Left):该域为8比特元符
30、号整数,它表示剩余的路由段的数量,即在到达最终目的节点之前已经列出的但尚未访问的中间节点的数目。保留域(Reserved):该域为32比特保留域,传输时初始值设为0,接收方可忽略此域。地址l.n(Address):编号从1哨的每一个地址域均为128位地址矢量。0型路由头内不能有组播地址,如果一个IPv6数据包带有0型路由头,则其最终目的地址域不能是组播地址。一个路由头只有当它到达IPv6的目的地址域所指明的节点时,才能被检查或处理。对于0型路由头,节点应按如下算法进行处理:if剩余段=0 继续处理数据包的下一个头,其类型由路由头的下一个头域的值所标识。else if扩展头长度为奇数向源地址发送
31、一个ICMP参数错误消息(代码为0),ICMP消息指针指向扩展头长度域,并丢弃该数据包。8 else 计算路由头内的地址数n,n=扩展头长度/2。if剩余段n( else 向源地址发送一个ICMP参数错误消息(代码为0),ICMP消息指针指向剩余段域,并丢弃该数据包。剩余段减1,计算地址段中下一个将要被访问的地址标号Ll=n-剩余段,if地址i或IPv6最终地址是组播地址丢弃该数据包。else 交换IPv6目的地址和地址i, if IPv6 跳数限制=1 向源地址发送一个ICMP超时-传输中超过跳数限制消息,并丢弃数据包。else 跳数限制减1,重新把数据包交给IPv6模块,以传输到新的目的地
32、。YD/T 1341-2005 例如,假定从源节点S向目的节点D发送一个数据包,使用一个路由头,以使该数据包的路由经过中间节点11、2和13。在每一段传输路径上IPv6头和路由头中相关域的值如下:当数据包从S传送到UIl时:掘地址=5扩展头长度=6目的地址=11地址1=12 地址2=13 地址3=D 当数据包从11传送到12时:剩余段=3源地址=5扩展头长度=6目的地址=12剩余段=2地址1=11 地址2=13 地址3=D 当数据包从12传送到13时:源地址=5扩展头长度=6目的地址=13剩余段=1地址1=11 地址2=12 地址3=D 当数据包从13传送到D时:源地址=5扩展头长度=6目的地
33、址=D剩余段=0地址1=11 地址2=12 地址3=13 6.5 分段头IPv6源节点使用分段头来发送数据包长度比路径MTU大的数据包(注:与IPv4不同,Pv6的分段由源节点完成,而不是由数据包发送路径上的路由器完成。参见第7章)。如果一个头的下一个头域的值为44,则说明紧接在它后面的一个头是分段头。分段头的格式如下:。31 下一个头保留域分段偏移保留f7l 标识下一个头(NextHeader):该域长度为8比特,定义紧接在分段头之后的头的类型。这个域取不同的值,对应的扩展头类型不同,值与扩展头类型之间的对应关系见IANA协议值与指定服务网页保留域(Reserved ) :该域长度为8比特,
34、传输时初始值设为0,接收方忽略此域。分段偏移(FragmentOffset):该域长度为13比特,以8个字节为单位,表示该头后面的数据相对于原始数据包可分段部分的起始位置的数据的偏移量。保留(Reserved) :该域长度为2比特,传输时初始值设为0,接收方忽略此域。标志位M(M Flag):该域长度为1比特,M=1表示还有更多的分段,M=O表示这是最后一段。9 YDIT 1341-25 标识(Identification):该域长度为32比特,详述如下:为了从源节点传送个大于路径MTU的数据包到目的节点,源节点可将该数据分段,并将每个分段作为一个独立的数据包传送,由接收者重新进行组装。源节点
35、为每个要分段的数据包生成一个标识值。该标识值必须不同于从相同源地址到相同目的地址的最近(注)发出的任何其他数据包的标识值。如果有路由头存在,则上述目的地址指的是最终目的地址。注.最近是指在一个包的最大可能生存时间内,包括从源到目的地的传输时间和等待同一个数据包的其他分段重新组装的时间。然而,源节点并不需要知道数据包的最大生存时间。可以假定满足这种要求的方法是把该标识值作为一个32位的循环计数器使用,一旦有数据包被分段,该计数器就增加1,并填入标识域。用这种方法来保证标识的惟一性。对于每个IPv6实现,它可以自己决定是配置单独的节点计数器,还是配置多个计数器,即给每个可能的源地址配置一个计数器,
36、或是给每一对源地址和目的地址配置一个计数器。原始数据包是指最初的、没有分段的数据包,它由下面两部分组成:原始数据包:不可分段部分包括IPv6头以及到达目的地路径上由节点处理的所有扩展头,例如,所有头包括路由头,或者逐跳选项头(如果有的话,不然就是没有扩展头。可分段部分包括该数据包余下的部分,其中包括只能由目的节点处理的扩展头、上层头和数据。原始数据包的可分段部分被分成段,除了最后一段外,每一段的长度都应是8字节的整数倍。每一个分段数据包按如下方式传输:原始数据包分段数据包|不可分段部分17tEl!: 每个分段数据包的组成如下:a源数据包的不可分段部分,其中源IPv6头内的载荷长度改为该分段数据
37、包的长度(不包括IPv6头本身的长度),并且将不可分段部分的最后一个头的下一个头域值改变为44。b)分段头部分。包括:1)下一个头(NextHeader):标识原始数据包可分段部分的第一个头;2)段偏移(SegmentsLeft):以8个字节为单位表示分段相对于原始数据包可分段部分开始位置的偏移量,第一个分段的段偏移域的值为0;10 3)标志位M(M F1略):M:O表示该分段是最后一段,M=l表示该分段不是最后一段;4)标识(Identification):用来标识原始数据包。c)分段本身分段数据包的长度必须不能超过到数据包目的地路径的路径MTU。YD厅1341-2005在目的节点要对分段数
38、据包重新进行组装以恢复成原始未分段时的形式。重组的原始数据包:|不可分段部分|可分段部分以下是重组时应遵循的原则:一个原始数据包只能由具有相同源地址、目的地址和分段标识的分段数据包来重组。重组数据包的不可分段部分包括所有头直到但不包括第一个分段数据包的分段头,它主要做如下两个改动:a)不可分段部分最后一个头的下一个头域的值取自第一个分段的分段头的下一个头域:b)重组数据包的载荷长度从不可分段部分的长度、最后一个分段的长度和偏移量计算得来。计算重组的源数据包长度的公式为:其中PL.orig=PL.first-FL.first-8+ (8*FO.last) +FL.last PL.orig=重组数
39、据包的载荷长度值;PL.first=第一个分段数据包的载荷长度值;FL.first=第一个分段数据包中分段头后面的分段的长度;FO.last=最后一个分段数据包中分段头的段偏移的值;且I踊t=最后一个分段数据包中分段头后面的分段的长度。重组数据包的可分段部分是由每个分段数据包的分段头后面的分段组成。每个分段的长度等于数据包载荷长度减去IPv6头与分段本身之间的头的长度,每个分段在数据包可分段部分中的相对位置由段偏移的值计算而来。分段头不出现在最终的重组数据包中。下面的错误情况可能会在重组分段数据包时发生:如果在接收到第一个到达的分段之后的60s内一个数据包所有要重组的分段没有全部到达,需放弃重
40、组该数据包,并且所有已接受的分段都要丢弃。在这种情况下,如果第一个分段数据包己接收到,则要向那个分段数据包的源地址发送一个ICMP超时-段重组超时消息。如果从分段数据包载荷长度域中得到的分段长度不是8个字节的整数倍,并且这个段的M标志位是1,则这个段就必须丢弃,并且要向段的源地址发送一个ICMP参数错误消息(代码为0),ICMP 指针指向分段数据包的载荷长度域。如果一个分段的长度和偏移导致出现这种情况,即由这个分段重组的数据包载荷长度超过65535个字节,则必须丢弃这个分段,并且向分段的源地址发送一个ICMP参数错误消息(代码为0), ICMP指针指向分段数据包的段偏移域。下面的几种情况,虽然
41、不希望在重组时出现,但在发生时不认为是错误:同一个数据包的不同分段的分段头,在其前面的头的个数和内容可以不同。无论什么头,只要出现在每个分段数据包的分段头前,则当数据包到达时,都要在重组排队之前被处理。只有那些偏移量为0的分段数据包的头才保留在重组数据包中。同一个原始数据包的不同分段的分段头的下一个头的值可以不同。因为只有偏移量为0的分段数据包的相应值才在重组时有用。6.6 目的地选项头目的地选项头用来携带只需由目的节点处理的选项信息。当某一个头的下一个头域的值为60时,说明紧接着这个头后面的头是目的地选项头。它的格式如下所示:11 YDIT 1341-25 。8 16 31 下一个头| 扩展
42、头长度选项下一个头(Next.Header) :该域长度为8比特,定义紧接在目的地选项头之后的头的类型。这个域取不同的值,对应的扩展头类型不同,值与扩展头类型之间的对应关系见IANA协议值与指定服务网页。扩展头长度(HdrExt Len):该域是一个8比特无符号整数,以8个字节为单位表示目的地选项头的长度,它不包括起始的8个字节。选项(Options):该域长度可变,其长度应保证整个目的地选项头的长度为8个字节的整数倍长,包含有一个或多个TLV编码的选项。具体在5.2节规定。在本标准中只为目的地址选项头规定了5.2节中定义的Padl和PadN选项。注意,在IPv6数据包中可以用两种方式来把可选
43、择的目的地信息进行编码:作为目的地选项头的一个选项,或是作为单独的扩展头。分段头和认证头是后一种方式的例子。具体采用哪种方式要根据不能识别可选信息的目的节点希望采取的动作而定。a)如果目的地节点希望采取的动作是丢弃数据包,并且只有当数据包目的地地址不是组播地址时,向数据包的源地址发送一个ICMP不能识别类型消息,然后信息可以作为单独的头或是作为目的地选项头的一个选项(选项类型域的高位两比特的值为11)来进行编码。具体选用哪种方式的准则是使用的字节数少,或是排列容易,或者语义解析时更有效。b)如果希望采取其他动作,则信息必须作为目的地选项头的一个选项(选项类型域的高位两比特的值为、01或10)来进行编码。6.7 无下一个头IPv6头或任何扩展头中下一个头域的值为59表示这个头后面没有任何数据了。如果IPv6头的载荷长度域指出头后还有字节,而这些字节跟在一个包含59值的头后面,则必须忽略这些字节,同时如果该数据包是转发的则保持不变继续传送。7 IPv6数据包的长度IPv