一般的路由协议如RIP、IGRP、BGP等是距离向量协议,OSPF和ISIS是数据链路状态协议。 矢量路由器只知道自身和与自身连接的接口的路径信息,矢量图只是一个方向图,在路径传播的过程中容易形成环路。 RIP路由器采用扁平化设计避免环路,BGP通过As-path避免环路。 OSPF是一种数据链路状态路由协议,采用SPF算法或最小生成树算法(Dijkstar )。 OSPF中不存在路由组,但是在OSPF之间传递路由信息时,它是矢量路由协议。 这意味着在OSPF之间传递路由信息时会发生路由组。
Dijkstar算法:
1、算法目的:
在无向图g=(v,e )中,设各边E[i]的长度为w[i],找出从顶点V0到其余各点的最短路径。 (单源最短路径) )。
2、算法说明:
算法思想: g=(v, e )作为加权有向图,将图表中的顶点集合v分为两组,第一组是已经求出最短路径的顶点集合(用s表示的话,初期s只有一个源点,以后每次求出最短路径时被追加到集合s中,所有的顶点都追加到s中在添加第二个组时,其馀的最短路径是不确定的顶点集合,从源点到s的每个顶点的最短路径的长度将保持不大于从源点到u的任何顶点的最短路径的长度。 另外,各顶点与一个距离相对应,s中顶点的距离为从v到此顶点的最短路径长度,u中顶点的距离为从v到此顶点只将s中顶点作为中间顶点的当前最短路径长度。
3、算法步骤:
a .初始时,s只包含源点。 即,S={v},v的距离为0。 u包括除v外的其他顶点,即:U={剩下的顶点},如果v与u中的顶点u有边,则u、v为正常的权利值,如果u不是v的两边相邻点,则u、v的权利值为。
从b.u中选择距离v最小的一个顶点k,将k加到s中。 该选择的距离为从v到k的最短路径长度。
作为新考虑C.K的中间点,修正u中的各顶点的距离,在从源点v到顶点u的距离(通过顶点k )比原来的距离)不通过顶点k )短的情况下,修正到顶点u的距离值,对修正后的距离值到顶点k的距离加上边缘上的权重。
d .重复步骤b和c,直到所有顶点都包含在s中。
4、算法示例:
使用Dijkstra算法找出以a为起点的单源最短路径的步骤如下
也就是说,a已经是根节点,遍历树的结果是s=A、c、b、d、e、f