SPF(最短路径优先)算法在OSPF协议中的实现(图解)

文章将会用画图讲解的方式理解SPF算法在具体OSPF协议中的过程,仔细看看,图解很容易理解的。

首先构造一个经典的拓扑图,图上接口的数字表示数据从此接口发出所消耗的费用,以下将以此为开销的衡量标准讲解。(即从 R 2 访问 R 1 开销为 1 ,R 1 访问 R 2 开销为 2)

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第1张图片

全网运行 OSPF 协议,为了方便讲解,此文章不涉及不同区域的问题;以及路由器之间是怎样建立邻接关系,互相交互什么样的报文等等都不会在此文章涉及,后续的文章中,我会详细讲解 OSPF 协议中更多细节的东西。

以下将直接展示收敛完毕后的链路状态数据库(LSDB),为了容易理解,后续都会以下图的形式展示路由条目
以前两条 LS 记录为例,表示的是 R 1 宣称自己有两个邻居,分别为 R 2 与 R 3 ,开销分别是 2 和 1。其他条目也是相同的意思。

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第2张图片

每个路由器的 LSDB 都是相同的,此时我们以 R 1 为根开始计算 R 1 的最短路树

  • 第一步:将最短 LSDB 中关于根到邻居的 LS 记录添加进临时数据库。(树根的访问成本表示的是此 LS 记录中的邻居到 R 1 的开销值,注意并不是此条 LS 记录的开销值,由于此处是直连所以相等)

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第3张图片

  • 第二步:在临时数据库中选择到树根成本最低的链路,将此记录以及到树根的访问成本驻入树数据库,并且在临时数据库删除相应记录。(由于 R 1 -> R 1 开销一定为 0 ,防止后续计算时出现其他路由器到 R 1 的不同记录,所以树数据库中会存在根到根开销为 0 的记录)

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第4张图片

  • 第三步:路由器检查驻入进树数据库的这条 LS 记录中所连接的邻居路由器的 Router—ID,然后把此路由器生成的 LS 记录添加进临时数据库。(如果此 Router–ID 已经在树数据库记录中,则忽略)
    如图:将 R 1 -> R 3 添加入树数据库,所以在 LSDB 中查找 R 3 对应的 LS 记录并添加进临时数据库;由于树数据库已经存在了 R 1 -> R 1 的记录,所以 R 3 -> R 1 的 LS 记录不再添加(因为它不可能比树数据库中的更优了)
    因为 R 1 -> R 3 开销为 1 , R 3 -> R 5 开销为 2 ,所以树根访问成本为 3 。

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第5张图片

  • 这里开始重复第二步与第三步,直到临时数据库为空。
    如果出现两条最低的树根访问成本 LS 记录,则随便选一条即可。

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第6张图片

接下来的计算基本就是一样的了,我将会一步一步演示完成。

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第7张图片

因为这里已经选出来到 R 5 的最优路径,所以临时数据库中关于 R 3 -> R 5 的 LS 记录就可以删除了。

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第8张图片
SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第9张图片
SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第10张图片
SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第11张图片

到此,临时数据库已空,树数据库也有了根到所有路由器的最优路径,所以最短路径树已经可以宣告计算完成了。

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第12张图片

根据 R 1 最终的树数据库绘制以 R 1 为根节点的最短路径树如图所示,注意树数据库中的开销值为目标路由器到根的开销,所以绘制最短路径树的时候要注意计算。
绘制完成可以与一开始的拓扑进行比对。

SPF(最短路径优先)算法在OSPF协议中的实现(图解)_第13张图片

每个路由器都会计算以自己为根的最短路径树,然后存储在路由表中,转发数据时就会选择最短的路径(最小的开销)去转发。

由于计算时是以根为节点一点一点展开这个最短路径树,并且相同的节点在数数据库中只允许出现一次,所以在最短路径树中是一定不会出现任何环路的。

建议读者学会以后自行计算其他节点的最短路径树,加深记忆!

你可能感兴趣的:(网络协议,算法,路由算法,网络协议,网络通信,ospf)