IPv6扩展头部 (一) 扩展头部格式、类型与扩展选项

之前几篇博客介绍了IPv6的扩展头部,包括分片头部和路由头部。接下来介绍一下IPv6扩展头部以及扩展选项的内容,可能会有这样的疑问,有了扩展头部怎么还需要扩展选项?扩展选项是干嘛用的?本篇博客就介绍相关内容。

IPv6扩展头部

       在IPv6中,那些由IPv4选项提供的特殊功能,通过在IPv6头部之后增加扩展头部实现。IPv4路由和时间戳功能都采用这种方式,其它功能(例如分片和超大分组)很少在IPv6中使用(但仍需要),因此没有为它们在IPv6头部分配相应的位。基于这种设计,IPv6头部固定为40字节,扩展头部仅在需要时添加。在选择IPv6头部为固定大小时,要求扩展头部仅由终端主机处理(有一个例外)。IPv6设计者简化了高性能路由器的设计和实现,这是因为IPv6路由器处理分组所需命令比IPv4简单。实际上,分组处理性能受很多因素影响,包括协议复杂性、路由器硬件和软件功能,以及流量负载等。

        扩展头部和更高层协议(例如TCP/UDP) 头部与IPv6头部链接起来,形成级联的头部。如下图:

IPv6头部使用下一个头部字段形成一个链。链中的头部可以是IPv6扩展头部或传输层头部。IPv6头部出现在数据报的开头,并且长度始终为40字节。

IPv6 下一个头部字段值可能表示扩展头部或其他协议头部,在适当的情况下,它与IPv4协议字段使用相同值。

通过上表可以看到,IPv6扩展头部机制将一些功能(例如路由和分片)与选项加以区分。注意选项不是扩展头部,选项接下来讲。

除了"逐跳选项"的位置之外(它是强制性的), 扩展头部的顺序是建议性的,因此一个IPv6的实现必须按接收的顺序处理扩展头部。只有"目的地选项" 头部可以使用两次。第一次是指出包含在IPv6头部中的目的IPv6地址,第二次(位置8)是关于数据报的最终目的地。在某些情况下(例如使用路由头部),当数据报被转发到最终目的地时,IPv6头部中的目的IP地址字段将会改变。

IPv6选项

相对于IPv4,IPv6提供了一种更灵活和可扩展的方式,将扩展和选项相结合。由于IPv4头部空间的限制(最大60字节),那些来自IPv4的选项已停止使用。而IPv6可变长度的扩展头部或编码在特殊扩展头部中的选项可以适应当前更大的Internet。如果选项存在,可放入逐跳选项(与一个数据报传输路径上每个路由器相关)或目的地选项(仅与接收方相关)。逐跳选项(称为HOPOPT)是唯一由分组经过的每个路由器处理的选项。逐跳选项和目的地选项编码格式一样。这些选项被编码为类型 - 长度 - 值 (TLV) 集合,如下图:

逐跳选项和目的地选项编码为TLV集合。第一个字节给出了选项类型,包括一些子字段,在选项没被识别时只是一个IPv6节点如何动作,以及在数据报转发时选项数据是否改变。选项数据长度字段给出了选项数据的字节长度。

TLV 结构如上图所示,它的长度为2字节,后面是可变长度的数据字节。第一字节表示选项类型,其综合那个包括3个子字段。当5位的类型子字段无法由选项识别时,第一个子字段给出了一个IPv6节点尝试执行的动作,如下图:

       如果一个发往组播目的地的数据报中包含一个未知选项,那么大量节点将生成返回源节点的流量。这可通过将动作子字段设置为11来避免。动作子字段的灵活性在开发新的选项是有用的。当选项数据可能在数据报转发过程中改变时,改变位字段(Chg)设置为1。一些已经定义的选项如下:

IPv6选项携带在逐跳(H)选项或者目的地(D)选项扩展头部中,也就是其它扩展头部不带(例如分片头部)。选项类型字段包含来自“类型”列以及动作和改变子字段中的二进制值。“长度”列包含选项数据长度字节中的值,填充1是唯一没有该字节的选项。

   

    看一下实际的报文加深一下映像,只看理论的话都快睡着了。

下面是一个带逐跳选项扩展首部的ICMPv6报文,其中包含两个选项,分别是路由器警告选项和填充N选项,关于这两个选项的具体含义下面再介绍,首先关注一下他俩的结构,TLV结构, 类型 - 长度 - 值。其中类型选项又分为三个字段,动作、Chg和类型子字段。这个和上面介绍的表相一致。

接下来介绍一下具体的选项含义:

1. 填充1和填充N

        由于IPv6选项需要与8字节的偏移量对齐,因此较小的选项用0填充到长度为8字节。这里由两个填充选项,分别称为填充1和填充N。填充1选项(类型0)是唯一缺少长度字段和值字段的选项。它仅有一个字节长,取值为0。填充N选项(类型1)向头部的选项区域填充2字节或者更多字节。对于n个填充字节,选项数据长度字段包含的值为(n - 2)。

下图包含两个填充1选项:

2. 路由器警告

       路由器警告选项指出数据报包含需要路由器处理的信息。它与IPv4的路由器警告选项的目的相同。这个选项平时用到很少,我们只要知道有这个定义和它的样子就好了。这个选项在上图里有,可以观察一下。

3. IPv6超大有效载荷

      在某些TCP/IP网络中,例如哪些用于互联超级计算机的网络,由于正常的64KB的IP数据报大小限制,在传输大量数据时会导致不必要的开销。IPv6超大有效载荷选项指定了有效载荷大于65535字节的IPv6数据报,称为超大报文,这个选项无法由MTU小于64KB的链路连接的节点来实现。超大有效载荷选项提供了一个32位的字段,用于携带有效载荷在65535-4294967295(4 GB)字节之间的数据报。

      当一个用于传输的超大报文形成时,其正常IPv6固定首部中的负载长度字段被设置为0.

选项就介绍这么多,还有其它的一些选项,如隧道封装限制、快速启动等。用的时候很少,长这么大还没见过。所以先了解常用的,其它的选项等实际开发工作中遇到在慢慢处理。像我目前的IPv6工作中,基本上不会处理选项内容,当然这也和应用相关。

关于IPv6扩展头部的内容:

IPv6扩展头部(三)路由扩展头部https://blog.csdn.net/fuyuande/article/details/81122628

IPv6扩展头部(四)分片扩展头部https://blog.csdn.net/fuyuande/article/details/81145145

参考资料:

1. 《TCP/IP详解-卷一:协议》W.Richard Stevens。原书第二版。5.3节。

猜你喜欢

转载自blog.csdn.net/fuyuande/article/details/81146615