关于OSPF(一)——迪杰斯特拉算法(最短路径算法)

OSPF核心算法

OSPF,英文全称Open Shortest Path First。是中大型园区网乃至数据中心用的最多的IGP。而作为一名网络工程师,在学习该协议的时候,一般从OSPF的网络状态、网络类型、LSA等方面入手。但该协议/技术的核心,我觉得还是迪杰斯特拉/最短路径优先算法。今天,经过我对迪杰斯特拉算法的学习和思考,整理出下列内容,不足之处还请各位大神多多指教。

迪杰斯特拉算法的核心

通过学习,我觉得迪杰斯特拉算法的核心就是:第一、以自身节点为源,寻找该源到达首跳最短路径的节点(路径距离需要是非负值)。第二、根据首跳最短路径节点依次寻找去往其他节点最短路径,并将去往该点的最优路径记录到源节点的最短路径表中。第三、重复执行上述两个步骤,直至源节点到所有节点的最短路径均进行计算。

例子

先来看下面的一张图
在这里插入图片描述
首先,我们以A为节点,计算到达各个节点的最短路径。A则会将每次计算的结果放入如下的表中。

目的节点目的节点距离A的距离该目的节点的上一节点是否最优路径
X

*其中“目的节点”代表目的节点的名称,“目的节点距离A点的距离”则表示A点到该目的节点的距离,而“该目的节点的上一节点”则表示目的节点的倒数第二个节点(例如,A去往F的路径为A->B->C->E->F,那么从A去往F的倒数第二个节点就是E。)

一、当A执行根据迪杰斯特拉算法执行第一次运算时,会以自身A为源,计算到达A的最优路径,因为A到(自己)A为最优,所以A会将相关信息更新到表内,如下所示:

目的节点目的节点距离A的距离该目的节点的上一节点是否最优路径
A0
B
C
D
E
F

二、A以自身为源节点,寻找附近节点,找到附近的节点B和C,距离分别为1和5,因为A点离B点的路径距离比A点到达C点的路径距离更小,数值越小路径越优,所以确定A确认到达B的路径为最优路径。并形成如下表格。

目的节点目的节点距离A的距离该目的节点的上一节点是否最优路径
A0
B1A
C7B
D
E
F

二、A选出第一个节点的最后路径后,A则以B节点源节点,寻找附近节点,找到B节点相邻的节点为C和D(A点已经是最优,默认不进行计算),B到C的距离为2,B到D的距离为7;由此可计算出A经过B到C的最优距离为3,路径是A->B->C,而路径A->C因为距离为7,所以被A从表中进行剔除。A经过B进一步计算到达D的距离,为8,于是A形成如下表格。

目的节点目的节点距离A的距离该目的节点的上一节点是否最优路径
A0
B1A
C3B
D8B
E
F

三、A确定到达C节点的最优路径之后。于是A以C节点源节点,寻找附近节点,找到C节点相邻的节点为B和E(B点已在源A中存在最优路径,不进行计算),C到E的距离为4,所以A经过C到达E节点的路径为9,A将这部分信息记录到下述表格中。

目的节点目的节点距离A的距离该目的节点的上一节点是否最优路径
A0
B1A
C3B
D8B
E7C
F

四、此时目的节点D和E并未确定最优路径。于是选择路径距离较小的D进行SPF计算,D附近的节点为EF(B点已在源A中存在最优路径,不进行计算),D到达E的路径距离为9,所以A经D到达E的路径为A->B->D->E,路径距离为17,劣于A->B->C->E的路径距离。所以A形成如下表项。

目的节点目的节点距离A的距离该目的节点的上一节点是否最优路径
A0
B1A
C3B
D8B
E7C
F

五、确定E的最优路径之后,E附近节点为DF(C点已在源A中存在最优路径,不进行计算)。E到达D的路径距离为9,A经E到达D的距离为16(A->B->C->E->D),劣与A表所记载的A到D的距离(路径为A->B->D);同时,E到达F的路径距离为1,A经过E到达F的路径距离为8。所以A会形成下述表项。

目的节点目的节点距离A的距离该目的节点的上一节点是否最优路径
A0
B1A
C3B
D8B
E7C
F8E

五、确定D的最优路径之后,D附近节点为F(E点已在源A中存在最优路径,不进行计算)。D到达F的路径距离为3,A经D到达F的距离为11(A->B->D->F),劣于A表所记载的A到F的距离9(路径为A->C->E->F)。所以A形成如下表项。

目的节点目的节点距离A的距离该目的节点的上一节点是否最优路径
A0
B1A
C3B
D8B
E7C
F8E

以上是以A为源,运用迪杰斯特拉算法计算A到达各目的节点的最短路径。其他节点的计算方法则不一一进行列举。

本文主要参考了https://www.youtube.com/watch?v=JLARzu7coEs中所提及关于迪杰斯特拉算法的讲解

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
02f,18aug03,agi added #include 02e,02jun03,agi removed #include "rwproto.h" 02d,02jun03,agi changed #include "rwos.h" to include "ospf_rwos.h" 02c,29may03,agi removed unused includes, added new includes 02c,08may03,asr Changes to make OSPF virtual stack compatible 02b,09may03,agi added #include , removed #include 02a,17feb02,ram SPR 81808 Added OSPF memory partition support 21,13october01,kc Dynamic configuration changes. 20,21september01,kc Removed unused raw socket specific declarations. 19,26september00,reshma Added WindRiver CopyRight 18,25september00,reshma RFC-1587 implementation for OSPF NSSA Option, also tested against ANVL. 17,20july00,reshma Unix compatibility related changes. 16,06july00,reshma Removed unnecessary header files and defines. 15,23february00,reshma Changes for ospf mib 14,23december99,reshma Compatibility with VxWorks-IP and VxWorks RTM-interface 13,13august99,jack compilation fixes no IP case 12,05august99,nishit Replaced including IP header files by the new ospf_ip_structures.h 11,17may99,jack Added new include file ospf_patricia_32_bits_key_prototypes.h 10,28december98,jack Compiled and added some comments 09,25november98,rajive Deleted socket include file 08,11november98,jack Config changes, linted and big endian changes 07,30october98,jack Incorporate changes for compilation on Vxworks 06,12february98,release engineer code style changes, feature enhancements, complete CISCO and BAY compaltibility. OSPF v4.2.0 05,10july97,cindy Pre-release v1.52b 04,10february97,cindy Release Version 1.52 03,22october97,cindy Release Version 1.50 02,05june96,cindy Including visnpstr.h as a kludge for the first beta release. 01,05june96,cindy First Beta Release
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值