摘要

  • RFC 3137 保留 router-LSA 与 stub 链路的正常代价,只把非 stub 链路提高到 16 位最大值 0xFFFF;只要存在冗余路径,其他路由器就会绕开该节点承载中转。
  • 这个状态是强烈的路径偏好,不是撤销,也不是排流完成证明。若没有替代路径,遵循 RFC 1583 及以后语义的 OSPF 仍可能使用这条昂贵的唯一通路。

“到它”与“经过它”本来就是两个问题

一台路由器可能还没有宕机,却已经不适合继续承担别人的流量。CPU 过载、内存不足以保存全部 LSA 或构建路由表,都会让控制平面进入危险状态。计划上线与下线也会产生相似需求:运维人员还要登录设备,直连前缀也可能继续有效,但中转负担应当先离开。

最直接的办法是撤掉 router-LSA。它会让节点不再进入其他路由器的路径计算,却也会破坏抵达节点本身的依据。RFC 2328 的最短路径计算先以路由器和 transit network 构成图,再把 stub network 作为叶子加入。X 的 router-LSA 一旦消失,X 的链路以及用于证明双向连接的 backlink 也随之消失。网络的确不再经过 X,却可能连 X 自己也找不到。

2001 年 6 月发布的 Informational RFC 3137 没有把这个过渡压成“存在”或“消失”二选一。它让 X 留在链路状态数据库中,只改变不同链路角色的代价。

最高代价保留了拓扑身份

X 在 router-LSA 中把所有非 stub 链路的代价设置为 16 位全一值 0xFFFF。原文称它为 LSInfinity,并特意说明这不是 summary LSA 与 AS-external LSA 所用的 24 位全一值。类型 3 的 stub 链路仍使用接口的正常输出代价。

不对称是机制的核心。非 stub 链路让最短路径穿过路由器或 transit network;把它们抬到最大值后,任何合理的冗余路径都会更便宜。stub 链路代表直接连接的叶子前缀,保持正常代价,接收者就仍能把路径终点放在 X 的自身表面。

同一份 LSA 因而表达两种互不矛盾的事实:节点和直连目的地仍存在;若有别的路,就不要把节点当作桥梁。可达性没有自动升级为健康证明,中转撤离也没有把管理面一并撤掉。

RFC 3137 把临界状态、平滑引入与移除,以及行政或流量工程原因列为使用场景。它只提供协议信号,没有规定完整维护事务。配置生效不代表远端已经收到 LSA,收到不代表 SPF 与 FIB 已更新,FIB 更新也不代表所有在途或长连接流量已经离开。

冗余不是背景条件,而是行为的一部分

原文明确说,网络至少要有一定冗余,这项技术才会带来实际收益。最高代价不能凭空造出第二条路。每个接收者从自己的链路状态数据库计算最短路径;拓扑给它候选项,LSA 只改变候选项的排序。

因此,“stub router”在这里不能理解为绝对禁止中转。对 RFC 1583 及之后的计算而言,0xFFFF 仍是有限代价。如果经过 X 是抵达某些网络的唯一方法,接收者仍可能选择 X。这一设计在冗余失败时保留最后的连通性,却也可能重新把负载压回正处于临界状态的路由器。

证据必须分层保存。配置记录证明本地意图;发出的 router-LSA 证明实际声明;远端 LSDB 证明接收;SPF 结果与转发表证明选择;流量遥测证明中转是否真的下降;服务探测则证明业务结果。任何一层都不应被拿来替下一层签字。

两代 OSPF 对 0xFFFF 的边缘解释不同

RFC 3137 保留了一段重要的兼容性历史。遵循 RFC 1247 的路由器会丢弃 router-LSA 中代价为 LSInfinity 的链路记录;遵循 RFC 1583 及以后版本的路由器不会把这个值直接当作不可达。

存在替代路径时,两类路由器会得出相同结果:它们都选更便宜的绕行路径。X 是唯一通路时,结果才分叉:旧行为拒绝通过 X 中转,新行为可能以极高代价继续使用 X。

