使用的算法:
Dijkstra最短路径算法:
一个(V,E)的有向联通图,求从V0到其他各个节点的最短路径:“单源最短路径”
基本思想是:设计一种最短路径树的构造方法,按非降次序构造从V0到各个节点的最短路径,第一步找到和V0相距最短的节点以及到这个节点的最短路径;第二步是找到和V0次短的节点以及到这个节点的最短路径。如此反复。
和V0相距最短的节点在和V0直接相邻的节点中;
和V0相距次短的节点要么在V0直接相邻的节点中,要么在和这鞋相邻节点相邻的节点中。
节点分成2个集合:
A:已经选入最短路径树的节点的集合
B:剩余的其他节点的集合
对于路径,分成三个集合:
I, 已经选入最短路径树的集合
II, 候选路径集合:下一条加入最短路径树的路径将从这个集合中选入
III, 剩下的其他路径集合(被废弃的路径或还没考虑的路径)
初始情况:
I :初始值为空
II: 和V0直接相连的边所代表的路径中产生
递归构造:
第一步:从集合II中选一条最短路径,放入最短路径树,这条路径的终点对应的节点(记为X)从集合B移入集合A
第二步:考虑从X发出的边的终点,考虑其中不属于A 的节点,记为Y,计算从V0出发经X到达Y的路径值。如果集合II中没有到Y的路径,则把这条V0X-Y这条路径放入集合II,如果有,则比较,把小的放入集合II
重复I 和II,直到B为空
OSPF 使用链路状态通告(LSA)来描述网络拓扑,这为计算最短路径提供了数据的可能性
OSPF的目标是为较大的内部网络提供动态路由的能力,如果内部网络较大,会浪费很多内存和CPU资源,所以把网络划分为多个Area,每个area内部使用Router LSA和Network LSA把area内部网络描述清楚,并计算出内部area的最短路径树和路由。
Area外的网络拓扑,区域边界路由器ABR把自己在相邻area范围内计算得到的该area内各网段的路由汇总,把这些网段当作直接连接在自己上面,并生成Network Summary LSA来对这鞋网段进行描述,传入本area。对于一个有n个网段和多台路由器的相邻area,ABR只需要生成N条网络描述信息并传入本area,减少存储,传播,和计算消耗。
主干区域的标识符规定为0.0.0.0,用于连通下层区域,ABR是主干路由器
直接使用IP报文传输OSPF报文
OSPF使用洪泛法更新链路状态,即把报文传给相邻的路由器,相邻的路由器再传给它相邻的路由器。
且没有坏消息传的慢的缺点。
以下转载:
OSPF是一种典型的链路状态路由协议。采用OSPF的路由器彼此交换并保存整个网络的链路信息,从而掌握全网的拓扑结构,独立计算路由。因为RIP路由协议不能服务于大型网络,所以,IETF的IGP工作组特别开发出链路状态协议——OSPF。目前广为使用的是OSPF第二版,最新标准为RFC2328。
OSPF作为一种内部 网关 协议(Interior Gateway Protocol,IGP),用于在同一个自治域(AS)中的路由器之间发布路由信息。区别于距离矢量协议(RIP),OSPF具有支持大型网络、路由收敛快、占用网络资源少等优点,在目前应用的路由协议中占有相当重要的地位。基本概念和术语
1. 链路状态
OSPF路由器收集其所在网络区域上各路由器的连接状态信息,即链路状态信息(Link-State),生成链路状态数据库(Link-State Database)。路由器掌握了该区域上所有路由器的链路状态信息,也就等于了解了整个网络的拓扑状况。OSPF路由器利用“最短路径优先算法(Shortest Path First, SPF)”,独立地计算出到达任意目的地的路由。
2. 区域
OSPF协议引入“分层路由”的概念,将网络分割成一个“主干”连接的一组相互独立的部分,这些相互独立的部分被称为“区域” (Area),“主干”的部分称为“主干区域”。每个区域就如同一个独立的网络,该区域的OSPF路由器只保存该区域的链路状态。每个路由器的链路状态数据库都可以保持合理的大小,路由计算的时间、报文数量都不会过大。
3. OSPF网络类型
根据路由器所连接的物理网络不同,OSPF将网络划分为四种类型:广播多路访问型(Broadcast MultiAccess)、非广播多路访问型(None Broadcast MultiAccess,NBMA)、点到点型(Point-to-Point)、点到多点型(Point-to-MultiPoint)。
广播多路访问型网络如:Ethernet、Token Ring、FDDI。NBMA型网络如:Frame Relay、X.25、SMDS。Point-to-Point型网络如:PPP、HDLC。具体结构如后图所示。

