SPF算法介绍

简介:

当链路状态路由算法构建完LSDB后,接下来节要调用SPF算法,对LSDB内的LSA进行处理,计算出所有路径。SPF算法在《Routing TCP/IP volmun I》的OSPF章节中有描述。

SPF算法简单描述如下(LSDB已收敛):

一、选定根节点;

二、遍历该选定节点的所有直连节点。遍历过程中,若根与某节点的分支为

新分支,则添加该分支到分支列表,并记录分支的权重、根的下一跳;

已存在于分支列表,则与分支列表中已存在分支的权重值比较优劣,并把较优值更新到分支列表中;

已存在于权重列表,则忽略;

三、分支列表中的最优分支移出至权重列表,并选定该分支的节点;

四、分支列表非空,则继续步骤三;否则算法结束。

算法结束后,权重列表即为最短路径树,用于生成路由表或其它后续工作。

下面举个简单例子,箭头方向为节点配置链路权重(metric),注意权重是单向的,修改权重一般情况下要确保两端一致。a为运行SPF算法的节点,LSDB已收敛:

*下述显示含义为节点(下一跳权重

一、SPF把a、b、c、d、e、f、g、h置为未遍历状态,并以本节点(R1)为根。添加a(a)到权重列表,权重为0,下一跳为a。接着遍历a的直连节点b、c、d,并把b(b) 50,c(c) 85,d(d) 20添加到分支列表。其中d(d)的权重最优,为20。添加d(d)到权重列表,权重为20,下一跳为d,并选定d;

二、遍历d所有连接的节点。这里d-b 20,d-c 20,d-g 20,d-h 20。分支列表中b(b)从50改为40,下一跳改为d;c(c)从85改为40,下一跳改为d;添加g(d) 40,h(d) 40。这时分支列表包含:b(d) 40,c(d) 40,g(d) 40,h(d) 40。添加b(d)到权重列表,权重为40,下一跳为d,并选定b;

三、遍历b所有连接的节点。这里分支为b-e 80,b-d 20,由于d已以被添加到权重列表,不再考虑。分支列表中添加e(d) 120。这时分支列表包含:c(d) 40,g(d) 40,h(d) 40,e(d) 120。添加c(d)到权重列表,权重为40,下一跳为d,并选定c;

四、遍历c。这里分支为c-f 20,c-d 20,由于d已被添加到权重列表,不再考虑。分支列表添加f(d) 60。这时分支列表包含:g(d) 40,h(d) 40,e(d) 120,f(d) 60。添加g(d) 到权重列表,权重为40,下一跳为d,并选定g;

五、遍历g。g分支为g-e 20,g-h 50。分支列表修改e(d) 60。这时分支列表包含:h(d) 40,e(d) 60,f(d) 60。添加h(d)到权重列表,权重为40,下一跳为d,并选定h;

六、遍历h。h分支为h-g 50,h-f 20。g已被添加到权重列表,不考虑;而a-d-c-f和a-d-h-f同为60,下一跳同为d,该新分支与分支列表中的分支并无差异。这时分支列表包含:e(d) 60,f(d) 60。添加e(d)到权重列表,权重为60,下一跳为d,并选定e;

七、遍历e。分支为e-b 80,e-g 20,由于b、g已在权重列表分支列表无需改变,为f(d) 60。添加f(d)到权重列表,权重为60,下一跳为d。

八、由于分支列表为空,因此SPF算法结束。这时权重列表为:

节点

a

d

b

c

g

e

f

权重

a

d

d

d

d

d

d

下一跳

0

20

40

40

40

60

60





本文转自 gole_huang 51CTO博客,原文链接:http://blog.51cto.com/golehuang/920865

相关文章
|
算法 调度
操作系统 FCFS,SPF,HRRN算法的实现
操作系统 FCFS,SPF,HRRN算法的实现
414 0
操作系统 FCFS,SPF,HRRN算法的实现
|
存储 机器学习/深度学习 算法
SPF单源最短路径算法
SPF(shortest path first)算法也叫Dijkstra(迪杰斯特拉)算法,由上个世纪的计算机科学家狄克斯特拉提出,是离散数学中一种经典高效的网络(连通图)最短路径寻路算法.指定一个源点,求出到其余各个顶点的最短路径,也叫”单源最短路径”.
492 1
SPF单源最短路径算法
|
算法 定位技术 C语言
|
24天前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。