摘要
- 在 RFC 9815 的稀疏对等模型里,通往路由反射器或控制器的 BGP 会话可以保持正常,却不经过它所传播的任何一条具体 fabric 链路;链路发现和活性检测发生在 BGP 之外。
- 一条边进入 SPF,至少要经过本地观测、合法源发、序列与状态、可选的 EoR 就绪门、反向 Link NLRI 匹配、计算、安装和数据面验证。任何一个绿色状态都不能代替整条链。
- 会话认证能够约束信使,最新序列能够约束版本,反射器能够约束分发;它们都不会因制度地位而取得对物理事实的所有权。
一次“所有控制面指标正常”的故障
设想值班报告上的几行记录:两个路由反射器都在线;TCP 会话已认证;某条叶—脊链路的 Link NLRI 序列号最新;SPF 正常结束;路由仍在表中。与此同时,这条链路的一个方向已经不再转发。
这些事实可以同时成立。反射器会话证明的是它自己的控制路径。认证证明的是会话对端。序列号证明的是某一源发历史中的先后。SPF 证明的是算法对已接纳图的处理。路由表证明的是设备形成或安装了什么状态。没有一项直接发包穿过那条失效方向。
问题不是 Dijkstra 算错了,而是组织把“分发者正常”误写成“被分发事实正常”。
RFC 9815 于 2025 年 7 月以标准轨文档发布,定义 AFI 16388 下的 BGP-LS-SPF SAFI 80。它保留 BGP 的有限状态机、消息、传输和大部分差错框架,把相关决策过程改为针对 Node、Link、Prefix NLRI 的 SPF 计算。RFC 9816 则解释其在 Clos 数据中心中的适用性:当不同层之间有 32 路、64 路甚至更多 ECMP 时,不必让每条物理链路都承载一条 BGP 会话。
少建会话是控制面的节省。少留证据则不是协议赠送的收益。
Fabric 图与分发图
逐链路单跳 EBGP 模型最容易理解。会话所走的点到点连接就是被描述的连接;会话建立并协商 BGP-LS-SPF 能力后,该链路可从协议视角变为可用;会话断开时,相应 Link NLRI 被撤回。此时,分发图和物理转发图大致重合。
使用 loopback 建立对等后,一条会话可以跨越多个直连关系。采用反射器或控制器后,fabric 节点只需连接少量分发节点。RFC 9816 还讨论节点通过多跳会话连接两个或更多控制器。此时会话到控制器的可达性本身就可能依赖另一种机制,文档没有替运营者解决这个引导问题。
更关键的是,RFC 9815 明确把直连链路的发现与活性检测放在 BGP 之外,并在这些模型中推荐 BFD。BFD 旨在检测转发引擎之间路径的故障,因此比仅观察路由进程更接近需要的事实。但它也必须有范围:绑定哪一个接口、聚合成员、隧道或多跳路径?使用什么地址族和定时器?返回路径是否相同?
如果一条 BFD 会话实际测量的是控制路径,却被资产系统关联到三条平行链路,它的 Up 只是被错误复制了三次。完整清单必须同时列出两张图,并给每条 fabric 边保存检测器、源发节点、分发会话和计算消费者之间的连接关系。
Link NLRI 是带方向的声明
RFC 9815 要求 Link NLRI 带有本地和远端节点描述符。对 Node 和 Link NLRI,Protocol-ID 必须表示 direct protocol。链路度量属于路由器接口的出方向。另一端需要独立描述相反方向。
因此,“两端之间存在一条链路”并不是由一个中心对象一次说完,而是由两条可交叉核对的方向声明组成。反射器可以保存、选择和转发它们,却没有因此成为它们的观测者。
每个 BGP-LS-SPF NLRI 还必须带 64 位严格递增的序列号。设备要用可用机制在冷启动等情况下维持递增性;对等规则也帮助节点在丢失本地序列状态后用直接邻居所接收的新自源发状态纠正旧副本。接收者通常选择数值最大的版本,变更还可以先向外转发,再安排本地 SPF。
这里必须写下一句审计原则:最新只说明版本顺序,不说明物理世界的准确性。错误绑定的探测器能产生最新的错误记录;已获授权但遭入侵的 BGP 对端也能生成序列完全合法的虚假拓扑。收据不能只保存序列号,还要保存观测事件、源发权限、NLRI 内容指纹和传播路径。
同一 NLRI 被多个 BGP speaker 源发,是配置错误或冒充攻击的可能信号。来自更多方向的副本不等于更多独立证人;它们可能只是同一源声明的扩散。
EoR 证明“学完了”,不证明“还活着”
End-of-RIB 容易被界面翻译成“ready”,但它的权限更窄。RFC 9815 允许在为某个 peer 宣告 Link NLRI 前,要求先收到 BGP-LS-SPF 的 EoR。如果实现提供这一配置,整个域内必须一致;启用时默认无限等待,也可以配置最大等待时间。
它要防的是不完整转发表。刚恢复的节点若尚未获得足够的初始状态便被其他设备当成可用下一跳,流量可能进入却无法正确离开。文档警告,EoR 要求配置不一致会造成短暂微环路和丢包。
在控制器模型的示例中,控制器可以等待两个 peer 的 EoR,并同时收齐连接两端的 Link NLRI,再向其他节点发布这条边。这个门控有价值,却仍然不是链路脉搏。EoR 说明一个地址族的初始传输到达边界;它没有验证光模块、ASIC、接口队列,也没有让一个数据包往返。
运营系统至少应分开记录:会话建立、能力协商、EoR 完成、本地检测通过、本地声明最新、远端声明最新、双向匹配通过、SPF 完成、FIB 变化、数据探测通过。把它们合成一个绿灯,等于主动丢失故障定位所需的信息。
两个方向必须闭合成同一条边
SPF 在处理当前 Link NLRI 时,会到远端节点名下寻找一条指回当前节点的 Remote-Link。编号链路通过本地接口地址与对端邻居地址交叉匹配。节点和链路状态也必须允许使用。只有反向声明存在并通过检查,双向连接才成立。
未编号链路依赖 Link Local/Remote Identifiers 和 Address Family Link Descriptor。后者缺失时,该链路既不能进入 IPv4 SPF,也不能进入 IPv6 SPF;分别发布两个描述符可以支持两个地址族。若远端标识未知,必须使用 0,0 是通配符。在存在平行未编号链路时,这个退路会造成两端短时间内对“哪一条链路在线”看法不同,所以管理部分建议发现或配置准确的远端标识。
已验证勘误 EID 8835 正好落在这个连接点。RFC 原文把 Current-Link Remote 对 Remote-Link Local 的条件重复了两次;修正后的第二项应为 Current-Link Local 对 Remote-Link Remote。前者只核对一端两次,后者才闭合双向标识。
这条勘误不证明某个实现曾按错误句子运行,也不证明发生过故障。它证明测试向量必须包含两边对调、平行链路和通配符。EID 8836 的性质不同,只是把 TIME_TO_LEARN 改成 RFC 8405 使用的 TIME_TO_LEARN_INTERVAL。两条 verified errata 不能被粗暴相加成“两个安全漏洞”。
先传播“不可达”,再等待旧副本消失
失效链路可能在不同传播路径上留下多个副本。若只做普通撤回,最后一份正面记录消失前,链路仍可能被选入计算。RFC 9815 建议源发者先发布一个序列更高、带 link unreachable SPF Status 的 Link NLRI,保持一个可配置间隔后再撤回。LinkStatusDownAdvertise 建议默认两秒。若链路在窗口内恢复,必须发布更新版本并移除 Down 状态。
这一机制让明确的负面状态抢在陈旧正面副本前面。它没有承诺“两秒收敛”。真实链条还包括故障被检测、NLRI 生成、每个消费者接收、SPF back-off、计算、RIB/FIB 更新和包转发恢复。RFC 9815 建议记录触发 NLRI、SPF 计划/开始/结束时间、back-off 状态和次数;这只是最低运行证据。
节点故障时,最快传播路径可能也随节点一起消失,其他路径上会暂留旧 NLRI。规范依赖相邻存活节点发布更新的 Down 链路状态,并依赖双向检查失败来排除该节点。纠错权力因此分布在边缘,不应被描述成中央控制器“看见节点离线”。
能继续传播,不代表可以参加计算
RFC 的差错处理还保留了一个容易被监控产品遗漏的区别:BGP-LS Attribute 因 Attribute Discard 缺失时,NLRI 可以被保存和继续传播,却不得用于 SPF。格式错误的状态或地址族描述符则按 treat-as-withdraw 处理。
因此,Adj-RIB-In 中看到对象,不等于 LSDB 查询会返回对象;接收计数不等于可计算图的规模。平台必须给出排除原因和当前资格,而不是只显示“已学到”。
两台设备的 BGP-LS-SPF LSDB 若失去同步,除非存在其他重同步手段,必须重置会话并发出 Loss of LSDB Synchronization 通知。但如何发现失同步在规范范围之外。实现若不能说明它如何比较状态、如何保全重置前证据,就只实现了动作,没有实现可审计的授权条件。
TCP-AO 能降低对等者冒充风险。RFC 同时说明,合法却被攻陷的 peer 仍可发布修改后的节点、链路或前缀,引发错误路由或过多 SPF。认证信使与验证信件内容从来不是同一控制。
接受稀疏对等前应做什么实验
实验 fabric 必须让会话图与物理图不重合,并至少包含一对平行未编号链路和两个分发节点。先冻结健康基线:两端观测、成对 NLRI、序列、EoR、LSDB 指纹、SPF 结果、FIB 和每个预期 ECMP 成员的流量。
随后只切断一个方向,保持反射器会话正常。记录哪个探测器首先改变;合法源发节点何时提升序列并发布 Down;各消费者何时排除反向配对;下一跳何时离开硬件;不同入口的包何时改道。恢复时必须由更高序列完成,不能让旧副本“复活”。
再分别测试:缺失地址族描述符、Local/Remote 交叉错误、平行链路使用 0、度量不一致、EoR 延迟、属性丢弃、重复源发、冷启动丢序列、LSDB 不同步、单个反射器失效以及只对部分节点生效的策略过滤。RFC 9816 警告,不同 NLRI 集会产生不同本地路由表,进而造成不可达或环路。
每一项都要形成连接记录:物理边标识;探测器范围与版本;原始事件时间;源发节点;NLRI 描述符/属性指纹;序列与状态;发送和接收 peer;EoR;入图理由;LSDB 代际;SPF 时间;RIB/FIB 差异;探测结果;告警、决策和回滚。
这才是 Running-Code Primacy:不是用“设备已运行”压倒规范,而是让任何独立操作者都能从规范要求追到配置、状态和真实包。
证据不支持的结论
本轮资料没有具名生产部署、厂商支持矩阵、收敛时延分布、事故或攻击记录。RFC 9816 描述的是架构预期,不是通用基准。本文也不主张 BFD 是唯一检测器,两个控制器必然足够,或 SPF 完成便代表数据面正确。
稀疏程度、洪泛冗余、控制器位置、活性机制、度量、过滤和时钟都属于运营者的本地决定。这符合 Heng Lu 所说的最小初始规范:共同层只固定互操作所需的对象、顺序和行为,未来选择留给自愿采用者。但选择留在本地,证明责任也留在本地。
来源
- RFC 9815 Datatracker 记录
- RFC 9815 历史
- RFC 9815
- RFC 9815 勘误
- 纳入已验证勘误的信息性版本
- RFC 9816
- RFC 9552:BGP-LS
- RFC 4271:BGP-4
- RFC 5880:BFD
- RFC 4724:End-of-RIB
- RFC 8405:SPF Back-Off
- RFC 7606:BGP UPDATE 差错处理
- RFC 5925:TCP-AO
- Heng Lu:Running-Code Primacy
- Heng Lu:Minimum Initial Specification
- Heng Lu:On Reality Layers
- RFC 9815 正式引用关系
- 引用 RFC 9815 的文档
- RFC 9815 信息页
- RFC 9816 信息页
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
