摘要

  • treat-as-withdraw 会把问题 UPDATE 中的每一条可解析路由视同撤销;它不修复报文,也不保证目的地还有替代路径。会话保持 Established 不能代表业务可达。
  • 四种处理动作强度不同:会话重置、AFI/SAFI 停用、视同撤销和属性丢弃。选择必须服从确切属性、NLRI 可解析性、多个错误中的最强动作以及本地策略。
  • 成功证据要从原始报文或明确有损的等价记录,追到 Adj-RIB-In、Loc-RIB、FIB 和数据包,再证明发送方发出干净替代 UPDATE 后没有陈旧或分歧状态。

一盏不会变红的告警灯

设想一个纯粹用于解释机制的 UPDATE:它装有数条原本普通的路由,却带着一个格式错误的路径属性。这里不指定运营商、前缀、路由数量、设备缺陷或实际事故。按照 RFC 4271 的基础错误处理,接收方可能发送 UPDATE Message Error NOTIFICATION、终止会话,并移除从该邻居学到的所有路由。一个坏属性因而会波及同一会话上与该 UPDATE 无关的有效路由。

RFC 7606 的 treat-as-withdraw 改变了这幅图景。会话可以继续保持 Established,但问题 UPDATE 里承载的每一条路由都按撤销处理,并从 Adj-RIB-In 移除。仪表盘上的邻居仍是绿色,报文里的目的地却可能已经失去路径。错误的爆炸半径缩小了,却没有归零。

关键不是猜出哪一个前缀“看起来有问题”。同一个 UPDATE 共享路径属性,因此隔离单位是报文内全部相关 NLRI。若其中一条路由还有替代路径,它可能在 Loc-RIB 选出新的结果;若另一条没有,目的地可能完全不可达。不能把前者的恢复推断到后者,也不能用会话存活替代逐目的地核查。

四种动作不是四个同义词

RFC 7606 按由强到弱列出会话重置、AFI/SAFI 停用、treat-as-withdraw 和 attribute discard。重置删除该会话学到的路由,影响最广,但在解析边界已经丢失时可能仍是必要选择。它不是“落后模式”的代名词,而是用更多可达性换取清晰状态边界。

AFI/SAFI 停用把影响限制到一个地址族,却远不只是撤销一份 UPDATE。RFC 4760 第 7 节规定,相关族的已收路由可能全部删除,之后同一会话上的该族路由在会话存续期间也可能被忽略;实现还可以终止会话。称其为“仅影响坏路由”会严重低估范围。

treat-as-withdraw 的前提是接收方能找到并成功解析相关 NLRI 字段。若边界都无法确定,就不知道该撤销哪些路由,不能假装精细隔离仍然成立。RFC 4271 的重置或 RFC 4760 的族级动作仍可能适用。解析能力不是附属诊断功能,而是采取较窄动作的授权条件。

attribute discard 则只去掉错误属性,继续处理 UPDATE。RFC 7606 把它限制在不影响路由选择或安装的属性;即便属性通常无关,本地策略也可能引用它,使丢弃改变结果。接收方必须按实际策略判断,而不是照抄一张静态“可丢弃属性”清单。

一个报文也可能同时触发多个错误。RFC 7606 要求使用适用动作中最强者。先发现一个可丢弃错误,并不授权解析器忽略后来发现的重置条件。运维记录应保存全部分类结果和最终决策理由,而不是只输出最方便解释的一条告警。

撤销不是丢包式忽略

把 treat-as-withdraw 说成“丢掉坏 UPDATE”会遗漏旧状态。BGP 更新是增量的;静默忽略一份替代通告,可能让此前安装的旧路由继续存在。视同撤销要求相关路由在接收状态中消失,使后续选择建立在已知缺失上。两种方法在会话都在线时看似相近,在 FIB 里却可能留下相反结果。

属性语义解释了为什么动作不同。RFC 6793 对 AS4_PATH 和 AS4_AGGREGATOR 给出与四字节 ASN 过渡情境相关的丢弃与记录规则;某些不应出现在特定能力组合中的属性会被丢弃并继续处理。这不是任意放宽,而是属性信息可否安全舍弃的判断。

RFC 7607 对 AS 0 的处理又展示了上下文边界:AS_PATH 或 AGGREGATOR 中的 AS 0 转交 RFC 7606,AS4_PATH 或 AS4_AGGREGATOR 则转交 RFC 6793。本报告不把主题变成 AS 0;这个例子只说明“发现坏值”还不够,必须知道它位于哪个属性及哪套能力语境。

RFC 8092 提供了更现代的具体规则:Large Communities 属性值长度若不是非零的 12 字节倍数,使用 treat-as-withdraw;重复值本身不构成格式错误,而是去重。相似的表面异常可以有不同处理,注册名称或人工直觉都不能替代对应规范。

IANA BGP Parameters 是路径属性代码和 UPDATE 错误子码的当前登记权威。但代码被登记只解决“它叫什么”,不会自动决定接收方能否安全丢弃或撤销。动作仍须来自登记项引用的规范和本地策略语义。

隔离可能制造内部不一致

错误隔离不是正确性证明。RFC 7606 警告,在 iBGP 会话上采用 treat-as-withdraw 可能造成 AS 内部视图不一致,后果包括长期转发环路和黑洞。即使没有不一致,问题 UPDATE 中的目的地也可能完全不可达或改走次优路径。接收方应追溯到入口,并在源头过滤错误信息,而不是把重复撤销常态化。

