IPv6中逐跳选项扩展首部 (Hop-by-Hop-Options) 的简要说明

本文详细介绍了IPv6中的逐跳选项扩展首部(Hop-by-Hop-Options),包括其帧格式、Options字段的构成,尤其是OptionType的四位编码和其动作、变化和方法的含义。重点讲解了TLV结构以及IPv6包中身份验证选项的处理方式。
摘要由CSDN通过智能技术生成

IPv6中逐跳选项扩展首部 (Hop-by-Hop-Options) 的简要说明

本学期, 有一门必修课叫做: 下一代Internet. 因其开课时间过于阴间 (中午一点), 导致此门课我几乎是一节也没有听, 基本是看PPT和上网搜索相关资料, 自学成才的. 然而在讲到IPv6扩展首部时, 我就有些听不懂了, 上网搜索资料后也能搞懂部分扩展首部的含义. 特别是其中的 逐跳选项扩展首部 (Hop-by-Hop-Options), 更是我查阅了相关的RFC文档后, 才理清头绪. 所以, 特地整理一篇博文, 用以记录.

逐跳选项扩展首部 (Hop-by-Hop-Options) 格式

从RFC2460 (以下简称RFC文档)中, 我们可以知道逐跳选项扩展首部的帧格式如下所示, 其中用来指示下一扩展首部类型的Next Header占一个字节, 用于指代当前首部长度的Hdr Ext Len占据1个字节. 剩下的Options字段长度不固定, 后面我们将具体说明这个字段的含义.
注意: 图中也标记出了相关字段在首部中的位置, 即标记除了起始比特数和终止比特数, 为了对齐, 对数字的书写格式进行了特殊处理, 例如: 16被写成了上下的两个不同的数字, 分别是: 16.

0               0               1                               3
0               8               6                               1  
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Next Header  |  Hdr Ext Len  |                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+                               +
|                                                               |
.                                                               .
.                            Options                            .
.                                                               .
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Options字段

在逐跳选项扩展首部 (Hop-by-Hop-Options) 的Options字段是由若干具有相同格式的部分组成 (一开始我就是没理解这个地方, 导致花费了大量精力来查阅相关资料进行研究, 才有了这篇博文), 具体来说这个格式为:

0               0               1
0               8               6
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
|  Option Type  |  Opt Data Len |  Option Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -

Option Type 占一字节, 用来标记选项类型, Opt Data Len故名思意, 指的后面Option Data的长度. 这种格式简称为TLV结构, 分别取Type, Length, Variable三个英文单词的首字母组成的缩写.

Option Type也有其固定的格式, 其格式如下 (下图仅为一个示意图, 原版RFC文档中并没有此图, 关于其中的英文也是我根据RFC文档中对相关位置介绍提炼出来的, 不能作为权威依据):

0         2         3         8
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  action |  change |  method |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

action

action (即Option Type中的最高两位)指定了在处理IPv6节点无法识别选项类型时必须采取的操作, 取值总共有四种, 具体定义如下:

取值定义
00跳过此选项并继续处理表头
01丢弃此数据包
10丢弃此数据包. 并向数据包的源地址发送ICMP参数问题代码2消息 (指向无法识别的选项类型), 无论数据包的目标地址是否为多播地址.
11丢弃此数据包. 仅当数据包的目标地址不是多播地址时, 才向数据包的源地址发送ICMP参数问题代码2消息 (指向无法识别的选项类型)

change

change (即Option Type中的第三高位) 用来标记该选项中的数据部分是否可在数据包最终目的地的途中改变. 1表示可变, 0 表示不可变.
注意: 在原版RFC文档中有这样一段英文:

The third-highest-order bit of the Option Type specifies whether or not the Option Data of that option can change en-route to the packet’s final destination. When an Authentication header is present in the packet, for any option whose data may change en-route, its entire Option Data field must be treated as zero-valued octets when computing or verifying the packet’s authenticating value.
中文翻译
选项类型的第三高位指定该选项的选项数据是否可以在到达数据包最终目的地的途中改变。 当数据包中存在身份验证标头时,对于其数据可能在途中更改的任何选项,在计算或验证数据包的身份验证值时,必须将其整个选项数据字段视为零值八位字节。

