摘要

  • RFC 2174 在一个小型 MAPOS 交换机群中,把距离向量单播路由与一棵以虚拟源交换机为根的广播/组播生成树结合起来。
  • MAPOS 帧既没有源地址,也没有 TTL;拓扑变化时若形成临时环路,帧无法说明真实来路,也无法靠计数自行消亡。
  • 因此,路由项、VSS、低于 16 的度量和已标记的位图都只是本地控制面状态,不是立即安全转发或最终交付的证明。

沉默不是“什么也没发生”

很多网络界面把路由呈现为一个布尔值:存在或不存在。RFC 2174 描述的过程更细。交换机收到更新,比较度量,写入下一跳;若新路径通向编号最小的可达交换机,还会把它选作 Virtual Source Switch。此时,广播树的结构已经开始形成,但广播转发仍可能被禁止。

对新发现的下游端口,FORWARD_DELAY_TIMER 默认持续三十秒,也就是三个十秒的完整更新周期。端口关系可以被记录,位图可以进入构造过程,真正的广播与组播帧却必须等到计时结束后才能通过。

这不是保守的实现细节,而是对帧格式局限的回应。MAPOS HDLC 帧只有目的地址,没有源地址。交换机无法针对每个真实发送者做反向路径判断。它也没有 TTL;一旦两个尚未收敛的交换机让帧进入环路,帧里没有任何字段保证环路最终停止。

所以 SSP 把“等待”变成了积极的安全动作:先让控制信息传播,再允许无法自我限时的广播流量进入新树。

用一棵虚拟树替代真实来源

为弥补源地址缺失,RFC 2174 引入 Virtual Reverse Path Broadcast。协议假定所有广播和组播都来自同一个虚拟根下面,这个根就是 VSS——当前可达路由中交换机编号最小者。

每台交换机独立查看自己的单播路由表,找出 VSS,并计算朝向它的最短反向路径。非根交换机有一个上游端口,也可以有若干下游端口;VSS 本身没有上游。整个 MAPOS 网段在同一时刻只使用一棵这样的树。

这种规则简洁,却不等于举行了一次全网选举。所有设备使用同一判断方法,不代表它们在同一瞬间拥有同一份路由表。拓扑变化期间,一台设备可能已经看见新的最小编号,另一台仍保留旧路径。VSS 是基于本地视图得出的控制决定,不是全体交换机同步签署的共识凭证。

这也是为什么发现新 VSS 或失去旧 VSS 会使整个广播/组播表失效;单个下游变化的影响则较窄。根变化触及树的解释基础,下游变化只触及部分枝条。

一个比特能指路,不能作收据

广播/组播表是一张端口位图。某一位为一,表示帧应当经该端口送往本地节点、上游或下游交换机;如果没有任何位被标记,帧会被静默丢弃。

位图压缩了转发计划,却没有记录结果。一个“一”不能说明光路真的发出了信号、邻居收到了帧、邻居使用相同的树,或终端应用接纳了数据。即使位已经出现,forward delay 期间也仍然没有转发许可。

不同观察会产生不同的位。NSP 地址请求让本地交换机推断节点已接入。通往 VSS 的下一跳决定上游。某端口收到 poisoned reverse,则让交换机推断其后存在以自己为上游的下游交换机。

新下游出现时,forward delay 控制何时可用;另一个默认三十秒的 PORT_EXPIRATION_TIMER 控制这段关系还能保持多久。后续 poisoned reverse 会刷新端口计时;若更新停止,位会被清除。若原下游改发普通更新,说明它换了最佳路径或 VSS,位应立即清除。

因此,同一个比特可能经历候选、等待、启用、刷新、失效和清除。只保存最终的零或一,会把协议最有价值的时间语义删掉。

四种时钟,四种不同的断言

单播一侧默认每十秒发送完整路由表。收到的度量加上链路开销,通常为一;更小的度量胜出。端口故障、路由不可达或度量上升会触发即时更新,而不必等待下一个周期。

但“触发更新已发送”不等于“全网收敛”。RFC 1058 对 RIP 的分析已经说明,距离向量会保留陈旧信念,甚至出现向无穷计数。poisoned reverse 和 triggered update 能缩短问题,却不能制造原子提交。

RFC 2174 的路由项在三十秒不刷新后过期,或在收到度量 16 时被标为不可达。随后它还会保留三十秒,以便继续把度量 16 传给邻居,之后才被垃圾回收。广播侧另有 forward delay 与端口过期时钟。

这些超时不能混为一谈。路由过期说的是本地信念已老化;垃圾回收说的是失效信息仍需保留以便传播;forward delay 说的是新关系尚无转发权限;端口过期说的是维持下游判断的证据不再到达。

还能听见更新,也可能发不出去

实现章节给出了一个特别重要的限制:半连接。端口的接收方向可能正常,发送方向却已故障。交换机仍能收到 SSP 更新,路由和计时器看起来都很新,自己的数据却进入黑洞。

SONET/SDH 的远端错误反馈有时能帮助判断发送通道,但 RFC 也指出,一些服务不保留所需的路径开销透明度。于是,收到更新最多证明某些控制信息沿一个方向到达,不能证明反向数据通道可用,更不能证明终端交付。

RFC 2174 是 Informational 文档,不是 IETF 工作组成果,也不属于 Standards Track。它假定网段内交换机数量较少,没有提供部署普及率、实测收敛时间、互通率或真实广播风暴记录;安全问题也没有讨论。

它留下的历史价值,正是对证据边界的清晰处理:交换机可以知道一条路径、选择一棵树、记录一个端口,同时仍然正确地拒绝发送。沉默不是缺少状态,而是状态还没有成熟为行动。

来源

  1. RFC 1058 — Routing Information Protocol
  2. RFC 2171 — MAPOS Version 1
  3. RFC 2173 — Node Switch Protocol
  4. RFC 2174 — Switch-Switch Protocol
  5. RFC 2176 — IPv4 over MAPOS Version 1