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本身的内部路由表。因此,
完成上述工作后,往往还要通过路由增强功能与内核路由表交互,从而实现多种
路由协议的学习。