《IPV6技术要求-IPV6协议(送审稿).pdf》由会员分享,可在线阅读,更多相关《IPV6技术要求-IPV6协议(送审稿).pdf(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 i YD 中华人民共和国通信行业标准 YD/T XXXX-2001 IPv6 技术要求IPv6 协议 Internet Protocol,Version 6(IPv6)Specification (送审稿)2002-XX-XX发布 2002-XX-XX实施 中华人民共和国信息产业部 发布 i 前言 本标准以 RFC文档为依据,针对我国具体要求制定而成。本标准是IPv6系列标准之一,它规定了基本的IPv6头和最初定义的IPv6扩展头及选项,本标准中还讨论了数据包的长度问题,流标签的语义,业务等级以及 IPv6 对上层协议的影响。本标准主要依据 RFC文档,随着 IP 技术的不断发展,需要对本标
2、准不断补充和完善。本标准由信息产业部电信研究院提出并归口管理。本标准起草单位:信息产业部电信传输研究所 本标准主要起草人:赵锋,赵锴,张德华,杜和青。中华人民共和国通信行业标准 IPv6技术要求IPv6协议 YD/T XXXX 2001 ii 目次 前言.i 1.范围.1 2.引用标准.1 3.定义术语及缩写.1 3.1.定义 1 3.2.缩写 2 4.概述.2 5.IPv6头格式.3 6.IPv6扩展头.4 6.1.扩展头的顺序 5 6.2.选项 6 6.3.逐跳选项头 8 6.4.路由头 8 6.5.分段头 12 6.6.目的地选项头 15 6.7.无下一个头 15 7.IPv6数据包的长
3、度.15 8.流标签.16 9.业务等级.16 10.上层协议.17 10.1.上层校验和 17 10.2.数据包最大生存时间 18 10.3.最大上层载荷长度 18 10.4.响应承载路由头的数据包 18 中华人民共和国通信行业标准 IPv6技术要求IPv6协议 YD/T XXXX 2001 iii 附录A:流标签的语义及使用.19 附录B:选项格式准则.20 YD/T XXX-XXXX 1 1.范围 本标准规定了基本的 IPv6 头和最初定义的 IPv6 扩展头及选项,本标准中还对数据包的长度问题,流标签的语义,业务等级以及 IPv6 对上层协议的影响提出了建议。有关 IPv6 的安全性特
4、征不在本标准的讨论范围之内。在本标准中:?必须:表示该条目是本标准必须执行的。违反这样的要求是原则性错误。?必须实现:表示该要求必须实现,但不要求缺省使能。?不允许(不可以):标识该条目绝对禁止。?应当(建议):表示在某些特定条件下存在忽视该条目的理由,但是忽视或违反该条目时必须仔细衡量。?应当(建议)实现:与应当(建议)类似,实现时不必要缺省使能。?不应当(不建议):表示在某些特定条件下存在所描述行为可接受或有效的理由,但实现该行为时必须仔细衡量。?可以:标识该条目确实可选。某些厂商可能出于市场或其他原因实现该选项,另一厂商可能出于类似理由不实现该选项。2.引用标准 下列标准包含的条文,通过
5、在本标准中引用而构成为本标准的条文。在标准出版时,所示版本均为有效。所有标准都会被修订,使用本标准的各方应探讨使用下列标准最新版本的可能性。RFC2460(1998)互联网协议规范版本 6(IPv6)。3.定义术语及缩写 3.1.定义 本标准采用了下列定义:1)节点(node):实现 IPv6 的设备;2)路由器(router):能够转发不明确发送给它自身的 IPv6 包的节点;3)主机(host):除路由器外的任何节点;4)上层(upper layer):紧接在 IPv6 之上的协议层。例如传输协议(如 TCP 或 UDP),YD/T XXX-XXXX 2 控制协议(如 ICMP),路由协议
6、(如 OSPF),以及通过隧道方式封装在 IPv6 中的互联网层或低层协议(如 IPX,AppleTalk,IPv4,甚至 IPv6);5)链路(link):是通信中介或媒体。节点可以通过链路在数据链路层(紧接在 IPv6的下层)进行通信。例如 Ethernet、PPP 链路、帧中继、ATM网络以及互联网(或更高)层的隧道(如在 IPv4 或 IPv6 上的隧道);6)邻居(neighbors):连接在同一链路上的节点;7)接口(interface):一个节点与链路相连的部分;8)地址(address):一个或一组接口的 IPv6 层标识;9)数据包(packet):IPv6 头和载荷的总和;
7、10)链路最大传输单元(link MTU):能通过链路完整传输的数据包的最大传输单元,以字节为单位;11)路径最大传输单元(path MTU):源节点和目的节点之间的一条路径上所有链路最大传输单元中的最小值。注:有一些可能的情况,对于一个具有多个接口的设备作如下设置:转发来自于某些接口且不是以它自身为目的地的数据包;丢弃来自于另一些接口且不是以它自身为目的地的数据包。这时,该设备在接收来自转发接口的数据包,或在转发接口与邻居节点交互时,要遵守路由器的协议要求;而在接收来自非转发接口的数据包,或在非转发接口与邻居节点交互时,要遵守主机的协议要求。3.2.缩写 本标准使用下列缩写:IETF Int
8、ernet Engineering Task Force 互联网工程任务组 ICMP Internet Control Message Protocol 互联网控制消息协议 IP Internet Protocol 互联网协议 IPv6 Internet Protocol Version 6 互联网协议版本 6 MTU Maximum Transmission Unit 最大传输单元 MSS Maximum Segment Size 最大分段长度 TCP Transmission Control Protocol 传输控制协议 TLV Type-Length-Value 类型-长度-值 UDP
9、 User Datagram Protocol 用户数据报协议 4.概述 互联网协议第六版(IPv6)是互联网协议的一个新的版本。IPv6 相对于 IPv4 的主要改变如下:YD/T XXX-XXXX 3?扩展的寻址能力 IPv6 把 IP 地址空间从 32 比特增加到了 128 比特,从而能够支持更多层次的寻址结构,更大的可寻址节点的数量,以及更为简化的地址的自动配置。IPv6 通过在组播地址中加入了一个“范围”域而提高了组播选路的扩展性。在 IPv6 中还定义了一种称为“泛播地址”的新的地址类型,它被用来向一组节点中的任一个节点发送数据包(注)。?简化的头格式 IPv6 省略了一些 IPv
10、4 头中的域或将其改成了可选项,从而减少了数据包的公共处理开销,并限制了 IPv6 头所占的带宽开销。?对扩展和选项的增强支持 IPv6 在 IP 头选项的编码方式上作了一些变化,其目的是更有效地转发,并放宽了选项长度的严格限制,为将来加入新选项提供更大的灵活性。?流标签能力 为了满足发送者所要求的特殊处理,IPv6 增加了一个新的域来标记属于特殊传输数据流的数据包,例如无缺省的服务质量或实时业务等。?认证和保密能力 IPv6 规定了包括认证、数据完整性和数据加密(可选)在内的扩展功能。本标准规定了基本的 IPv6 头和最初定义的 IPv6 扩展头及选项。本标准还讨论了数据包的长度问题,流标签
11、和业务等级的语义,以及 IPv6 对上层协议的影响。IPv6 地址的格式和语义在RFC2373中分别进行了规定。在RFC2463中规定了 IPv6 版的 ICMP,它是所有 IPv6实现所必须包括的。注:目标地址是泛播地址的包将发送到所有由该地址标识的节点中的一个,在所有具有相同泛播地址的节点中,该节点由路由协议中的距离标准所确定的路由距离最短。5.IPv6头格式 0 4 12 31 版本 业务等级 流标签 载荷长度 下一个头 跳数限制 源地址 目的地址 YD/T XXX-XXXX 4 各域含义如下:1)版本(Version):该域长度为 4 比特,IPv6 版本号=6。2)业务等级(Traf
12、fic Class):该域长度为 8 比特。参见第九章。3)流标签(Flow Label):该域长度为 20 比特。参见第八章。4)载荷长度(Payload Length):该域为 16 比特无符号整数,表示 IPv6 载荷长度,即IPv6 头后数据包其余部分的长度,以字节为单位。(注:任何的扩展头都被认为是载荷的一部分,其长度应被计算在内。)5)下一个头(Next Header):该域长度为 8 比特,表示紧接在 IPv6 头后面的下一个头的类型,它使用与 IPv4 协议域相同的值。6)跳数限制(Hop Limit):该域为 8 比特无符号整数,数据包每向前经过一个转发节点,跳数限制减 1,
13、当跳数限制减至 0 时,该数据包被丢弃。7)源地址(Source Address):该域长度为 128 比特,表示产生数据包的节点的 IPv6 地址。8)目的地址(Destination Address):该域长度为 128 比特,表示期望数据包到达的IPv6地址,如果出现路由报头,这个地址可能不是最终的接收数据包的 IPv6 地址。6.IPv6扩展头 在 IPv6 中,可选择的互联网层信息被编码在单独的头中,并放在一个数据包内的 IPv6头和上一层头之间。这种扩展头的数量不多,每个扩展头都被一个明确的“下一个头”域的值所确定。如下例所示,每个 IPv6 数据包可带有 0 个、1 个或多个扩展
14、头,每个扩展头由前一个头的“下一个头”域所确定。IPv6 头 下一个头=TCP TCP 头+数据 IPv6 头 下一个头=路由 路由头 下一个头=TCP TCP 头+数据 IPv6 头 下一个头=路由 路由头 下一个头=分段 分段头 下一个头=TCP TCP 头+数据 除了逐跳选项头之外的其它扩展头不被数据包发送路径上的任何一个节点检查或处理,除非是数据包到达了 IPv6 头中“目的地址”域所指明的节点(或在组播路由的情况下,节点组中的任一个节点)。在对 IPv6 头中“下一个头”域正常解复用时首先要处理第一个扩展头(当没有扩展头时直接处理上层头)。每一个扩展头的内容和语义决定了是否要继续处理
15、 YD/T XXX-XXXX 5 下一个头。因此,必须严格按照扩展头在数据包中出现的顺序对它们进行处理。接收者不能在数据包中搜索一个特定的扩展头,并且在处理完所有排在它前面的头之前处理它。逐跳选项头中携带的信息必须被数据包传送路径上包括源节点和目的节点在内的每一个节点检查和处理。逐跳选项头如果存在,则它必须紧随在 IPv6 头之后。当 IPv6 头中“下一个头”域的值为 0 时,说明后面有逐跳选项头存在。如果节点处理一个头的结果是要进行下一个头的处理,但这个头的“下一个头”域的值不能被节点所识别,则节点将丢弃这个数据包并向数据包的源节点发送一个 ICMP“参数错误”消息,ICMP 代码值为 1
16、(不能识别下一个头的类型),ICMP 指针域包含源数据包中不能被识别的域的偏移量。若一个节点遇到除 IPv6 头外的任一个头的“下一个头”域为 0,则节点对这个数据包也应按上面的方法进行处理。每个扩展头的长度应为 8 的整数倍(以字节为单位),以保证下面的头也按 8 个字节对齐。每个扩展头内的多字节域按它们的自然分界来对齐。IPv6 的完整实现包括下面扩展报头的实现:?逐跳选项?路由(类型 0)?分段?目的地选项?认证(注 1,注 3)?封装安全载荷(注 2,注 3)前四个头在本标准中规定,后两个分别在RFC-2402和RFC-2406中规定,不属于本标准的讨论范围。注 1:认证头用于为 IP
17、 数据报提供无连接完整性和数据初始认证,此外还能防止重放攻击的发生。注 2:封装安全载荷头用于提供机密性,数据初始认证,无连接完整性,防止重放攻击以及受限的数据流机密性。注 3:认证头和封装安全载荷头可以结合使用,也可以通过使用隧道模式嵌套使用。它们可以在主机之间、安全网管之间或安全网管与主机之间提供安全服务。封装安全载荷头还可以提供机密性(加密)服务。它们之间的主要区别在于覆盖的范围不同。此外,如果 IP头不通过封装安全载荷头来封装(以隧道模式),那么封装安全载荷头将不会保护任何的 IP头中的域。6.1.扩展头的顺序 当一个数据包中使用多个扩展头时,这些头应按照下面的顺序出现:?IPv6 头
18、?逐跳选项头?目的地选项头(注 1)YD/T XXX-XXXX 6?路由头?分段头?认证头(注 2)?封装安全载荷头(注 2)?目的地选项头(注 3)?上层头 注 1:这些选项要在 IPv6 目的地址域所列出的第一个目的地进行处理,也要在路由头所列出的后续目的地进行处理。注 2:在RFC1827中给出了有关认证头和封装安全载荷头之间的相对顺序的附加建议。注 3:这些选项只在数据包的最终目的地进行处理。同一类型的扩展头最多只能出现一次(如果有多个同种扩展头,它们应顺次连续排列在一起),唯一例外是目的地选项头可以出现两次,一次在路由头前出现,另一次在上层头前出现。如果上层头是另一个 IPv6 头(
19、即 IPv6 通过隧道方式封装在 IPv6 中),那么接在它后面的是它自己的扩展头,这些扩展头也应按照上面规定的顺序来排列。如果要定义其它的扩展头,则必须要说明它们同以上所列的头的顺序约束关系。IPv6 的节点必须接受并处理同一个数据包中以任何顺序、任何次数出现的扩展头,只有逐跳选项头才必须严格地接在 IPv6 头之后。然而,我们强烈建议数据包的发送者严格遵守上面建议的顺序,除非以后的规范推翻这一顺序。6.2.选项 在前面介绍的扩展头中,逐跳选项头和目的地选项头可携带不定数量的选项。这些选项采用 TLV编码方式,格式如下:选项类型 选项数据长度 选项数据 选项类型(Option Type):无
20、符号的 8 位整数,说明选项的类型。选项数据长度(Opt Data Len):无符号的 8 位整数,以字节为单位,表示选项数据的长度。选项数据(Option Data):是个可变长度域,包含“选项类型”的数据。接收者在处理一个头时,必须严格按照每个选项在头中出现的顺序来处理它们。例如,不能在头中搜索出一个选项并在处理排在它前面的选项之前处理它。在内部编码时,“选项类型”域的最高位两比特指明了当 IPv6 节点不能识别该选项类型时,所必须采取的动作:00 跳过这个选项并继续处理该头。01 丢弃这个数据包 YD/T XXX-XXXX 7 10 丢弃这个数据包,并且无论这个数据包的目的地址是否是组播
21、地址,都向该数据包的源地址发送一个 ICMP 数据包,指出不能识别的选项类型。11 丢弃这个数据包,并且只有当目的地址不是组播地址时,向该数据包的源地址发送一个 ICMP“参数错误”消息,代码值为 2,指针域指向不能识别的选项类型。“选项类型”域的第三位指明这个选项的数据是否能改变数据包到达最终目的地的路由。当一个数据包中有认证头时,对于选项数据可能改变选路的任何选项,在计算或验证数据包的认证值时,这个选项的整个数据域必须当作 0 值来处理。0 选项数据不改变选路 1 选项数据可能改变选路 上述的三个高位比特应被视为选项类型的一部分,而不应独立于选项类型。也就是说,应由一个完整的 8 比特选项
22、类型来标识一个特别的选项,而不能仅由选项类型的低位 5 个比特来标识。逐跳选项头和目的地选项头都使用相同的选项类型编号空间。然而,一个特别的选项可能会被限制只能用于这两个头中的一个。个别的选项有特殊的对齐要求,以确保选项数据域中的多字节值符合自然分界。一个选项的对齐要求是用 xn+y 表示的。也就是说,选项类型必须是在从该头开始算的 x 字节的整数倍加上 y 个字节的位置出现。例如:2n 指从报头开始的任何 2 字节偏移。8n+2 指从报头开始的任何 8 字节偏移,加上 2 字节。有两类填充选项,当需要时用于后续选项的排列,以填充该头使其长度为 8 字节的整数倍。所有 IPv6 节点必须能识别
23、这些填充选项:Pad1 选项结构(对齐要求:无)0 7 0 注:Pad1 选项是一个特例,它没有长度域和值域,只是一个 8 比特的 0 值码。Pad1 选项用于在扩展头的选项域中填充一个字节的长度。当填充量多于一个字节时,要用 PadN 选项,而不是多个 Pad1 选项。PadN 选项结构(对齐要求:无)0 7 15 1 选项数据长度 选项数据 PadN 选项用于在扩展头的选项域中填充 2 个或多个字节。如填充 n 个字节,则“选项数据长度”域的值为 n-2,“选项数据”域是 n-2 个 0 值字节。YD/T XXX-XXXX 8 附录 B包括了设计新选项的格式准则。6.3.逐跳选项头 逐跳选
24、项头用来携带那些在数据包发送路径上必须由每个节点检查的信息。如果 IPv6头的“下一个头”域的值为 0,则说明紧接着 IPv6 头的下一个头是逐跳选项头。逐跳选项头的格式为:下一个头 扩展头长度 选 项 下一个头(Next Header):该域长度为 8 比特,定义紧接在逐跳选项头之后的头的类型,其值与 IPv4 协议域所用的值一样。扩展头长度(Hdr Ext Len):该域是一个 8 比特无符号整数,以 8 个字节为单位表示逐跳选项头的长度,它不包括最初的 8 个字节。选项域(Options):该域长度可变,其长度应保证整个逐跳选项头的长度为 8 个字节的整数倍长,包含有一个或多个 TLV编
25、码的选项。在本标准中只为逐跳选项头规定了 5.2节中定义的 Pad1 和 PadN 选项。6.4.路由头 IPv6 源数据包使用路由头来列出数据包从源地址到目的地址之间需要访问的一个或多个中间节点。该功能非常类似于 IPv4 的松散源选项和记录路由选项。如果某一个头的“下一个头”域值为 43,则说明紧接着它的下一个头是路由头。路由头的格式如下:0 31 下一个头 扩展头长度 路由类型 剩余段 与类型相关的数据 下一个头(Next Header):该域长度为 8 比特,定义紧接在路由头之后的头的类型,其值与 IPv4 协议域所用的值一样。扩展头长度(Hdr Ext Len):该域为 8 比特无符
26、号整数,以 8 个字节为单位表示路由头的长度,不包括最初的 8 个字节。路由类型(Routing Type):该域长度为 8 比特,标识不同类型的路由头。剩余段(Segments Left):该域为 8 比特无符号整数,表示剩余的路由段的数量,即已经列出的在到达最终目的节点之前有待访问的中间节点数目。与类型相关的数据(Type-Specific Data):该域长度可变,格式由“路由类型”决定,长度应保证整个路由头的长度是 8 个字节的整数倍。YD/T XXX-XXXX 9 节点在处理接收到的数据包时,如果遇到一个路由头包含有不能识别的“路由类型”值,则节点要依据“剩余段”域的值采取措施。具体
27、方法如下所述:(1)如果“剩余段”的值为 0,则节点忽略这个路由头,继续处理数据包中的下一个头(其类型由路由头的“下一个头”域的值标识)。(2)如果“剩余段”的值不为 0,则节点必须丢弃这个数据包,并且向数据包的源地址发送一个 ICMP“参数错误”消息(代码值为 0),ICMP 指针指向不能识别的“路由类型”。如果一个中间节点在处理完接收数据包的路由头后,决定应将该数据包转发到一条链路MTU 小于该包长度的链路上,那么该节点必须丢弃此数据包并向该包的源地址发送一个ICMP“数据包过大”消息。下面是 0 型路由头的格式:0 31 下一个头 扩展头长度 路由类型=0 剩余段 保留域 地址1 地址2
28、.地址n 下一个头(Next Header):该域长度为 8 比特,定义紧接在路由头之后的头的类型,其值与 IPv4 协议域所用的值一样。扩展头长度(Hdr Ext Len):该域为 8 比特无符号整数,以 8 个字节为单位表示路由头的长度,不包括最初的 8 个字节。对于 0 型路由头,扩展头长度是头内地址数的两倍。路由类型(Routing Type):该域长度为 8 比特,值为 0。YD/T XXX-XXXX 10 剩余段(Segments Left):该域为 8 比特无符号整数,它表示剩余的路由段的数量,即已经列出的在到达最终目的节点之前有待访问的中间节点的数目。保留域(Reserved)
29、:该域为 32 比特保留域,传输时初始值设为 0,接收方可忽略此域。地址1.n(Address):编号从 1n 的每一个地址域均为 128 位地址矢量。0 型路由头内不能有组播地址,如果一个 IPv6 数据包带有 0 型路由头,则其最终目的地址域不能是组播地址。一个路由头只有当它到达 IPv6 的“目的地址”域所指明的节点时,才能被检查或处理。对于 0 型路由头,节点应按如下算法进行处理:if 剩余段=0 继续处理数据包的下一个头,其类型由路由头的“下一个头”域的值所标识。else if 扩展头长度为奇数 向源地址发送一个 ICMP“参数错误”消息(代码为 0),ICMP 消息指针指向“扩展头
30、长度”域,并丢弃该数据包。else 计算路由头内的地址数 n,n=扩展头长度/2。If 剩余段n 向源地址发送一个 ICMP“参数错误”消息(代码为 0),ICMP 消息指针指向“剩余段”域,并丢弃该数据包。else “剩余段”减 1,计算地址段中下一个将要被访问的地址标号 i,i=n-剩余段,if 地址i或 IPv6 最终地址是组播地址 丢弃该数据包。else 交换 IPv6 目的地址和地址i,if IPv6“跳数限制”=1 向源地址发送一个 ICMP“超时 传输中超过跳数限制”消息,并丢弃数据包。YD/T XXX-XXXX 11 else “跳数限制”减 1,重新把数据包交给 IPv6 模
31、块,以传输到新的目的地。例如,假定从源节点 S 向目的节点 D 发送一个数据包,使用一个路由头,以使该数据包的路由经过中间节点 I1、I2 和 I3。在每一段传输路径上 IPv6 头和路由头中相关域的值如下:当数据包从 S 被传送到 I1 时:源地址=S 扩展头长度=6 目的地址=I1 剩余段=3 地址1=I2 地址2=I3 地址3=D 当数据包从 I1 被传送到 I2 时:源地址=S 扩展头长度=6 目的地址=I2 剩余段=2 地址1=I1 地址2=I3 地址3=D 当数据包从 I2 被传送到 I3 时:源地址=S 扩展头长度=6 目的地址=I3 剩余段=1 地址1=I1 地址2=I2 地址
32、3=D 当数据包从 I3 被传送到 D 时:源地址=S 扩展头长度=6 目的地址=D 剩余段=0 YD/T XXX-XXXX 12 地址1=I1 地址2=I2 地址3=I3 6.5.分段头 IPv6 源节点使用分段头来发送数据包长度比路径 MTU大的数据包(注:与 IPv4 不同,IPv6 的分段由源节点完成,而不是由数据包发送路径上的路由器完成。参见第七章。)。如果一个头的“下一个头”域的值为 44,则说明紧接在它后面的一个头是分段头。分段头的格式如下:0 31 下一个头 保留域 分段偏移 保留 M 标识 下一个头(Next Header):该域长度为 8 比特,定义紧接在路由头之后的头的类
33、型,其值与 IPv4 协议域所用的值一样。保留域(Reserved):该域长度为 8 比特,传输时初始值设为 0,接收方忽略此域。分段偏移(Fragment Offset):该域长度为 13 比特,以 8 个字节为单位,表示该头后面的数据相对于初始数据包可分段部分的起始位置的数据的偏移量。保留(Reserved):该域长度为 2 比特,传输时初始值设为 0,接收方忽略此域。标志位 M(M Flag):该域长度为 1 比特,M=1 表示还有更多的分段,M=0 表示这是最后一段。标识(Identification):该域长度为 32 比特,详述如下:为了从源节点传送一个大于路径 MTU的数据包到目
34、的节点,源节点可将该数据分段,并将每个分段作为一个独立的数据包传送,由接收者重新进行组装。源节点为每个要分段的数据包生成一个标识值。该标识值必须不同于从相同源地址到相同目的地址的最近(注)发出的任何其它数据包的标识值。如果有路由头存在,则上述目的地址指的是最终目的地址。注:“最近”是指在一个包的最大可能生存时间内,包括从源到目的地的传输时间和等待同一个数据包的其它分段重新组装的时间。然而,源节点并不需要知道数据包的最大生存时间。可以假定满足这种要求的方法是把该标识值作为一个 32 位的循环计数器使用,一旦有数据包被分段,该计数器就增加 1,并填入“标识”域。用这种方法来保证“标识”的唯一性。对
35、于每个 IPv6 实现,它可以自己决定是配置单独的节点计数器,还是配置多个计数器,即给每个可能的源地址配置一个计数器,或是给每一对源地址和目的地址配置一个计数器。原始数据包是指最初的、没有分段的数据包,它由下面两部分组成:原始数据包:YD/T XXX-XXXX 13 不可分段部分 可分段部分 不可分段部分包括 IPv6 头以及到达目的地路径上由节点处理的所有扩展头,例如,所有头包括路由头,或者逐跳选项头(如果有的话),不然就是没有扩展头。可分段部分包括该数据包余下的部分,其中包括只能由目的节点处理的扩展头、上层头和数据。原始数据包的可分段部分被分成段,除了最后一段外,每一段的长度都应是 8 字
36、节的整数倍。每一个分段数据包按如下方式传输:原始数据包 不可分段部分 分段 1 分段 2 分段 n 分段数据包 不可分段部分 分段报头 分段 1 不可分段部分 分段报头 分段 2 .不可分段部分 分段报头 分段 n 每个分段数据包的组成如下:(1)源数据包的不可分段部分,其中源 IPv6 头内的载荷长度改为该分段数据包的长度(不包括 IPv6 头本身的长度),并且将不可分段部分的最后报头的下一个报头域值改变为44。(2)分段头部分包括:下一个头(Next Header):标识原始数据包可分段部分的第一个头;段偏移(Segments Left):以 8 个字节为单位表示分段相对于原始数据包可分段
37、部分开始位置的偏移量,第一个分段的段偏移域的值为 0;标志位 M(M Flag):M=0 表示该分段是最后一段,M=1 表示该分段不是最后一段;标识(Identification):用来标识原始数据包。(3)分段本身 分段数据包的长度必须不能超过到数据包目的地路径的路径 MTU。在目的节点,要对分段数据包重新进行组装以恢复成原始未分段时的形式。重组的原始数据包:不可分段部分 可分段部分 YD/T XXX-XXXX 14 以下是重组时应遵循的原则:一个原始数据包只能由具有相同源地址、目的地址和分段标识的分段数据包来重组。重组数据包的不可分段部分包括所有头直到但不包括第一个分段数据包的分段头,它主
38、要作如下两个改动:(1)不可分段部分最后一个头的“下一个头”域的值取自第一个分段的分段头的“下一个头”域;(2)重组数据包的载荷长度从不可分段部分的长度、最后一个分段的长度和偏移量计算得来。计算重组的源数据包长度的公式为:PL.orig=PL.first-FL.first-8+(8*FO.last)+FL.last 其中 PL.orig=重组数据包的载荷长度值,PL.first=第一个分段数据包的载荷长度值,FL.first=第一个分段数据包中分段头后面的分段的长度,FO.last=最后一个分段数据包中分段头的“段偏移”的值,FL.last=最后一个分段数据包中分段头后面的分段的长度。重组数据
39、包的可分段部分是由每个分段数据包的分段头后面的分段组成的。每个分段的长度等于数据包载荷长度减去 IPv6 头与分段本身之间的头的长度,每个分段在数据包“可分段部分”中的相对位置由“段偏移”的值计算而来。分段头不出现在最终的重组数据包中。下面的错误情况可能会在重组分段数据包时发生:如果在接收到第一个到达的分段之后的 60 秒内一个数据包所有要重组的分段没有全部到达,需放弃重组该数据包,并且所有已接受的分段都要丢弃。在这种情况下,如果第一个分段数据包已接收到,则要向那个分段数据包的源地址发送一个 ICMP“超时 段重组超时”消息。如果从分段数据包“载荷长度”域中得到的分段长度不是 8 个字节的整数
40、倍,并且这个段的 M标志位是 1,则这个段就必须丢弃,并且要向段的源地址发送一个 ICMP“参数错误”消息(代码为 0),ICMP 指针指向分段数据包的“载荷长度”域。如果一个分段的长度和偏移导致出现这种情况,即由这个分段重组的数据包“载荷长度”超过 65535 个字节,则必须丢弃这个分段,并且向分段的源地址发送一个 ICMP“参数错误”消息(代码为 0),ICMP 指针指向分段数据包的“段偏移”域。下面的几种情况,虽然不希望在重组时出现,但在发生时不认为是错误:同一个数据包的不同分段的分段头,在其前面的头的个数和内容可以不同。无论什么头,只要出现在每个分段数据包的分段头前,则当数据包到达时,
41、都要在重组排队之前被处理。只有那些偏移量为 0 的分段数据包的头才保留在重组数据包中。YD/T XXX-XXXX 15 同一个原始数据包的不同分段的分段头的“下一个头”的值可以不同。因为只有偏移量为 0 的分段数据包的相应值才在重组时有用。6.6.目的地选项头 目的地选项头用来携带只需由目的节点处理的选项信息。当某一个头的“下一个头”域的值为 60 时,说明紧接着这个头后面的头是目的地选项头。它的格式如下所示:0 8 16 31 下一个头 扩展头长度 选 项 下一个头(Next Header):该域长度为 8 比特,定义紧接在目的地选项头之后的头的类型,其值与 IPv4 协议域所用的值一样。扩
42、展头长度(Hdr Ext Len):该域是一个 8 比特无符号整数,以 8 个字节为单位表示目的地选项头的长度,它不包括最初的 8 个字节。选项(Options):该域长度可变,其长度应保证整个目的地选项头的长度为 8 个字节的整数倍长,包含有一个或多个 TLV编码的选项。具体在 5.2节规定。在本标准中只为“目的地址选项”头规定了 5.2节中定义的 Pad1 和 PadN 选项。注意,在 IPv6 数据包中可以用两种方式来把可选择的目的地信息进行编码:作为目的地选项头的一个选项,或是作为单独的扩展头。分段头和认证头是后一种方式的例子。具体采用哪种方式要根据不能识别可选信息的目的节点希望采取的
43、动作而定。(1)如果目的地节点希望采取的动作是丢弃数据包,并且只有当数据包目的地地址不是组播地址时,向数据包的源地址发送一个 ICMP“不能识别类型”消息,然后信息可以作为单独的头或是作为目的地选项头的一个选项(“选项类型”域的高位两比特的值为11)来进行编码。具体选用哪种方式的准则是使用的字节数少,或是排列更容易排列,或者语义解析时更有效。(2)如果希望采取其它动作,则信息必须作为目的地选项头的一个选项(“选项类型”域的高位两比特的值为 00、01 或 10)来进行编码。6.7.无下一个头 IPv6 头或任何扩展头中“下一个头”域的值为 59 表示这个报头后面没有任何数据了。如果 IPv6
44、头的“载荷长度”域指出头后还有字节,而这些字节跟在一个包含 59 值的头后面,则必须忽略这些字节,同时如果该数据包是前送的则保持不变继续传送。7.IPv6数据包的长度 IPv6 要求互联网中任何一条链路的 MTU不小于 1280 个字节。在任何一条不支持 1280 YD/T XXX-XXXX 16 字节数据包的链路上,必须在 IPv6 层以下的一层提供与链路相关的分段和重组功能。可配置 MTU的链路必须将 MTU配置为至少 1280 字节,建议这样的链路将 MTU配置为 1500 字节或更高,以便在不进行分段的情况下适应可能出现的更大的数据封装。在与某一节点直接相连的任一条链路上,这个节点必须
45、要能接收同这些链路的 MTU一样大的数据包。IPv6 强烈建议节点实现“路径 MTU发现”以便发现和利用具有大于 1280 个字节的 MTU的路径。然而,一个最简单的 IPv6 实现可以简单地限制自己不发送大于 1280 个字节的数据包从而省去了“路径 MTU发现”。为了能发送大于路径 MTU的数据包,节点必须在数据源用 IPv6 分段头给数据包分段,并且在目的地进行重组。然而,如果应用能调节它的数据包使其适应路径 MTU,则不鼓励使用分段(即最小为 1280 字节)。一个节点必须能接收重组后大小为 1500 字节的分段数据包。一个节点允许接收重组后大小为 1500 字节以上的分段数据包。一个
46、依赖于 IPv6 分段来发送长度超过路径 MTU的数据包的上层协议或应用不应该发送长度超过 1500 字节的数据包,除非它明确知道目的地节点有能力重组这么大的数据包。当一个 IPv6 数据包被发送到 IPv4 目的地时,起始的 IPv6 节点可能会收到一个ICMP“数据包过大”消息来报告下一跳的 MTU小于 1280 字节。在这种情况下,并不要求 IPv6 节点把以后发送的数据包长度减少到 1280 字节以下,但必须在这些数据包中加入分段头,使承担 IPv6-IPv4 协议翻译的路由器能得到一个合适的标记值来进行 IPv4 的分段。注意,这意味着载荷长度可能会减少到 1232个字节(1280减
47、去 IPv6头的 40个字节和分段头的 8个字节),如果有附加的扩展头存在,载荷长度可能还会更少。8.流标签 IPv6 头内的流标签域占 20 比特,源节点用它来标记那些需要 IPv6 路由器特殊处理的一系列数据包,这些特殊处理包括“非缺省的服务质量”或“实时服务”。有关这方面内容在IPv6 制定时还处于试验阶段,随着互联网的发展不断明朗,支持流的要求会使这部分内容得到更改。对于那些不支持流标签域功能的主机和路由器来说,当发送一个数据包时,在这个域填入 0 值;当转发数据包时,对这个域不作任何改动;当接收数据包时,忽略这个域。附录 A描述了现有语义和流标签域的使用方法。9.业务等级 IPv6
48、头中的 8 比特业务等级域被源节点和/或路由器用于确定IPv6 数据包的等级或优先权。目前在 IPv4 中正在试验使用业务类型域为 IP 数据包提供不同形式的区分服务,IPv6 头中的业务等级域与此具有类似的功能。希望目前的这些试验能最终确定最适合于 IP 数据包的业务流分类。IPv6 业务等级域的语法和语义的详细定义在另外的标准中提供,不属于本标准讨论范围之内。YD/T XXX-XXXX 17 下面列出了一些对业务等级域的通用要求:?IPv6 业务接口必须要能为上层协议提供一种方法使之在生成数据包时可以修改业务等级域的值。该域的缺省值为 0。?支持业务等级域的特殊应用的节点可以在生成、转发或
49、接收数据包时根据特殊应用的需要改变这一域的值。不具备此能力的节点应忽略此域并且不能对其进行修改。?一个上层协议接收到的数据包中的业务等级域的值与源节点发送数据包中的该域的值可能不同。10.上层协议 1 0.1.上层校验和 任何传输协议和其它上层协议,若在校验和计算中包含了从 IP 头得到的地址,则必须用 IPv6 的 128 比特地址替代 IPv4 的 32 比特地址。下图表示了基于 IPv6 的 TCP 和 UDP的“伪头”:源地址 目的地址 上层数据包长度 0 下一个头?若 IPv6 数据包含有路由头,则伪头中的目的地址就是最终目的地址。在源节点,这个地址是路由头的最后一个路由选项,在最终
50、接收方,这个地址是接收数据包中IPv6 头的目的地址域。?在伪报头中,“下一个头”的值表示上层协议,例如 TCP 为 6,UDP为 17。如果在IPv6 头与上层头间存在扩展头,则伪头中的“下一个头”的值不同于 IPv6 头中的“下一个头”的值。?伪头中上层数据包长度是上层头和数据的长度。某些上层协议带有自己的长度信息,对于这样的上层协议,伪头中的长度就是该长度信息。对于没有长度信息的上层协议,伪头中的长度是 IPv6 头中的载荷长度值减去 IPv6 头与上层头之间所有扩展头的长度之和。?与 IPv4 不同之处是,当 UDP数据包是由 IPv6 节点发出时,则 UDP校验不作为选项。即无论谁发