IPv6基本头和IPv6扩展头

时间:2022-12-28 13:07:28

      IPv6是“Internet Protocol Version 6”的缩写,它是IETF设计的用于替代现行版本IP协议-IPv4-的下一代IP协议。

 

目前我们使用的第二代互联网 IPV4技术,核心技术属于美国 。它的最大问题是网络地址资源有限,从理论上讲,IPV4技术可使用的IP地址有43亿个,其中北美占有3/4,约30亿个,而人口最多的亚洲 只有不到4亿个,中国只有3千多万个,只相当于美国麻省理工学院 的数量。地址不足,严重地制约了我国及其他国家互联网的应用和发展。

 

与IPV4相比,IPV6具有以下几个优势:首先就是网络地址近乎无限,根据这项技术,其网络地址可以达到2的128次方个,如果说IPV4的地址总数 为一小桶沙子的话,那么IPV6的地址总数就像是地球那么大的一桶沙子。其次就是由于每个人都可以拥有一个以上的IP地址,网络的安全性能将大大提高。第 三就是数据传输速度将大大提高。IPv6的主要优势还体现在以下几方面:提高网络的整体吞吐量、改善服务质量(QoS)、支持即插即用和移动性、更好实现 多播功能。 根据这项技术,如果说IPV4实现的只是人机对话,而IPV6则扩展到任意事物之间的对话,它不仅可以为人类服务,还将服务于众多硬件设备,如家用电器、 传感器、远程照相机、汽车等,它将是无时不在,无处不在的深入社会每个角落的真正的宽带网。而且它所带来的经济效益将非常巨大.当然,IPv6并非十全十 美、一劳永逸,不可能解决所有问题。IPv6只能在发展中不断完善,也不可能在一夜之间发生,过渡需要时间和成本,但从长远看,IPv6有利于互联网的持 续和长久发展。 目前,国际互联网组织已经决定成立两个专门工作组,制定相应的国际标准。

 

IPv6与IPv4相比有什么特点和优点:

1)更大的地址空间。IPv4中规定IP地址长度为32,即有2^32-1个地址;而IPv6中IP地址的长度为128,即有2^128-1个地址。

2)更小的路由表。IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。

3)增强的组播(Multicast)支持以及对流的支持(Flow-control)。这使得网络上的多媒体应用有了长足发展的机会,为服务质量(QoS)控制提供了良好的网络平台.

4)加入了对自动配置(Auto-configuration)的支持.这是对DHCP协议的改进和扩展,使得网络(尤其是局域网)的管理更加方便和快捷.

5)更高的安全性.在使用IPv6网络中用户可以对网络层的数据进行加密并对IP报文进行校验,这极大的增强了网络安全.

 

我们需要2^128-1个IP地址吗?

需 要.随着电子技术及网络技术的发展,计算机网络将进入人们的日常生活,可能身边的每一样东西都需要连入全球因特网.并且,准确的说,使用IPv6的网络并 没有2^128-1个能充分利用的地址.首先,要实现IP地址的自动配置,局域网所使用的子网的前缀必须等于64,但是很少有一个局域网能容纳2^64个 网络终端;其次,由于IPv6的地址分配必须遵循聚类的原则,地址的浪费在所难免.

 

 

一、IPv6基本头

IPv6基本头标包含40字节的头标,包括如下域:

