目的选项头(Destination Options Header)允许在数据包到达最终目的地时由目标主机或最后一个路由器进行特殊处理。
在IPv6基本头部之后,可以插入一个或多个扩展头部,其中目的选项头就是其中之一。目的选项头的结构包含下一个头部字段(Next Header)、头部扩展长度字段(Header Extention Length)以及随后的一个或多个选项字段。
每个选项字段都由类型(Type)、长度(Length)和具体选项数据(Option Data)组成。类型字段定义了该选项的用途,长度字段指示了整个选项字段的字节长度,包括类型和长度字段本身。
中间路由器在转发过程中通常会跳过目的选项头,仅对基本头部和其他与转发相关的扩展头部(如路由头、分片头等)进行处理。只有当数据包到达目标节点时,目标主机才会根据目的选项头中的内容执行相应的操作。
目的选项头可用于实现多种功能,例如携带QoS信息、安全相关参数或者为特定应用提供附加信息。然而,在实际网络部署中,由于性能和兼容性考虑,目的选项头的使用并不常见,很多情况下被其他更为明确和专用的机制所替代。
目标选项头用于指定中间目标或最终目标的数据包传送参数。该标头由前一个标头的“下一个标头”字段中的值 60 来标识。Destination Options 头与Hop-by-Hop Options 头的结构相同,如图1所示。
图1 Destination Options 标头的结构。
目标选项头有两种使用方式:
-
如果存在路由头,则它指定每个中间目的地的传递或处理选项。在这种情况下,Destination Options 标头出现在 Routing 标头之前。
-
如果不存在路由头或者此头出现在路由头之后,则此头指定最终目的地的传送或处理选项。
目标选项的一个示例是移动 IPv6 的归属地址目标选项。
家庭住址选项(Home Address)
归属地址目的地选项(选项类型201)在RFC 6275中定义,用于指示移动节点的归属地址。归属地址是当移动节点连接到归属链路时分配给移动节点的地址,并且通过该地址始终可以到达移动节点,无论其在 IPv6 网络上的位置如何。有关何时发送归属地址选项的信息,请参阅附录 G“移动 IPv6”。Home Address 选项的对齐要求为 8n + 6。图 4-12显示了 Home Address 选项的结构。
图 2家庭地址选项的结构
以下是家庭地址选项中字段的说明:
-
选项类型当选项类型字段设置为 201(十六进制 0xC9,二进制 11001001)时,如果选项无法识别并且目标地址不是组播地址,则丢弃数据包并发送 ICMPv6 参数问题消息;并且该选项不允许在传输过程中更改。
-
选项长度 选项长度字段指示选项的长度(以字节为单位),不包括选项类型和选项长度字段。由于选项长度字段之后的唯一字段是用于存储 IPv6 地址的归属地址字段,因此选项长度字段设置为 16。
-
家乡地址家乡地址字段指示移动节点的家乡地址。该字段的大小为 128 位。
选项类型
表 4-4 列出了逐跳选项和目标选项
选项类型 | 选项及其使用地点 | 对准要求 |
---|---|---|
0 | Pad1 选项:Hop-by-Hop 和 Destination Options 标头 | 没有任何 |
1 | PadN 选项:Hop-by-Hop 和 Destination Options 标头 | 没有任何 |
194(0xC2) | Jumbo Payload 选项:逐跳选项标头 | 4n+2 |
5 | 路由器警报选项:逐跳选项标头 | 2n+0 |
201(0xC9) | 家庭地址选项:目的地选项标题 |
自RFC 2460 [ https://tools.ietf.org/html/rfc2460.html]以来,定义了更多的 Destination Options 标头类型,但没有一个是常用的。RFC 2473 [ https://tools.ietf.org/html/rfc2473.html]定义了一个目标选项标头来限制隧道的嵌套,称为隧道封装限制。RFC 6275 [ https://tools.ietf.org/html/rfc6275.html]定义了用于移动 IPv6 的目标选项标头。RFC 6553 [ https://tools.ietf.org/html/rfc6553.html],关于低功耗和有损网络的路由协议(RPL),定义了目标(和逐跳)选项类型携带RPL数据。
逐跳选项和目标选项标头的选项类型的完整列表可以在 www.iana.org/assignments/ipv6-parameters [http://www.iana.org/assignments/ipv6…-parameters-2];根据RFC 2780 [ https://tools.ietf.org/html/rfc2780.html]。
目的选项头抓包分析
它有一个“Destination Options”标头,如 RFC 2460中所定义:
所以这会发送由目标节点处理的选项,但这三个选项都是空填充,所以应该效果。
1. 多目的选项头测试
测试发送非规范的数据包,以“Destination Options”标头开头,但后面有更多“Destination Options”标头。和以前一样,它们都不包含有用的数据,只包含零。
底部有一个普通的 TCP 段:
没有得到回复。因为扩展头的数量是一个可配置选项 ,默认情况下为 15 (sysctl net.inet6.ip6.hdrnestlimit),任何具有超过 15 个扩展标头(任何类型)的 IPv6 数据包都会被丢弃。
发送 130 个目的地选项 EH 的原因是尝试“突破某些设备的限制”——由于限制,设备可能决定只解析最多 X(X 可能是 128)个 EH,然后继续前进,即使它尚未到达 ULP(上层协议)。这特别关注防火墙和其他数据包过滤设备 - 如果设备的限制为 128 个 EH,并且“打开失败”,则它可能不会强制执行配置的策略。
2. 2kb大数据包目标选项测试
生成一个2kb目的扩展头的大数据包,如下图被分为两个包
Wireshark 重新组装数据包以显示组合的 IPv6 负载:
该数据包有一个“目标选项”标头,后跟 TCP 段。
第一个“IPv6 Option”是2个字节,从偏移0002开始,如上图所示。
最后一个 IPv6 Option 从偏移量 07f6 开始,如下所示:
重组后的IPv6数据包中共有07f6 -2 = 2036字节的“IPv6选项”字段,此数据包未得到回复。
3. 2 KB 目标选项 + 另一个目标选项
该数据包也被分成两个数据包。Wireshark 重新组装它们以显示结构。
首先有一个包含 2040 字节的“Destination Option”标头。
然后是第二个“目的地选项”标题。
该数据包有一个“目标选项”标头,后跟 TCP 段。该数据包未得到回复,而它应该回复该数据包。
4. 发送32个2kb的需分片目的选项头
需要 35 个数据包(#9 到 #43)来传输此 IPv6 消息,其中包含 32 个目标标头,每个标头大小为 2 KB。
此数据包未能收到回复,因此虽然它没有崩溃,但它也无法正确找到末尾的 TCP 段。