Skip to content

方法Method

链路状态路由与混合版本转发

Link-state routing · 链路状态协议 · 链路状态数据库

分别维护按来源版本更新的链路状态数据库与由其计算的下一跳,复算旧通告拒收、故障后暂态转发环,以及共同拓扑稳定后的无环条件。

路由器也可以不转述“我到目的有多远”,而是告诉全网“我直接连着谁,成本是多少”。每台路由器收集这些局部事实,拼出一张图,再自己求最短路。难点因此分成两部分:传播哪一版事实,以及何时根据本地图更新转发表。

形式陈述 ​

一份来源明确、可比较版本的通告 ​

沿用IP转发接口,本页最终仍需为每个可达目的选出出口与IP下一跳。教学图由有限路由器和正成本点到点链路组成,链路对称;不含多区域、广播网络指定路由器或外部路由汇总。

每个来源 u 发布自己的链路状态通告 (u,s,Lu):s 是该来源严格递增的版本号,Lu 是完整的当前邻接/成本列表,不是只有新增边的差量。来源不冒名,版本号在本模型中不回绕且跨重启不倒退。路由器 r 的LSDB按来源保存它已接受的最新通告。

收到同一来源的通告时,只在版本更大或没有旧记录时替换;同版本重复不改变数据库;更小版本不覆盖新记录。接受的新通告向其他邻居继续传播。为了让这条规则在丢包网络上最终送达,还须有确认、重传或可靠的重复交换;“第一次发过一次”本身不构成交付保证。

本例将一条无向边纳入图的条件定义为:两端当前记录均列出对方,且给出相同正成本。这样,一端发布删除即可使这条边从本地计算图消失;孤立的一侧旧通告不能单独复活它。真实OSPF使用有向链路描述及相应双向连接检查,不能把本例的数据格式当成OSPF报文格式。

由本地图计算本地转发表 ​

LSDB发生影响拓扑的改变后,可用Dijkstra算法从本路由器出发求距离,取每条选定最短路径的第一跳生成转发表。最短路算法处理的是这一刻输入的图;它不会替协议判断别的路由器是否已经收到同一版通告。

因此要区分至少三种状态:收到或在途的通告、本地已接受的LSDB、本地已经安装的转发表。实现可能合并多次更新后重算,也可能先算完再安装;本页事件在每次指定的接受之后立即完成本地重算,以便逐步核算。

直觉

同一来源能排序,不同来源没有天然共同快照 ​

“来源R2的12比11新”是局部可检查的版本关系。R2的12与R3的8却没有统一大小关系;它们可能描述不同时间观察到的拓扑。一张LSDB往往是许多来源版本的组合,不是全网共同提交的某一瞬间。

对每个来源保留最大版本,有助于处理重复与乱序,却不能强迫各路由器同时切换转发表。链路状态路由因此可以在稳定后正确,同时在传播期间出现短暂环或丢包。

共同距离函数才能阻止稳定转发环 ​

假设各处都采用同一张固定正成本图,且对目的 x 安装一致最短距离所对应的下一跳。若 u 把包交给 v,则

d(u,x)=c(u,v)+d(v,x)>d(v,x).

沿每一跳共同距离严格下降,不可能回到原点。平局选不同最短路径仍满足该式;但如果 u 和 v 使用不同图,就没有一个共同的 d 可供整条转发轨迹比较。

例子与边界

一次断线产生两张都“算对了”的本地图 ​

R1—R2成本1,R2—R3成本1,R1—R3成本4,以R3为目的。初始各处LSDB相同:R1选R2、成本2;R2直达R3、成本1。

现在R2—R3断开。R2发布自身版本12,列表只剩R1;它原来的版本11曾列出R1与R3。R2立即采用自己的12并重算;R1暂时仍保存R2的11。其余通告暂不改变,按双端列出才存在边的规则,得到:

路由器 本地R2版本 本地图是否有R2—R3 到R3的下一跳/成本
R1 11 有 R2 / 2
R2 12 无 R1 / 5

R2的5来自R2→R1→R3,成本 1+4,在它的新图里完全正确。R1的2来自R1→R2→R3,在旧图里也完全正确。但真正的数据包在R1、R2之间往返,因为下一跳决定取自不同图。

两次局部最短路正确,不能代替共同版本

到达顺序比消息名称重要 ​

随后R1收到R2的12,替换旧记录,删除计算图中的R2—R3,改为直达R3、成本4。R2继续经R1、成本5,转发路径恢复为R2→R1→R3。此后迟到的版本11被拒绝,不能把已撤销链路重新添回。

这个例子不要求R3的新版已经到达R1,因为R2这一端的删除足以让双端条件失败。若后来R3也发布撤销,它应作为另一个来源的独立版本处理,不能拿R3的版本号和R2的12比较大小。

序号回退会破坏“更大才新”的前提 ​

若R2重启后从1重新计数,而其他节点仍记着12,它的新事实会被拒绝。若计数器达到最大值后直接回零,也有同一问题。本文通过不回绕、跨重启不倒退排除它们;真实OSPF则结合序号空间、刷新、老化和清除规则处理,不能仅照搬一行整数比较。

RFC2328中,一份LSA由类型、Link State ID及Advertising Router共同标识;新旧比较还包括序号、校验和与年龄,同序号不总意味着同一实例。本文按来源单记录的模型,只保留理解乱序所需的骨架。

收敛条件必须包含故障后的可达性 ​

若拓扑最终固定,幸存控制链路连通,来源的最终版本能通过可靠交换抵达每个节点,且各节点最终完成重算安装,则大家最终得到相同图和相应转发表。分区时只能在各分量内讨论此结论;孤立节点不能靠无限等待获得另一分量的新事实。

推论与应用

数据库一致和转发表一致是两道检查 ​

即使两个路由器已经保存同一组LSA,一个可能尚未完成重算或安装,所以检查LSDB相同还不够。反过来,两份LSDB不同也可能恰好生成同一目的的相同下一跳,不能只看版本差异就宣称必有环。

在图有 n 个顶点、m 条边时,选用合适堆实现的Dijkstra成本按旧算法页的模型计算;这是一次本地计算的成本。泛洪消息量、重传、通告批处理与转发表安装是另外的工作,不能一并塞进最短路的时间界。

距离向量的坏消息示例提醒我们检查转述的依赖;这里的混合LSDB例提醒我们检查本地图的版本组合。二者都需要把控制消息轨迹与实际包的下一跳轨迹分别列出。

参考资料
  • John Moy,1998,RFC2328:OSPF Version 2,§12.1.6序号,§13泛洪,§13.1实例新旧比较,§16.1区域内最短路与双向连接检查。本文三节点混合版本例与简化记录格式独立构造
  • Larry L. Peterson、Bruce S. Davie,Computer Networks: A Systems Approach,§3.4 Routing,Link State:传播局部连接状态与本地计算的分工
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具