Dijkstra算法

  • 格式:pdf
  • 大小:211.08 KB
  • 文档页数:2

Dijkstra算法

SPF算法是OSPF路由协议的基础。SPF算法有时也被称为Dijkstra算法,

这是因为最短路径优先算法SPF是Dijkstra发明的。SPF算法将每一个路由器

作为根(ROOT)来计算其到每一个目的地路由器的距离,每一个路由器根据一个

统一的数据库会计算出路由域的拓扑结构图,该结构图类似于一棵树,在SPF

算法中,被称为最短路径树。在OSPF路由协议中,最短路径树的树干长度,即

OSPF路由器至每一个目的地路由器的距离,称为OSPF的Cost,其算法为: Cost =100106()WebBM

在这里,链路带宽以bps来表示。也就是说,OSPF的Cost 与链路的带宽成

反比,带宽越高,Cost越小,表示OSPF到目的地的距离越近。举例来说,FDDI

或快速以太网的Cost为1,2M串行链路的Cost为48,10M以太网的Cost为10

等。

Dijkstra算法是路由表计算的依据,通过Dijkstra算法可以得到有关网络

结点的最短路径树,然后由最短路径优先树得到路由表。

4.4.1 Dijkstra算法具体描述

1、初始化集合E,使之只包含源结点S,并初始化集合R,使之包含所有其

它结点。初始化路径列O,使其包含一段从S起始的路径。这些路径的长度值等

于相应链路的量度值,并以递增顺序排列列表O。

2、若列表O为空,或者O中第1个路径长度为无穷大,则将R中所有剩余

结点标注为不可达,并终止算法。

3、首先寻找列表O中的最短路径P,从O中删除P。设V为P的最终结点。

若V已在集合E中,继续执行步骤2。否则,P为通往V的最短路径。将V从R移至E。

4、建立一个与P相连并从V开始的所有链路构成的侯选路径集合。这些路

径的长度是P的长度加上与P相连的长度。将这些新的链路插入有序表O中,

并放置在其长度所对应的等级上,继续执行步骤2。

4.4.2 Dijkstra算法举例 下面我们以路由器A为例,来说明最短路径树的建立过程:

1、路由器A找到了路由器B、C,将它们列入候选列表{B:1;C:2}。

2、从候选列表中找出最小代价项B,将B加入最短路径树并从候选列表中

删除。接着从B开始寻找,找到了D,将其放入候选列表{C:2;D:2}。

3、从列表中找出C,再由C又找到了D。但此时D的代价为4,所以不再加

入候选列表。最后将D加入到最短路径树。此时候选列表为空,完成了最短路径

树的计算。

4.4.3 OSPF路由表的计算与实现

有关路由表的计算是OSPF的核心内容,它是动态生成路由器内核路由表的

基础。在路由表条目中,应包括有目标地址、目标地址类型、链路的代价、链路

的存活时间、链路的类型以及下一跳等内容。关于整个计算的过程,主要由以下

五个步骤来完成:

1、保存当前路由表,当前存在的路由表为无效的,必须从头开始重新建立

路由表。

2、域内路由的计算,通过Dijkstra算法建立最短路径树,从而计算域内路

由。

3、域间路由的计算,通过检查Summary-LSA来计算域间路由,若该路由

器连到多个域,则只检查主干域的Summary-LSA。

4、查看Summary-LSA:在连到一个或多个传输域的域边界路由器中,通过

检查该域内的Summary-LSA来检查是否有比第2、3步更好的路径。

5、AS外部路由的计算,通过查看AS-External-LSA来计算目的地在AS外

的路由。

通过执行以上步骤,OSPF生成路由表。但这里的路由表还不同于路由器中

实现路由转发功能时用到的内核路由表,它只是OSPF本身的内部路由表。因此,

完成上述工作后,往往还要通过路由增强功能与内核路由表交互,从而实现多种

路由协议的学习。