IPv6基本头和IPv6扩展头
  • Version版本号,4bit,表明当前IP的协议版本,需要置为6

  • Traffice Class业务量等级,8bit,指示IPv6数据流通信类别或优先级。功能类似于IPv4的服务类型(TOS)字段。

  • Flow Label流标记,20bit,20位,IPv6新增字段,标记需要IPv6路由器特殊处理的数据流。该字段用于某些对连接的服务质量有特殊要求的通信,诸如音频 或视频等实时数据传输。在IPv6中,同一信源和信宿之间可以有多种不同的数据流,彼此之间以非“0”流标记区分。如果不要求路由器做特殊处理,则该字段 值置为“0”。

  • Payload Length载荷长度,16bit,16位负载长度。负载长度包括扩展头和上层PDU,16位最多可表示65,535字节负载长度。超过这一字节数的负载,该字段 值置为“0”,使用扩展头逐个跳段(Hop-by-Hop)选项中的巨量负载(Jumbo Payload)选项。

  • Next Header下一头标,8bit,指明基本头标的下一个头标,识别紧跟IPv6头后的包头类型,如扩展头(有的话)或某个传输层协议头(诸如TCP,UDP或着ICMPv6)

  • Hop Limit跳数限制,8bit,类似于IPv4的TTL(生命期)字段。与IPv4用时间来限定包的生命期不同,IPv6用包在路由器之间的转发次数来限定包的生命期。包每经过一次转发,该字段减1,减到0时就把这个包丢弃

  • 源地址,128bit,发送方主机地址

  • 目标地址,128bit,在大多数情况下,目的地址即信宿地址。但如果存在路由扩展头的话,目的地址可能是发送方路由表中下一个路由器接口。

 


二、IPv6扩展头

 

将IPv4选项合并到标准IPv4头比较复杂。IPv4头最短为20字节,最长为60字节,附加数据包含IPv4选项,必须由路由器翻译以对IP包 进行处理。这种方法有两个影响:其一,路由器实现时往往对附加选项的包进行分流处理,因此导致处理效率降低;其二,由于选项导致性能下降,应用开发者倾向 于不使用选项。

使用IPv6扩展头,可以在不影响性能的前提下实现选项。开发者可以在必要时使用选项,而无须担心路由器会对带扩展选项的包区别对待,除非是设置了选路扩展头或逐跳选项。即使设置了这两个选项,路由器仍可以进行必要的处理,比使用IPv4选项容易。


扩展头的标识

所有的IPv6头长度都一样,并且看起来几乎相同,唯一的区别在于下一个头字段。在没有扩展头的IPv6包中,此字段的值表示上一层协议 。即,若IP包中含有TCP段,则下一个头字段的8位二进制值是6(源自RFC1700(已指派号码));若IP包中含有UDP数据报,这个值就是17。表7-1中列举了下一个头字段的某些值。
下 一个头字段值指明是否有下一个扩展头及下一个扩展头是什么,因此,IPv6头可以链接起来,从基本的IPv6头开始,逐个链接各扩展头。这种头连接链的构 成见图7-1。图中第一个IPv6包没有扩展头;第二个包有选路扩展头,其后为TCP头和包的其余部分;最后一个包有更复杂的头链,IPv6头后面有分段 扩展头,然后是身份验证扩展头,后接ESP扩展头,最后是TCP头和包的其余部分。


下表IPv6下一个头字段的一些可能值,用以指明扩展头


IPv6基本头和IPv6扩展头  
IPv6基本头和IPv6扩展头  
三个不同的IPv6包:第一个包没有扩展头,第二个包有一个选路扩展头,第三个包有三个扩展头


扩展头的顺序

一个IPv6包可以有多个扩展头,但是,只有一种情况允许同一类型的扩展头在一个包中多次出现,而且各扩展头在链接时有一个首选顺序。RFC1883规定,扩展头应该依照如下顺序:

(1)IPv6头。

(2)逐跳选项头。

(3)目的地选项头(应用于IPv6目的地址字段的第一个目的地和选路头中所列的附加目的地中)。


(4)选路头。

(5)分段头。

(6)身份验证头。

(7)ESP头。

(8)目的地选项头(当使用选路头时,仅应用于包的最终目的地)。

(9)上层头。从以上顺序可知,在同一个IP包中只有目的地选项扩展头可以多次出现,并且仅限于包中包含选路扩展头的情况。

上述顺序并不是绝对的。例如,前面已提及,在包的其余部分要加密时,ESP头必须是最后一个扩展头。同样,逐跳选项优先于所有其他扩展头,因为每个接收IPv6包的节点都必须对该选项进行处理。

建立新的选项