路由反射会使这种差异更难从一个节点看清。一台客户端移除了报文内的路由,另一台可能仍从不同路径保留它;它们的 Loc-RIB 和下游通告因此分开。仅在产生告警的路由器检查会话和隐藏路由,不足以证明整个 AS 的转发一致。应选择反射器、客户端和不同入口的观察点。

恢复同样可能不完整。发送方修正属性并重发干净 UPDATE 后,接收方需要重新建立 Adj-RIB-In 状态、完成选择并更新 FIB。若某节点没有重新接收,或者旧状态因先前静默丢弃残留,会话依然可能全绿。恢复证据必须寻找陈旧路由、重复坏报文和跨节点分歧。

观测能力决定能否承担这项权力

RFC 7606 要求调试设施识别涉及的 NLRI,并保留完整的格式错误 UPDATE,以便调查根因。理想证据首先是一份确切接收 PDU;如果只能保存镜像或摘要,就要写明采样、丢失和截断。没有报文本身,仅凭一条“路由消失”告警,无法证明是哪项属性触发了哪种动作。

RFC 7854 的 BMP Route Mirroring 可以传输逐字节收到的消息,也能标记因错误而被视同撤销的 PDU。它同时定义 Messages Lost,因为缓冲资源可能耗尽。镜像是可选的,可能抽样或有损,还会消耗资源;“已启用 BMP”不能被当作无损取证保证。

证据链的第二步是把 PDU 与邻居、方向、AFI/SAFI、属性代码、标志、长度及所有 NLRI 绑定。第三步记录接收软件和版本,以及经过组继承后的有效错误处理和属性过滤配置。否则,同样一份报文在不同节点产生不同动作时,团队无法判断是设计差异还是配置漂移。

随后核对动作本身:重置、族停用、视同撤销还是属性丢弃。比较变更前后的 Adj-RIB-In、隐藏或拒绝状态与 Loc-RIB;继续追踪下游通告、FIB 或硬件表,以及覆盖各类重要目的地的数据包探针。一个层次成功不能替另一个层次签字。

这条链还需要负面证据。若动作声称只影响一份 UPDATE,就应保留同一邻居上未被该报文承载的对照路由,确认它们没有随之消失;若动作是 AFI/SAFI 停用,则要确认其他地址族仍按预期工作。对照组帮助区分协议动作、同期会话波动和独立的下一跳故障。

时间也必须对齐。原始 PDU、错误日志、RIB 变化、硬件安装和探针结果若来自不同收敛阶段,拼接后会产生一个从未同时存在过的网络状态。调查记录应使用共同时间轴,注明各节点时钟质量和采集延迟。否则正常过程可能被误写成长期分歧,短暂黑洞又可能被平均值抹掉。

完整报文的保留还涉及访问控制。PDU 可能暴露邻居结构和未公开路由,不能因为取证重要就无限制复制。运营者可设定加密保存、最小访问名单、不可变审计和按调查需要保留的期限,同时保存内容哈希。删除期限到达前,应确认发送方修正与内部恢复已经完成;删除后的调查边界也要写进结论。

同样,日志限速必须被视为证据条件。一条日志可能代表连续多个错误,不能从消息条数推断畸形 UPDATE 数量。设备若提供被抑制计数或首末发生时间,应与 PDU 镜像、路由变化交叉核对。没有这些信息时,报告只能确认至少发生一次,而不能虚构频率和暴露规模。

厂商文档只能证明其自身边界

Cisco IOS XR 24.x 的 BGP 文档 展示 TreatAsWithdraw、DiscardAttr 等类别,以及包含邻居、报文长度、属性、地址族和 NLRI 语境的限速日志示例。这证明 IOS XR 文档提供了哪些观测入口,不代表所有平台使用相同字段、频率或默认动作。

Junos 的 BGP Error Messages 文档 描述重置、视同撤销、属性丢弃、隐藏路由和诊断记录,并说明多个错误采用更严重动作。具体默认和 keep 行为属于版本与平台范围,不能从这份说明推广成跨厂商规则。

Nokia SR OS 26.4 BGP 文档update-fault-tolerance 与旧式处理作比较,并说明非关键错误如何采用视同撤销或属性丢弃。配置层次、默认值和受支持错误依产品版本而定。多厂商运营的共同控制面应是规范语义和结果证据,而不是一套看似统一的命令。

评审还应列出每个平台经过全局、组、邻居和地址族继承后的有效配置。阅读模板不能证明最终生效值。升级前后可在隔离环境用受控畸形报文验证动作,但不能把生产邻居当作错误注入试验场。

属性过滤清单应同时记录“为何可舍弃”和“哪些策略引用它”。当新策略开始匹配该属性时,原本安全的 discard 假设可能立即失效,即使过滤配置一字未改。策略依赖也属于变更影响范围。

最后必须由发送方修正源头。接收方的容错动作只能限制损害,不能使畸形属性变正确。干净的替代 UPDATE、稳定的重新通告、恢复后的 RIB/FIB 与数据包结果共同构成关闭条件。若错误持续反复出现,绿色会话只是把未解决的缺陷藏在更好看的可用率数字里。