7. 更新 RFC 8505 (Updating RFC 8505)
本规范更新 EARO 和 EDAR 消息, 以支持前缀注册, 并更新前缀场景下的注册操作. 这些更新尤其从 6LR 的角度定义行为, 例如支持重叠前缀的注册.
7.1. 新的 P-Field 值
[RFC9685] 定义了一个 2 bit 的 P-Field, 其取值为 0 到 2, 并将值 3 保留供将来使用. 本规范定义 P-Field 值 3 的语义.
当 P-Field 设置为 3 时, 表示 Registered Address 代表一个前缀, 而不是单个地址. 接收方收到 P-Field 为 3 的 NS(EARO) 消息后, 必须安装一条到所指示前缀的路由, 下一跳为该 NS(EARO) 消息的源地址.
本规范将值 3 分配给 P-Field, 因而得到如下完整的已定义取值集合:
+=======+======================================+
| Value | Meaning |
+=======+======================================+
| 0 | Registration for a Unicast Address |
+-------+--------------------------------------+
| 1 | Registration for a Multicast Address |
+-------+--------------------------------------+
| 2 | Registration for an Anycast Address |
+-------+--------------------------------------+
| 3 | Registration for a Unicast Prefix |
+-------+--------------------------------------+
Table 1: P-Field Values
7.2. 新的 EARO Prefix Length 字段和 F 标志
[RFC8505] 第 4.1 节将 EARO 定义为 [RFC6775] 中 ARO 选项的扩展.
Status 字段仅在 EARO 放入 NA 消息时使用. 如图 2 所示, 当 EARO 放入 NS 消息时, 本规范重新使用该字段来携带前缀长度. 前缀长度以 7 bit 表示, 该字段的最高有效位保留. 7 bit 值 0 被理解为截断后的 128, 表示该注册针对地址而不是前缀. 这种方式与 [RFC8505] 向后兼容, 并同时覆盖地址和前缀.
本规范增加一个新的 F 标志, 用于指示 Registered Prefix 通过 Registering Node 在拓扑上是正确的. 这意味着 Registering Node 会按照 "Network Ingress Filtering: Defeating Denial of Service Attacks which employ IP Source Address Spoofing" [BCP38] 的要求, 将源地址属于 Registered Prefix 的数据包转发到外部. 当数据包的源地址源自 Registered Prefix 时, 接收方会将这些数据包转发到 Registering Node 地址. 为避免环路, 接收方必须位于内部, 因而发送方向外部发送的数据包可能永远不会到达该接收方. "内部"和"外部"的概念由管理策略定义, 例如"内部"可以是某个特定的 L2 网络, 如 Ethernet fabric.
当 F 标志未设置时, Registering Node 拥有该前缀, 并且如果目标地址源自该前缀, 它会将数据包交付给目标. 反之, 如果设置了 F 标志, Registering Node 会把源地址源自 Registered Prefix 的流量转发到一个网络位置, 例如 ISP Provider Edge, 在那里该源地址在拓扑上是正确的, 例如源自该 ISP 分配的前缀. 当 Status 字段用于传输 Prefix Length 时, F 标志编码在 EARO Status 字段的最高有效位中, 如图 2 所示.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Length |F|Prefix Length| Opaque |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|r|C| P | I |R|T| TID | Registration Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
... ROVR ...
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Figure 2: EARO Format for Use in NS Messages
新的和更新后的选项字段如下:
F: (Forwarding Flag) 1 bit 标志. 当设置为 1 时, 表示发送方期望其他路由器在数据包源地址位于已注册前缀内时, 将这些数据包转发给发送方.
Prefix Length: 7 bit 无符号整数. 当 P-Field 设置为 3 且 EARO 包含在 NS 消息中时, 该字段必须包含以 bit 表示的前缀长度, 取值范围必须为 16 到 120, 且包含两端. 当 EARO 包含在 NA 消息中时, 无论 P-Field 如何设置, 该字段都必须携带状态值. 在所有其他情况下, 该字段为保留字段. 发送方必须将其置零, 接收方必须忽略该字段.
r (reserved): 1 bit 保留字段. 发送方必须将其置零, 接收方必须忽略该字段.
7.3. 新的 EDAR Prefix Length 字段
本规范向 P-Field 增加新值 3, 用于指示 Registered Address 是前缀. 在这种情况下, 该前缀假定最长为 120 bit, 并以零填充到 120 bit. 剩余的 1 个字节专用于 1 个保留 bit 和 Prefix Length.
图 3 展示 P-Field 值为 3 时的 EDAR 消息. 图 4 展示响应 EDAC 消息, 其中包含 Status 字段和回显的 Prefix.
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type |CodePfx|CodeSfx| Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|P=3| Reserved | TID | Registration Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
... ROVR ...
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Prefix +
| |
+ (up to 120 bits, padded with zeros) +
| |
+ +-+-+-+-+-+-+-+-+
| |r|Prefix Length|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
Figure 3: EDAR Message Format with P == 3
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type |CodePfx|CodeSfx| Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Status | TID | Registration Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
... ROVR ...
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Prefix +
| |
+ (up to 120 bits, padded with zeros) +
| |
+ +-+-+-+-+-+-+-+-+
| |r|Prefix Length|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
Figure 4: EDAC Message Format
新的和更新后的 EDAR/EDAC 消息字段如下:
Prefix: 15 字节字段, 最多携带前缀的 120 bit. 如果前缀短于 120 bit, 剩余 bit 必须以零填充. 接收方必须将填充部分视为零, 并且在使用该前缀之前, 必须用零覆盖任何未使用的 bit.
r (reserved): 1 bit 保留字段. 发送方必须将其置零, 接收方必须忽略该字段.
Prefix Length: 7 bit 无符号整数, 指示前缀长度, 单位为 bit. 该值必须在 16 到 120 的闭区间内.
在 EDAR 消息中放置 P-Field 以及相邻的 "Reserved" 字段的能力, 由 [RFC9685] 第 7.2 节规定.
向 EDAR 和 EDAC 消息追加 ND 选项的能力, 由 [RFC8929] 第 3.1 节引入.
所有其他字段遵循 [RFC8505] 中规定的相同定义. 这些字段的取值以及 RFC 引用由 IANA 在 "Internet Control Message Protocol version 6 (ICMPv6) Parameters" [IANA.ICMP] 注册表组中维护.
7.4. 更新注册操作
在 [RFC8505] 中:
-
预期将重启的路由器可以发送最后一条 RA 消息, 节点收到后应当在其他位置注册, 或者在该路由器重启后重新向同一路由器注册. 在所有其他情况下, 节点重启不会发出通知. 当节点恢复运行时, 如果现有注册状态没有被安全存储, 例如存储在持久内存中, 该状态可能已经丢失.
-
只有单播地址可以注册.
-
6LN 必须使用 NS(EARO) 注册其所有 Unique Local Addresses (ULAs) 和 Global Unicast Addresses (GUAs).
-
6LN 可以在 EARO 中设置 R 标志, 以从 6LR 获得返回可达性服务, 例如通过 ND 代理操作, 或者通过在 route-over 子网中注入路由.
-
6LR 为每个 Registered Address 维护一个注册状态, 其中包括一个 NCE, 该 NCE 带有 Registered Node 的 Link Layer Address (LLA), 此处 Registered Node 即 6LN.
从 6LN 的角度看, 注册前缀的操作与注册地址类似. 但是在路由器侧存在重要差异: 路由器会为每个来源维护单独状态, 并在自己的通告中合并这些状态. 本规范增加以下行为, 这些行为类似于 [RFC9685] 为组播地址引入的行为:
-
表示 "Registration Refresh Request" 的 EARO 状态同样适用于前缀.
该状态用于异步 NA(EARO) 消息, 向对等 6LN 指示它们需要重新注册此前注册到发起节点的所有地址和前缀. NA 消息可以发送到单播或组播链路作用域地址, 并且应当限制在节点可能实际已向该路由器注册或订阅的 L2 范围内, 例如无线广播域, 以节省能量和频谱.
希望刷新其状态的设备, 例如在重启后可能丢失部分注册状态的设备, 应当发送带有这个新状态值的异步 NA(EARO). 该异步 NA(EARO) 应当发送到全节点链路作用域组播地址 (ff02::1). Target 必须设置为该节点此前公开用于接受注册的链路本地地址, TID 必须设置为 0. ROVR 字段必须全部置零, 并由接收方忽略.
在传输不可靠的环境中, 可以以快速序列重发组播 NA(EARO) 消息, 此时 TID 每次递增. 如果 6LN 最近已经处理过指示 "Registration Refresh Request" 的 NA(EARO), 则在该快速序列持续时间内, 它会忽略额外的同类 NA(EARO). 该持续时间取决于环境并且必须配置. 默认值为 10 秒.
-
现在支持前缀注册. EARO 和 EDAR 消息中 P-Field 的值 3 表示该注册针对前缀而不是地址. 对前缀和地址执行的 DAD 变为前缀重叠匹配. 是否允许注册重叠的地址和前缀属于网络策略决定, 不在本文档范围内. 只要使用相同的 ROVR 值, 同一个前缀可以注入两次, 即形成多条路由.
重叠有时是期望行为. 例如, 路由器或代理 (见第 10 节) 可能注册一个前缀或聚合, 同时使用该前缀中的地址或该聚合中的前缀的主机也注册自己的部分.
在发生重叠注册时, 最长前缀匹配获胜. 这意味着, 如果网络策略允许重叠注册, 则已注册前缀的路由会安装到以最长前缀匹配完成注册的节点方向, 最长可到 /128.
-
如果 6LR 作为通向外部前缀的边界路由器, 或者完全拥有这些前缀, 则它应当在所有可能需要其向该前缀中继流量的接口上注册这些前缀. 对于这些前缀, 它必须将 EARO 中的 P-Field 设置为 3, 并设置 R 标志以接收与这些前缀关联的流量. 如果该前缀已经在另一个接口上成功注册, 或者该路由器自行处理了 EDAR/EDAC 流程以确保前缀所有权已被 6LBR 知晓并验证, 则它可以不在某个接口上注册该前缀. 此外, 如果该路由器期望在该接口上接收该前缀的流量, 它需要确保该前缀通过其他方式被通告, 例如通过 RPL 等路由协议.
-
6LN 可以在 EARO 中设置 R 标志, 请求 6LR 使用路由协议在其他链路上重新分发该前缀. 除非以某种方式避免环路, 例如遵循树形结构, 否则 6LR 禁止将该前缀再次注册到另一个路由器.
-
6LR 和 6LBR 被扩展为可以接受同一前缀的多个注册, 因为多个 6LN 可能注册该前缀. EARO 中的 ROVR 在 Registered Prefix 的命名空间内唯一标识一个注册.
-
6LR 必须为所有已注册前缀按元组 (IPv6 prefix, prefix length, ROVR) 维护注册状态. 除非它确定 6LBR 是旧实现且不支持本规范 (见第 5 节), 否则它应当使用 EDAR 消息通知 6LBR. 相应地, 6LBR 必须为所有前缀按元组 (IPv6 prefix, ROVR) 维护注册状态.