扩展头必须通过IPv6头的下一个头字段来确认。这意味着由于这个字段为8位,最多只能有256个不同值。即使将来该字段的可能取值的个数有所减少,也必须支持上一层头的所有可能值。即,该值不仅对扩展头进行标识,还标识着封装在IP包内的所有其他协议 。因此,目前已经指派了很多值,未指派的值相当有限。

IPv6用于扩展头的某些协议 标识符沿自IPv4,例如身份验证头和ESP头。到目前为止,已指派了很多扩展头,但也允许通过逐跳选项扩展头和目的地选项扩展头来建立新的选项。


 

 

除了为下一个头字段保存协议 值 以外,通过使用这些选项头扩展,很容易健壮地实现新选项。如果使用一个全新的头类型来发送IP包,若目的节点支持新的头类型,则一切顺利;反之,如果新的 头类型对目的节点是未知的,则目的节点只能丢弃该包。另一方面,所有的IPv6节点都必须支持逐跳选项扩展头、目的地选项扩展头以及一些基本选项。此时, 如果目的节点收到带有目的地选项扩展头的包,即使不支持该扩展头中的选项,它也能够响应。即,这些选项可以向接收节点请求适当的响应,即使接收节点对选项 并不理解。例如,选项可能是“做X,如果不理解X,就丢弃此包”这样的形式,或者可以是“做X,如果不理解X,就跳过此选项,并完成对扩展头的处理”。选 项也可以请求目的节点发回一个ICMP出错报文,以指明目的节点不理解此选项。

 

选项扩展头

逐跳选项扩展头和目的地选项扩展头可以包含特定的选项。RFC1883中定义了两个填充选项,用于确保扩展头字段符合边界要求。即,如果选项使用3 个8位字段后接一个32位字段,就必须插入(即填充)附加的8位,以确保在越过一个32位字边界时,选项中的32位字段不会被拆开。下图给出了该过程。如 果无需填充,则只定义一个功能选项,即逐跳选项扩展头中使用的巨型净荷选项。

IPv6基本头和IPv6扩展头  
选项头可能需要填充,以保证字段在越过32位字边界时不会被拆开


所有的选项扩展头—逐跳选项扩展头和目的地选项扩展头都有类似的帧格式,见图7-3。很简单,这些扩展头只有两个预定义的字段:下一个头字 段和头扩展长度字段。所有IPv6头都包含下一个头字段。头扩展长度字段占8位,指明该选项头的长度。该长度以8字节为单位,不包含扩展头的第一个8字 节,即如果选项扩展头只有8字节长,该字段值即为0。该字段限制了扩展头最多为2048字节。扩展头的其余部分为该扩展头所包含的选项。

IPv6基本头和IPv6扩展头  
RFC1883中定义的标准选项头格式


选项

IPv6选项包含如下三个字段:

•选项类型:该字段为8位标识符,指明选项的类型。即使目的节点不能够识别选项,也可以由该字段的前3位编码翻译出选项的类型。

 

 

•选项数据长度:该字段为8位整数,表示选项数据字段的长度。该字段最大值为255。

•选项数据:该字段包含选项特定的数据,最大长度为255字节。

选项类型字段的前2位表示目的节点在不能识别特定的选项时应该采取的动作,共有如下四种选项类型:
•00:忽略此选项,完成对扩展头其余部分的处理。

•01:丢弃整个包。

•10:丢弃包,不论该包的目的地址是否是组播地址,都向该包的源地址发送一个ICMP报文。

•11:丢弃包,如果该包的目的地址是单播地址或任意点播地址(即非组播地址),则向该包的源地址发送一个ICMP报文。选项类型的第3位指明在包从源地址到目的地址的传送过程中,选项数据的值是否可以改变。若为0,则不允许改变;若为1,则选项数据是可变的。
逐跳选项扩展头和目的地选项扩展头都包含的相同选项是两个填充选项:填充选项1和填充选项N。填充选项1很特别,它只有8位,全部置为0,没有选项数据长度字段和其他选项数据。

