6. 更新 RFC 6550 (Updating RFC 6550)
本文档更新 IPv6 Neighbor Discovery 以及相关 6LoWPAN/RPL 规范, 允许节点向邻居路由器注册 IPv6 前缀. 本节专门说明这些更新如何影响 RFC 6550 中 RPL DAO 路由通告的 Path Sequence 和 Path Lifetime 处理. 关键协议字段和消息名保持英文, 以便与原规范对应.
核心规则是: 对前缀路由而言, Path Sequence 只能在相同 Target 且相同来源的通告之间比较 freshness. 这里的"相同来源"由相同 ROVR 值表示. 如果来源无法确定, 就不能安全地执行 freshness 比较. 对多个来源合并同一前缀通告的 RPL 路由器, 应使用所有来源中最长的剩余 lifetime, 并在失效时用合适的 ROVR 值发送 no-path DAO.
这些规则避免了把不同注册节点的通告错误地互相覆盖. 在移动性、多跳传播以及任播/组播前缀场景中, TID、ROVR、Path Sequence 和 Path Lifetime 的一致解释对避免陈旧路径和错误撤销非常关键.
[RFC6550] 使用 Transit Information Option (TIO) 中的 Path Sequence 来只保留最新的单播路由并移除陈旧路由, 例如在移动性场景中. [RFC9010] 将 EARO 中的 TID 复制到 Path Sequence, 并将 ROVR 字段复制到关联的 RPL Target Option (RTO). 通过这种方式, 对每个单独通告, RPL 都能识别注册节点以及注册顺序, 从而使用最新的路径和 lifetime 值.
[RFC9685] 要求在 RPL DAO 消息中使用 ROVR 字段作为 Target 通告来源的指示, 如 [RFC9010] 第 6.1 节所规定. 对于任播和组播通告 (在 NS 或 DAO 消息中), 多个来源可能订阅同一地址. 在这种情况下, 来自不同来源或未知来源的多个通告会由共同父节点合并. 此时, 共同父节点成为合并后通告的来源, 并使用自己的 ROVR 值. 另一方面, 如果父节点传播来自单一来源的通告, 它会像处理单播地址通告一样, 在传播后的 RTO 中使用原始 ROVR, 使该来源能够跨多跳被识别.
本规范更新 [RFC6550], 要求对于前缀路由, Path Sequence 只在相同 Target 且来自相同来源 (即具有相同 ROVR 值) 的通告之间使用; 在这种情况下, 只保留最新通告. 但是, 如果来源无法确定 (即来源不支持本规范), 则不能应用 freshness 比较.
[RFC6550] 使用 TIO 中的 Path Lifetime 表示该通告对单播路由确定仍然有效的剩余时间, Path Lifetime 值为 0 会使该路由失效. [RFC9010] 映射 EARO 中的 Address Registration lifetime 和 TIO 中的 Path Lifetime, 使两种形式的通告同时被接收时可以比较.
合并同一前缀多个通告的 RPL 路由器 MUST 使用并通告该前缀所有通告来源中的最长剩余 lifetime. 当 lifetime 到期时, 路由器使用与先前通告相同的 ROVR 值发送 no-path DAO 消息 (即 lifetime 为 0). 如果只有一个通告该 Target 的后代节点, 该值指向该单一后代; 如果有多个后代, 该值指向路由器自身.
请注意, Registration Lifetime、TID 和 ROVR 字段也放在 EDAR 消息中, 因而 EDAR 创建的状态也可以与收到 NS(EARO) 或 DAO 消息时创建的状态比较. 为简单起见, 下文只提及 NS(EARO), 但同样适用于 EDAR.