4. 指派路由器(DR)和备份指派路由器(BDR)
在多路访问网络上可能存在多个路由器,为了避免路由器之间建立完全相邻关系而引起的大量开销,OSPF要求在区域中选举一个DR。每个路由器都与之建立完全相邻关系。DR负责收集所有的链路状态信息,并发布给其他路由器。选举DR的同时也选举出一个BDR,在DR失效的时候,BDR担负起DR的职责。
点对点型网络不需要DR,因为只存在两个节点,彼此间完全相邻。 协议组成 OSPF协议由Hello协议、交换协议、扩散协议组成。本文仅介绍Hello协议,其他两个协议可参考RFC2328中的具体描述。
当路由器开启一个端口的OSPF路由时,将会从这个端口发出一个Hello报文,以后它也将以一定的间隔周期性地发送Hello报文。OSPF路由器用Hello报文来初始化新的相邻关系以及确认相邻的路由器邻居之间的 通信 状态。
对广播型网络和非广播型多路访问网络,路由器使用Hello协议选举出一个DR。在广播型网络里,Hello报文使用多播地址224.0.0.5周期性广播,并通过这个过程自动发现路由器邻居。在NBMA网络中,DR负责向其他路由器逐一发送Hello报文。
协议操作
第一步:建立路由器的邻接关系
所谓“邻接关系”(Adjacency)是指OSPF路由器以交换路由信息为目的,在所选择的相邻路由器之间建立的一种关系。 路由器首先发送拥有自身ID信息(Loopback端口或最大的 IP地址)的Hello报文。与之相邻的路由器如果收到这个Hello报文,就将这个报文内的ID信息加入到自己的Hello报文内。
如果路由器的某端口收到从其他路由器发送的含有自身ID信息的Hello报文,则它根据该端口所在网络类型确定是否可以建立邻接关系。
在点对点网络中,路由器将直接和对端路由器建立起邻接关系,并且该路由器将直接进入到第三步操作:发现其他路由器。若为MultiAccess 网络, 该路由器将进入选举步骤。
第二步:选举DR/BDR
不同类型的网络选举DR和BDR的方式不同。
MultiAccess网络支持多个路由器,在这种状况下, OSPF需要建立起作为链路状态和LSA更新的中心节点。选举利用Hello报文内的ID和优先权(Priority)字段值来确定。优先权字段值大小从0到255,优先权值最高的路由器成为DR。如果优先权值大小一样,则ID值最高的路由器选举为DR, 优先权值次高的路由器选举为BDR。优先权值和ID值都可以直接设置。
第三步:发现路由器
在这个步骤中,路由器与路由器之间首先利用Hello报文的ID信息确认主从关系,然后主从路由器相互交换部分链路状态信息。每个路由器对信息进行分析比较,如果收到的信息有新的内容,路由器将要求对方发送完整的链路状态信息。这个状态完成后,路由器之间建立完全相邻(Full Adjacency)关系,同时邻接路由器拥有自己独立的、完整的链路状态数据库。
在MultiAccess网络内,DR与BDR互换信息,并同时与本子网内其他路由器交换链路状态信息。
在Point-to-Point 或 Point-to-MultiPoint网络中,相邻路由器之间互换链路状态信息。
第四步: 选择适当的路由器
当一个路由器拥有完整独立的链路状态数据库后,它将采用SPF算法计算并创建路由表。OSPF路由器依据链路状态数据库的内容,独立地用SPF算法计算出到每一个目的网络的路径,并将路径存入路由表中。
OSPF 利用量度(Cost)计算目的路径,Cost最小者即为最短路径。在配置OSPF路由器时可根据实际情况,如链路带宽、时延或经济上的费用设置链路Cost大小。Cost越小,则该链路被选为路由的可能性越大。
第五步:维护路由信息
当链路状态发生变化时,OSPF通过Flooding 过程通告网络上其他路由器。OSPF路由器接收到包含有新信息的链路状态更新报文,将更新自己的链路状态数据库,然后用SPF算法重新计算路由表。在重新计算过程中,路由器继续使用旧路由表,直到SPF完成新的路由表计算。新的链路状态信息将发送给其他路由器。值得注意的是,即使链路状态没有发生改变,OSPF路由信息也会自动更新,默认时间为30分钟。