而填充选项N是由前面的四种选项类型之一来标识的,它使用多个字节来填充扩展头。如果扩展头需要N字节填充,则选项数据长度字段值为N-2,即选项数据字段占N-2个字节,全部置为0。再加上1字节的选项类型字段、1字节的选项数据长度字段,一共填充了N字节。

 

逐跳选项

从源节点到目的节点的路由上的每个节点,即每个转发包的路由器都检查逐跳选项中的信息。到目前为止,只定义了一个逐跳选项:巨型净荷选项。下图描述了RFC1883所定义的使用巨型净荷选项的逐跳扩展头。

IPv6基本头和IPv6扩展头  
RFC1883中定义的包含巨型净荷选项的逐跳扩展头,允许IPv6包中的净荷超过65535字节


与其他选项扩展头相同,前两个字段指明了下一个头协议 和 扩展头的长度(此时,由于整个选项只有8位,扩展头长度的字段值为0)。巨型净荷选项从扩展头的第三个字节开始。第三个字节为扩展头类型,其值为194; 第四个字节,即巨型净荷选项数据长度的值为4。选项的最后一个字段为巨型净荷长度,指明包括逐跳选项扩展头在内,IP包中所包含的实际字节数,但不包括 IPv6头。

只有沿途每个路由器都能够处理时,节点才能使用巨型净荷选项来发送大型IP包。因此,该选项在逐跳扩展头中使用,要求沿途的每个路由器都必须检查此 信息。巨型净荷选项允许IPv6包净荷长度超过65535字节,最多可以为232-1字节,超过了40亿字节。如果使用该选项,要求IPv6头的16位净 荷长度字段值必须为0,扩展头中的巨型净荷长度字段值不小于65535。如果不满足这两个条件,接收包的节点应该向源节点发送ICMP出错报文,通知有问 题发生。此外还有一个限制:如果包中有分段扩展头,就不能同时使用巨型净荷选项,因为使用巨型净荷选项时不能对包进行分段。

选路头

选路头代替了IPv4中所实现的源选路。源选路允许用户指定包的路径,即到达目的地沿途必须经过的路由器。在IPv4源选路中,使用IPv4选项, 对用户可以指定的中间路由器的个数有一定限制:带扩展的IPv4头有40个附加字节,最多只能填入10个32位地址。此外,由于路径上的每个路由器都必须 处理整个地址列表,而不论该路由器是否在列表中,因而对源路由包的处理很慢。

IPv6定义了一个通用的选路扩展头,有两个字段,各占1字节:选路类型字段和剩余段数字段。其中选路类型字段表示所使用的选路头的类型;而剩余段 数字段表示扩展头的其余部分所列出的附加路由器的个数,这些路由器是在到达最终目的地的途中包必须经过的。扩展头的其余部分为类型特定的数据,与选路头类 型相关。RFC1883中定义了一种类型,即类型0选路头。

类型0选路扩展头解决了IPv4源选路的主要问题。只有列表中的路由器才处理选路头,其他路由器则不必处理。而且列表中最多可以指定256个路由器。对选路头的操作过程如下:

•由源节点构造包必须经过的路由器的列表,并构造类型0选路头,头中包括路由器的列表、最终目的节点地址和剩余段数,剩余段数(8位整数)指明在包向目的节点交付之前所必须经过的特定路由器的数目。

•源节点发送包时,将IPv6头目的地址设置为选路头列表中的第一个路由器的地址。

•该包一直转发,直到到达路径中的第一站,即IPv6头的目的地址(选路头列表中的第一个路由器),只有该路由器才检查选路头,沿途的中间路由器都忽略选路头。

•在第一站和所有后续其他站,路由器检查选路头以确保剩余段数与地址列表一致。若剩余段数的值等于0,则表示此路由器节点实际上是该包的最终目的地,节点将继续对包的其他部分进行处理。

•假定此节点不是该包的最终目的地,它将自己的地址从IPv6头的目的地址字段取出,并以选路头列表中的下一个节点地址来替代。同时,节点将剩余段数字段的值减1。然后将包发送往下一站。列表中的其他节点重复此过程,直到包到达最终目的地。