RFC 3137 说,这个特定不一致不会造成路由环路。这个结论只覆盖文中描述的兼容场景,不能扩写成所有实现、所有更新时间序和所有拓扑变化都没有瞬时环路。后来 RFC 6976 专门讨论有序 FIB 更新,正说明收敛期间的瞬态是另一套证据问题。

LSInfinity 这个名字容易让人误判。对一代算法,它接近排除;对另一代算法,它只是最后选择。RFC 3137 的向后兼容恰好建立在这道语义缝隙上。

RFC 6987 给模糊的数值换了名字

2013 年,RFC 6987 废止并替代 RFC 3137。基本机制没有消失,但 0xFFFF 被定义为新的固定架构常量 MaxLinkMetric。这个名字更诚实:它说的是链路代价的最大值,而不是所有接收者都必须解释为不可达的“无穷大”。

新版同时说明该方法适用于 OSPFv2 与 OSPFv3,并加入 OSPFv3 的 R-bit 选项。清除 R-bit 会一致地阻止把路由器用于中转。RFC 6987 把选择留给运营者,也把代价摊开:MaxLinkMetric 在只剩唯一通路时仍可能保连通;R-bit 更严格地保护非中转状态,却可能让依赖该通路的目的地不可达。

这些名称与选项属于 2013 年修订,不能倒写进 2001 年原文。它们说明原来的中间状态很有生命力,同时也需要更准确地揭示连续性与隔离之间的取舍。

graceful restart 追求的是相反的转发方向

RFC 3623 的 OSPF graceful restart 希望路由软件重启期间仍让路由器留在转发路径上,前提是转发表得以保留、拓扑稳定,而且邻居支持协助。RFC 3137 则希望邻居尽量不要经过这台仍可见的路由器。

两者都减少突变,却不能因为都带有“平滑”意味就混用。一个在控制平面短暂失明时保持中转;另一个在节点仍能通告时抑制中转。选错机制,会把流量导向原本要保护的设备。

RFC 5817 后来处理 MPLS/GMPLS 流量工程网络中的计划关闭;RFC 6976 处理链路状态收敛中的有序 FIB 更新。它们划清了 RFC 3137 的能力边界:一份最高代价 router-LSA 不是 TE 隧道撤离回执,不是维护授权,不是排流完成,也不是普遍的无环收敛证明。

协议存在性不等于运营可用性

RFC 3137 最值得保留的历史观念不是数字 65535,而是拒绝用单个布尔状态描述复杂过渡。路由器可能还足以发送协议、接受管理,却已经不适合承担中转。反过来,它也可能正确发出最高代价,而某些远端尚未收敛,转发负载尚未下降。

控制权分散在不同主体。X 控制自己的通告;每个接收者控制自己的 SPF 与 FIB;物理与逻辑拓扑决定替代路径是否存在;运维团队决定何时进入和退出;流量与服务测量决定实际结果。

作者明确没有主张这个想法的原创性,Informational 发布也不证明部署。RFC 3137 真正留下的是一个克制的设计动作:撤回节点的一项角色,而不是撤回节点的身份。路由器仍留在图中供人抵达,只是不再便宜地成为通往别处的道路。

来源

  1. https://www.rfc-editor.org/rfc/rfc3137.txt
  2. https://www.rfc-editor.org/info/rfc3137
  3. https://datatracker.ietf.org/doc/rfc3137/
  4. https://www.rfc-editor.org/rfc/rfc2328.txt
  5. https://www.rfc-editor.org/rfc/rfc1247.txt
  6. https://www.rfc-editor.org/rfc/rfc1583.txt
  7. https://www.rfc-editor.org/rfc/rfc6987.txt
  8. https://www.rfc-editor.org/info/rfc6987
  9. https://www.rfc-editor.org/rfc/rfc5340.txt
  10. https://www.rfc-editor.org/rfc/rfc3623.txt
  11. https://www.rfc-editor.org/rfc/rfc5817.txt
  12. https://www.rfc-editor.org/rfc/rfc6976.txt