摘要

  • draft-ietf-snac-simple-12 试图自动连接 IPv6 末梢网络与相邻基础设施链路,但它把可寻址、可达和可发现明确分成不同功能。
  • 路由器重启或接管后,新前缀可能已经出现,旧地址和旧路由却仍在有效期内;新 RA 与可见服务都不能替应用连续性作证。
  • 最小切换凭证应同时保留状态原因、前缀寿命、主机路由、发现结果和实际选址下的应用事务,又不能把本地证据变成新的中央权威。

一个“恢复”标签压扁了六种状态

SNAC rev12 面对的是很现实的异构网络:低速或不同介质的 IoT 末梢网,不能简单桥接到 Wi-Fi 或以太网。SNAC 路由器在不要求相邻基础设施改造的前提下,为末梢主机提供地址、路由、服务发现,以及需要时的 IPv4 服务访问。

自动化界面很容易把这些能力合并成一个灯。草案没有这样做。地址能否用于网外通信、基础设施主机是否有返回路由、DNS 或 DNS-SD 是否能找到服务,是三件不同的事。应用事务完成则是第四件事。

重启恰好把这种差异暴露出来。控制面可能已经选出一个前缀,主机仍记住另一个;服务记录已经可见,Route Information Option 却被过滤;出站 NAT64 可用,基础设施到末梢的回程仍不存在。

STATE-SUITABLE 不只检查前缀文本

SNAC 路由器接入相邻基础设施链路后,按 RFC 4861 做路由器发现。找到合适 on-link 前缀就进入 STATE-SUITABLE;找不到则进入 STATE-BEGIN-ADVERTISING,自行提供前缀。

“合适”需要两类观察。第一类是 RA 新鲜度:STALE_RA_TIME 默认十分钟,超过这一时间的通告不能继续支撑判断。第二类是通告路由器的邻居可达性:默认最多六十秒后就要主动探测。

这两项不是重复检查。一台路由器可能仍回应邻居探测,却已经停止发送新主机必需的 RA;一份 RA 也可能刚收到,发送者随后立即消失。前缀仍有有效期,只说明某个主机计时器还没走完,不能证明提供它的运行主体仍履行职责。

去优先不是删除,而是受控重叠

当 SNAC 自行提供前缀时,首选寿命和有效寿命默认都是三十分钟。发现更优前缀后,它进入 STATE-DEPRECATING:旧前缀首选寿命降为零,有效寿命随时间递减。如果替代前缀在此期间消失,路由器可以恢复自己原来的通告。

这给系统留下可逆路径,也意味着新旧状态必然有一段共存时间。不同主机收到 RA 的时刻不同,有的会漏掉多播通告,有的已有长连接,有的为新连接重新选源地址。路由器的状态机走得完全正确,也无法说明每台主机正在用哪个地址。

RFC 8978 讨论更广义的“闪速重编号”:新前缀出现,而旧状态没有被可靠撤回。它所举的七天首选寿命、三十天有效寿命是一般 SLAAC 默认值,不是 SNAC 自供前缀的三十分钟。数值不可混用,但逻辑相同:有效不等于可用。

归来的路由器会碰到自己的幽灵

草案的第一个重启场景很具体。路由器 A 原本提供 on-link 前缀,离线后由 B 用另一个前缀接管。A 返回时看到 B 的合适通告,因此不会重新发布旧前缀。

问题在于主机仍可能使用 A 的旧地址。A 收到发往该前缀的数据包时,已经不把它视为 on-link,可能交给默认路由,也可能丢弃。草案直接写出用户后果:IoT 设备短暂失控,自动化任务失败。

这不代表“重启必然重编号”。草案要求自生成 OSNR 前缀跨重启持久化,也指出 DHCPv6-PD 通常会取回相同前缀。真正值得查的是状态未持久化、离线时间足以触发接管、租约过期或改变、AIL 反复断连,以及网状网络分区再合并。

共享稳定 /64 能降低风险。Thread 用 Extended PAN ID 派生稳定 ULA。可条件仍然存在:同一末梢网络的所有 SNAC 路由器不能同时重启。连续性来自多个主体保留状态,而不是一个标识符获得了永生。

OSNR 前缀还有第二套接管

OSNR 前缀让末梢主机能同网外通信,可以来自 RFC 9915 的 DHCPv6-PD,也可以来自 RFC 4193 的 ULA。唯一通告者消失后,其他路由器可继续为旧前缀发布路由。如何协调保留原前缀,草案明确留在范围之外。

旧前缀接近到期时,另一台路由器可发布自己的 OSNR;记得旧前缀的路由器继续为它发布 RIO 直到过期。两条路由同时有效,有利于旧通信排空,却无法证明新事务选中了正确地址,也不能说明路由终点仍在同一网状分区。

服务能看见,路由仍可不存在

RA Guard 场景是最好的反例。基础设施可以拦截 SNAC 路由器的 RA,而 mDNS 不受影响。服务依然显示在列表中,但主机没有收到 RFC 4191 的 RIO,因此没有到 OSNR 前缀的路由。SNAC 提供的 NAT64 甚至可能让部分出站流量继续成功。

所以诊断必须比较三份收据:路由器记录自己发出了什么,代表性主机实际安装了什么路由,应用使用哪个地址完成了什么事务。RFC 6762 与 RFC 6763 能证明发现机制,却不能越权证明转发。

保存分歧发生过的那段时间

rev12 建议带时间记录重编号、去优先和失效,记录由谁提供 AIL 前缀,以及默认路由何时消失或返回。最小连续性凭证还应加入:路由器与本次启动身份、前缀角色、前后状态、触发原因、RA 来源与到达时间、邻居探测、首选与有效寿命、去优先起点、RIO、主机路由、发现结果,以及标明实际地址的应用事务。

这不是全球前缀登记系统。共同部分只负责让不同实现的本地判断可比较;保存多久、谁能看、如何修复,仍由运营者决定。这符合 Lu Heng 的最小初始规范原则,也符合现实分层:报文是陈述,状态机是模型,路由是运行条件,事务才是结果。

来源

  1. SNAC rev12
  2. 版本历史
  3. rev12 HTML
  4. rev12 纯文本
  5. rev11 至 rev12 官方差异
  6. RFC 4861
  7. RFC 4191
  8. RFC 4193
  9. RFC 8978
  10. RFC 6762
  11. RFC 6763
  12. RFC 7084
  13. RFC 6146
  14. RFC 7050
  15. RFC 9915
  16. Lu Heng:Minimum Initial Specification
  17. Lu Heng:On Reality Layers
  18. Lu Heng:Running Code Primary