RFC1883对类型0选路头的定义中,在剩余段数字段后保留了一个字节,并增加了24位严格/宽松位映射字段。该字段将24个标志映射到最多24 个中间路由器,由此源节点可以指定使用严格选路还是宽松选路。严格选路不允许经过列表中不包含的中间路由器,而宽松选路则允许。目前没有采纳该方案,剩余 段数字段之后的整个32位都作为保留位。未使用严格/宽松位映射字段表示头中所列举的路由器个数只受限于8位的剩余段数字段,当然也表示在类型0选路头中 不能使用严格选路。

 

 

分段头

IPv6只允许源节点对包进行分段,简化了中间节点对包的处理。而在IPv4中,对于超出本地链路允许长度的包,中间节点可以进行分段。这种处理方 式要求路由器必须完成额外的工作,并且在传输过程中包可能被多次分段。当一个节点要发送的包对于本地链路的单个数据传送单元来说太大时,就需要分段。例 如,以太网允许传送的MTU为1500字节,要发送一个4000字节的IP包,如果不分成三段,每段均小于1500字节,就无法在以太网链路上传送。前方 有些链路可能具有更小的MTU,比如576字节,这种链路上的路由器就必须将已经分成1500字节的IP包分段,再次分成更小的段。

IPv4中的分段很令人烦恼,它使得中间节点和目的节点都必须增加处理分段的必要开销。通过使用路径MTU发现机制,源节点可以确定源节点到目的节 点之间的整个链路中能够传送的最大包长度,从而可以避免中间路由器的分段处理。RFC1883规定最小的MTU为576字节,但在将用来代替 RFC1883的文档草案中,最小的MTU要求已增加到1280字节,并建议将链路配置为应该至少可以传送1500字节长的包。

上述规定表明,源节点可以发送长达1280字节的包,而不必顾虑这些包会被分段。长达1500字节的包也很可能不被分段。但是,IPv6规范建议所 有节点都执行路径MTU发现机制,并只允许由源节点分段。换言之,在发送任意长度的包之前,必须检查由源节点到目的节点的路径,计算出可以无需分段而发送 的最大长度的包。如果要发送超出此长度的包,就必须由源节点进行分段。

在IPv6中,分段只发生在源节点,并使用分段头来表示。RFC1883中规定的帧格式如图7-5所示。分段头字段包括:

•下一个头字段:此8位字段对所有的IPv6头是共同的。

•保留:此8位字段目前未用,设置为0。

•分段偏移值字段:与IPv4的分段偏移值字段很相似。此字段共13位,以8字节为单位,表示此包(分段)中数据的第一个字节与原来整个包中可分段部分的数据的第一个字节之间的位置关系。换言之,若该值为175,表示分段中的数据从原包的第1400字节开始。

•保留字段:此2位字段目前未用,设置为0。

•M标志:此位表示是否还有后续字段。若值为1,表示后面还有后续字段;若值为0则表示这是最后一个分段。

•标识字段:该字段与IPv4的标识字段类似,但是为32位,而在IPv4中为16位。源节点为每个被分段的IPv6包都分配一个32位标识符,用来唯一标识最近(在包的生存期内)从源地址发送到目的地址的包。

IPv6基本头和IPv6扩展头  
RFC1883中定义的IPv6分段扩展头字段


整个IPv6包中只有部分可以被分段,可分段的部分包括:净荷和只能在到达最终目的地时才处理的扩展头。对于IPv6头和在发往目的节点的途中必须由路由器处理的扩展头,如选路头或逐跳选项头,则不允许进行分段。

目的地选项

类似逐跳选项头,目的地选项头提供了一种随着IPv6 包来交付可选信息的机制。其余的扩展头选项,如分段头、身份验证头和ESP头,都是每次出于某一个特定的理由而定义的,而目的地选项扩展头则是允许为目的 节点而定义的新选项。目的地选项将使用前面所描述的构造选项的格式。

到目前为止,除了前面提到的填充选项,在已发布的RFC中尚未定义任何目的地选项,但是Internet草案中定义了一些和移动IP相关的选项