摘要

  • OSPFv3 的 Link-LSA、Network-LSA 标识以及 Router-LSA 链路描述会引用 Interface ID。重启中改变它,会让旧 LSA 与邻接状态失配并提前结束优雅重启。
  • 运维证据必须连接物理端口、ifName、IfIndex、OSPF Interface ID、链路本地地址和邻居 Router ID,而不能把“名称看起来一样”当成身份延续。

设备重启后,面板上的接口名没有变化:左边仍叫上联一,右边仍叫上联二。可是模块枚举顺序变了,旧的 IfIndex 被分配给另一块线卡。OSPFv3 Interface ID 也随之漂移。

邻居保存的是重启前的 LSA 与邻接关系。新进程拿着熟悉的名称,却在数字身份上描述了另一组接口。所谓连续性在两张映射表之间断开了。

Interface ID 不是展示字段

RFC 5187 于 2008 年 6 月发布,补充 OSPFv3 优雅重启。OSPFv3 的 Link-LSA 和 Network-LSA 使用 Interface ID 形成 LSA ID,Router-LSA 中的链路描述也引用它。

因此 Interface ID 在协议图中具有对象身份作用。若它在重启期间变化,邻居保存的重启前 LSA 无法与新的邻接状态对齐。规范明确指出,这种差异会导致优雅重启提前终止。

技术上可以让邻居同步变化,但 RFC 选择把责任放在重启方:保留 ID 更稳健、更确定,也更简单。这个选择体现了最小共同规范——不要求全网发明复杂协调,而要求发起连续性声明的一方保留它命名对象的方式。

IfIndex 需要持久性证据

许多实现把 MIB-II IfIndex 用作 Interface ID。RFC 2863 讨论了接口动态移除、重新出现、重初始化以及值重新分配的约束和现实。它没有让一个端口标签自动等同于一个永恒数字。

重启前后应保存:机框、槽位、端口、硬件序列或稳定资源键、ifName、ifAlias、IfIndex、OSPF Interface ID、IPv6 链路本地地址、邻居 Router ID,以及引用该 ID 的每条 LSA。只有这张表能区分“同一接口换了号码”和“同一号码换了接口”。

计数相同也没有证明力。两个端口仍然是两个端口,不代表数字与对象的排列没有交换。

LSA ID 与前缀也必须保持对应

OSPFv3 的 inter-area-prefix-LSA 和 external-LSA 使用无符号 32 位整数作为 LSA ID,数字本身不携带前缀。RFC 5187 要求重启方保留 ID 与前缀的对应关系,以避免网络抖动。

因此证据要保存完整键值表,而不是 ID 列表。相同数字若改指另一前缀,是语义漂移;相同前缀若换了数字,是不必要的重建。两者都可能在数量不变的报表中消失。

Interface ID 与 LSA ID 共同说明本篇的核心:优雅重启保存的不是抽象“状态量”,而是旧声明继续指向相同对象的关系。

grace-LSA 只是请求邻居暂时维持声明

OSPFv3 grace-LSA 的类型为 0x000b,范围是链路本地。它的 Link State ID 就是发出接口的 Interface ID,并包含必选的 grace period 与 reason TLV。

邻居收到后可按本地策略决定是否进入 helper mode:拒绝、限制时长、只帮助特定重启理由,或者在自己重启时拒绝。发送请求不等于对方接受。每个链路段都需要独立收据。

helper 会在成功、到期或相关拓扑变化时退出。严格 LSA 检查提前退出,是把控制权交回正常收敛的安全动作,不应为了漂亮的成功率而隐藏。

转发面完整是一项运行假设

RFC 3623 的机制要求拓扑稳定,并要求重启路由器保留转发表。计划内重启可以事先确认 FIB 最新并会存留;意外崩溃无法完成同样准备。

即使表项字节完全保留,下一跳也可能在控制面缺席期间变化。应记录 FIB 指纹、接口计数、邻接可达、探测路径、丢包与服务结果。FULL 宣告和绿色倒计时只说明邻居暂时维持拓扑声明。

这与既有“保留标签不等于转发真相”文章不同:本篇的中心不是泛化怀疑保留状态,而是 OSPFv3 明文要求的两张身份映射,以及它们如何决定旧 LSA 是否仍然描述同一个世界。

重放暴露了新鲜度边界

RFC 5187 提到重放包含 grace-LSA 的旧 Link-Update,可能使邻居把已经离线的路由器视为正在重启。文档同时指出,重放 Hello 更容易达到维持邻接的目的,因此没有把它定为新增的独立安全问题。

正确结论不是忽略重放,而是限制声明:认证报文、正确类型和有效 Router ID 都不自动证明当前设备与当前转发。RFC 4552 与 RFC 7166 提供认证演进背景,实际收据仍要保留年龄、序列、反重放状态与数据面观察。

一份身份连续性收据

记录:变更 ID;计划/意外性质;版本与控制处理器;Router ID;每个接口的 grace-LSA、原因和时长;各 helper 的策略、接受与退出;重启前后 LSA ID—前缀表;物理端口—IfIndex—Interface ID 表;邻接与 LSDB 同步;LSDB、RIB、FIB 指纹;拓扑变化;路径与包结果;认证与重放;普通收敛回退、回滚与最终对账。

按照 Heng Lu 的现实分层,接口名与数字属于符号层,运行端口与转发属于执行层。清晰来自明确映射,而不是强迫所有层共用一个绿色图标。RFC 5187 的“优雅”不是没有变化,而是变化期间仍能证明旧名字指向旧对象。

信息源

  1. RFC 5187 HTML
  2. RFC 5187 文本
  3. RFC Editor 信息页
  4. IETF Datatracker 文档页
  5. IETF Datatracker 历史
  6. IETF Datatracker 参考
  7. RFC 5187 勘误
  8. RFC 3623:OSPF 优雅重启
  9. RFC 3623 信息页
  10. RFC 5340:IPv6 OSPF
  11. RFC 5340 信息页
  12. RFC 2740:早期 OSPFv3
  13. RFC 2863:Interfaces Group MIB
  14. RFC 1213:MIB-II
  15. RFC 4552:OSPFv3 认证与保密
  16. RFC 7166:OSPFv3 认证尾部
  17. IANA OSPFv3 参数
  18. Heng Lu:现实的层次
  19. Heng Lu:最小规范与自愿采用
  20. Heng Lu:运行代码优先