摘要

  • RFC 9685 把 RFC 8505 的 6LoWPAN 邻居发现注册扩展到组播与任播“订阅”,允许多个来源合法使用同一个地址。
  • 路由器保留每个来源的状态,却只为共享地址注入一条路由;当请求可达性时,有效注入依据仍处于活动状态的最长订阅期限。
  • 因而“路由还在”只能证明合并投影仍有依据,不能证明某一监听者未过期、RPL 分支完整、无线帧送达或应用完成接收。

三名传感器订阅了同一个组播地址。A 的有效期还剩两小时,B 只剩一分钟,C 已经掉电。上游路由在 C 消失后仍然存在,而且完全符合协议:A 的期限足以支撑这条合并通告。控制台却把同一条绿色路由复制到三名设备的详情页,写成“组播可达”。

错误不在路由。错误在于把共享地址的投影视为每个来源的事实。RFC 9685 有意把两层状态分开:6LoWPAN Router 为每个 origin 保存订阅,再把同一地址的多个通告合并为一个 DAO。节省控制面状态的同时,个体身份不会自动出现在上游路由里。

订阅、所有权与可达请求不是同一件事

RFC 8505 的基础机制用于注册节点拥有的单播地址。RFC 9685 引入“订阅”:节点不是声称独占组播或任播地址,而是说明自己监听或接受该地址。因此,多名节点提交同一个地址并不是重复地址冲突。

P-field 描述地址类型:1 表示组播,2 表示任播。R flag 另行表示节点是否请求返回可达服务,例如由 6LR 把地址注入 RPL。P 合法不等于 R 已设置;R 已设置也不等于上游状态已经传播。

若 6LR 需要检查节点是否有权监听,还要与 6LBR 完成 EDAR/EDAC 验证。RFC 9685 沿用 RFC 8928 的 ROVR 保护注册来源。它可以约束谁提交这次订阅,却不会替业务系统决定应用是否获准加入,也不会观察之后的数据包。

一份可复核的订阅回执至少要保留节点、地址、P、R、TID、ROVR、请求期限、链路身份、EDAR/EDAC 结果与 NA(EARO) 状态。把这些字段压成“active”,等于丢掉了之后判断过期与归属所需的问题本身。

最长有效期维持的是地址投影

对于请求可达性的共享地址,6LR 依据所有活动订阅中的最长期限维持注入。这是一种合理的聚合规则:只要还有监听者,路由不必因为另一个来源到期而反复撤销和重建。

但最长期限属于合并后的地址状态,不属于每名监听者。B 到期后,A 可以让路由继续存在;这不能恢复 B 的资格。C 掉电后,如果它没有续订,A 的长期订阅也不能替 C 生成新的逐来源记录。

所以观测系统必须同时保存两本账:逐来源订阅账回答“这个节点在这个时刻是否仍有效”;合并路由账回答“这个地址是否仍被注入”。只有第二本账时,路由为真,但针对个体的结论不可证。

注入本身还是异步的。节点收到成功的 NA(EARO),并不要求 DAO 在同一时刻已经完成传播。反过来,旧 DAO 仍在也不能证明新加入的来源已经被正确纳入合并集合。需要记录订阅接受、集合变更、有效最长期限、注入事件与 DAO 序列各自的时间。

Storing 与 Non-Storing 保存不同的运行事实

在 RFC 6550 的 Storing 组播模式中,DAO 沿首选父节点上行,形成覆盖订阅叶子的组播树。路由器再沿树以单播 MAC 帧向相关邻居发送数据。

RFC 9685 新增的 Non-Storing 组播模式由 Root 做 ingress replication。DAO 把组播地址作为 Target;Root 使用与 RFC 9008 相关的源路由封装,把副本送往相应的 transit 6LR。一个模式需要核对分布式树状态,另一个模式需要核对 Root 的目标集合、复制决定和封装路径。

任播又不同。多名来源可以订阅同一个任播地址,但一个数据包只会选中一个子节点或一个已通告节点。订阅数量不是扇出数量。若业务目标要求“最近”“负载最低”或“指定区域”,还必须保留选择政策、候选集合、最终目标与实际结果;RFC 9685 不替本地政策作这项决定。

RFC 6553 与 RFC 9008 提供 RPL 数据面的相关结构。RFC 3810 的 MLDv2 和 RFC 7731 的 MPL 则属于相邻但不同的监听发现或低功耗组播机制。运营证据必须标明实际使用的状态机,不能把另一套协议的计数器借来填空。

无线链路仍可能让正确路由失去结果

RFC 9685 指出 Direct MAC Broadcast 可能不可靠,异步广播还会迫使休眠监听者保持唤醒。规范因此期待 6LR 在可行时,用单独的单播 MAC 帧把组播数据发给每个订阅 6LN。

这种交付方式更可控,却仍不是应用回执。6LR 可以有正确状态,节点却正在休眠;链路可以送达,IP 层却丢弃;IP 层可以接受,应用却没有处理。路由、传输、接收和业务结果分别属于不同观察者。

重启会把差异放大。未持久化的注册状态可能丢失。认为自己漏掉状态的路由器应发送异步刷新请求;否则网络只能等待下一次周期性注册,其间可能丢包。历史上的订阅成功仍然真实,但已经不能描述当前 6LR。

组播 scope 也只回答边界问题。RFC 7346 定义 IPv6 组播作用域;RFC 9685 把 Realm-Local 用于跨一个 RPL DODAG,把 Admin-Local 用于跨一个联合 RPL Instance。scope 选对了,不代表所有必经 6LR 都有能力或仍有状态。

新 MOP 不是在线开关

RFC 9685 明确指出,部署新的 MOP 5 不能直接更新一张正在运行的网络。管理员必须新建实例,再让节点迁入。brownfield 网络可能让旧设备的单播留在一个实例,把组播与任播放在另一个实例。

这项选择会增加受限设备的信令和状态负担。覆盖还取决于支持新能力的 6LR 密度:每名需要服务的 6LN 至少要接触一台兼容 6LR;Storing 模式还要求这些路由器能组成通往 Root 的 DODAG。能力通告或采购清单不是实时拓扑证明。

最低初始规范所强调的,是把互操作所需的共同部分写清,而不是由标准替本地部署作决定。现实层要求逐来源状态、合并路由与交付结果各自保留主体。运行代码优先则要求最后回到真正转发和接收数据包的系统。

RFC 9685 的安全价值之一,是让不懂 RPL 的叶子通过 ND 获得服务,而不授予它注入 RPL 消息的权力。报告也应保持同样克制:订阅回执只证明准入,DAO 只证明路由状态,接收必须由链路、节点和应用自己作证。

来源