主要说明了在面对存在身份认证的IPv6包时, 可变选项该如何处理. 考虑到其背后涉及IPv6身份验证等更加复杂的内容, 这里就不做过多展开, 只是在这里提一下, 显得严谨一些.

method

这一部分应该是记录此Options的具体功能, 具体有哪些我没有进行过完整搜索, 这里只给出RFC文档中定义的两个填充选项:

标志含义
00000pad1
00001pad N

这两个填充选项, 是用来对齐后续选项, 并将表头填充到8比特整数倍时使用的填充字段.
**注意: ** 使用 pad 1时, 无需再在后面添加Opt Data LenOption Data字段, 也就是说,一个使用pad 1功能的Options帧格式为:

+-+-+-+-+-+-+-+-+
|0 0 0 0 0 0 0 0|
+-+-+-+-+-+-+-+-+

而pad N的帧格式为, :

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -
|0 0 0 0 0 0 0 1|  Opt Data Len |  Option Data
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - - -

若需要N个字节的填充,Opt Data Len字段的值为N-2, Option Data由N-2个零值字节组成. 也就说N-2个全零字节数据与其前面两个字段 (共两个字节) 组合在一起形成了N个字节的填充.

结语

写到这里, 关于逐跳选项扩展首部 (Hop-by-Hop-Options)这个扩展头标也就介绍的差不多了. 如有疏漏, 还请各位海涵.

  • 30
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IPv6邻居发现协议(NDP)是IPv6网络中的一种重要协议,主要用于发现同一链路上的IPv6节点,以及维护IPv6邻居关系。以下是对NDP的详细解释: 1. NDP的作用 IPv6中的节点地址通常是由网络前缀和节点标识符组成的,其中节点标识符通常是由MAC地址派生而来。因此,当IPv6节点需要与同一链路上的其他节点通信时,需要知道这些节点的地址和MAC地址。NDP主要用于以下方面: - 发现同一链路上的IPv6节点和它们的MAC地址; - 维护IPv6邻居关系,检测邻居是否在线或不在线; - 为IPv6地址解析提供支持。 2. NDP消息类型 NDP使用以下几种消息类型: - 邻居请求消息:用于请求其他节点的MAC地址; - 邻居通告消息:用于通告自己的IPv6地址和MAC地址; - 重定向消息:用于告诉其他节点一个更优的路由。 3. NDP的操作过程 当一个IPv6节点需要向同一链路上的其他节点发送数据时,它首先需要通过NDP查找目标节点的MAC地址。具体操作过程如下: 1)发送邻居请求消息:源节点向目标节点发送一个邻居请求消息,请求目标节点的MAC地址。 2)接收邻居通告消息:如果目标节点在线并且收到了邻居请求消息,则向源节点发送一个邻居通告消息,包含自己的IPv6地址和MAC地址。 3)建立邻居关系:源节点收到邻居通告消息后,将目标节点的IPv6地址和MAC地址存储在邻居缓存中,同时建立邻居关系。 4)维护邻居关系:源节点会定期向邻居节点发送邻居通告消息以更新邻居缓存中的邻居信息。如果源节点长时间没有收到邻居通告消息,则认为邻居离线,将邻居缓存中的邻居状态设置为不在线。 4. NDP的安全性问题 由于NDP消息中未进行身份验证,因此可能存在一些安全性问题,如欺骗攻击、重放攻击等。为了避免这些攻击,可以采用以下措施: - 使用IPv6防火墙来限制NDP消息的流量; - 在NDP消息中使用加密技术保护消息的机密性和完整性; - 使用IPv6安全扩展协议(IPsec)来保护NDP消息的安全。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值