之前几篇博客介绍了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节。

=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。

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

  1. safari的java扩展_用 Web 技术为 Safari 编写扩展

    原标题:用 Web 技术为 Safari 编写扩展 作者:希德,iOS 开发者,前"有经验的前端开发工程师",就职于网易严选.正在写书<Thinkable SwiftUI&g ...

  2. IPv6扩展头部 (四) 分片头部 Fragment Header for IPv6

    上一篇博客介绍了IPv6扩展头部的路由头部类型,这篇博客介绍一下更常见的扩展头部分片头部. 分片头部用于IPv6源节点向目的节点发送一个大于路径MTU的数据报.对于路径MTU以及如何确定它,以后有机会 ...

  3. IPv6扩展头部 (三) 路由头部 Routing Header for IPv6

    IPv6在我国发展算是早的,网上相关的资源也是比较多但是涉及实际的应用方面就比较少了.随着今年国家对IPv6的加大投入,估计未来一段时间IPv6会变的热门.在学校里老师对这一块没怎么讲,平常工作的时候 ...

  4. Microsoft Office Open XML 格式和文件扩展名

    从 2007 Microsoft Office system 开始, Microsoft Office 使用基于 XML 的文件格式 (如 .docx..xlsx 和 .pptx). 这些格式和文件名 ...

  5. Office2007打开文件提示“您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致”的解决办法

    原文地址为: Office2007打开文件提示"您尝试打开的文件xxx.xls的格式与文件扩展名指定的格式不一致"的解决办法 打开文件时提示"您尝试打开的文件xxx.xl ...

  6. 根据文件扩展名得到文件对应该类型Icon方法

    2019独角兽企业重金招聘Python工程师标准>>> 根据文件扩展名得到文件对应该类型Icon方法 package com.fleety.util; import java.awt ...

  7. 已解决Excel无法打开文件test.xIsx“,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配。

    已解决Excel无法打开文件test.xIsx",因为文件格式或文件扩展名无效.请确定文件未损坏,并且文件扩展名与文件的格式匹配. 文章目录 报错代码 报错原因 解决方法 帮忙解决 报错代码 ...

  8. Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配...

    office版本:2016  系统版本:win10 问题描述:  1.桌面新建excel表格后,打开时,提示"Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效.请确定文件 ...

  9. Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效。请确定文件未损坏,并且文件扩展名与文件的格式匹配

    office版本:2016 系统版本:win10 问题描述: 1.桌面新建excel表格后,打开时,提示"Excel无法打开文件xxx.xlsx,因为文件格式或文件扩展名无效.请确定文件未损 ...

最新文章

  1. android手机装windows,安卓手机上运行WindowsXP系统图文教程
  2. Linux系统安全审计工具Lynis
  3. 使用Sense操作ElasticSearch CRUD
  4. linux下的gpio转串口驱动,X-026-KERNEL-Linux gpio driver的移植之gpio range
  5. java 排序原理_简单选择排序算法原理及java实现(超详细)
  6. Android学习总结(3)——Handler深入详解
  7. Java定时任务(一) Timer及TimerTask的案例解析及源码分析
  8. 大学计算机应用基础教程第三章,计算机应用基础教程 李健苹 计算机应用基础教程 第3章...
  9. Codevs 1200 同余方程 2012年NOIP全国联赛提高组
  10. sklearn学习(模块列表)
  11. 【Python爬虫实战】使用Selenium爬某音乐歌曲及评论信息啦~
  12. steam登录api_steam饰品骗术——骗你说你的账户违反了 Steam 服务协议条款,然后让你转出库存给你的好友。...
  13. JavaScript 基础概念
  14. Eclipse debug 的 drop to frame 的技巧
  15. js移除某个样式_JS removeAttribute()方法:删除元素的某个属性
  16. 【项目需求】房屋租赁管理系统的分析与设计
  17. 切比雪夫不等式例题讲解_14.初中数学:怎么求k的值?解一元一次不等式,基础常考题型...
  18. npx mrm lint-staged 报错
  19. python小乌龟绘制迷宫_用turtle不断的画回字迷宫
  20. 1000内不能被7整除的数

热门文章

  1. iOS开发-多线程开发之线程安全篇
  2. PHP中过滤常用标签的正则表达式
  3. 剑指offer--面试题12
  4. 在Repeater控件,Repeater1控件中都有FooterTemplate模板.但你在后台中如何去找FooterTemplate中的控件呢?...
  5. 人工构造迭代次数高度简并的神经网络训练集
  6. python123平台作业答案第十一周_第十一周作业
  7. 怎么调节电机启动值_发电机组的几个使用规范技巧
  8. 【控制】传递函数零极点解析
  9. C/C++ 整型提升(Integral Promotion)
  10. 2_指令集、体系架构、微架构