OSPF要求每台运行OSPF的路由器都了解整个网络的链路状态信息,这样才能计算出到达目的地的最优路径。 OSPF的收敛过程由链路状态公告LSA(Link State Advertisement)泛洪开始,LSA中包含了路由器已知的接口IP地址、 掩码、 开销和网络类型等信息。 收到LSA的路由器都可以根据LSA提供的信息建立自己的链路状态数据库LSDB(LinkState Database),并在LSDB的基础上使用SPF算法迚行运算,建立起到达每个网络的最短路径树。 最后,通过最短路径树得出到达目的网络的最优路由,并将其加入到IP路由表中。
OSPF直接运行在IP协议之上,使用IP协议号89
OSPF有五种报文类型,每种报文都使用相同的OSPF报文头。
报文头部
OSPF直接运行在IP协议之上,使用IP协议号89。
建立邻居的过程:
建立邻接关系的过程
Router ID是一个32位的值,它唯一标识了一个自治系统内的路由器,可以为每台运行OSPF的路由器上可以手动配置一个Router ID,或者指定一个IP地址作为Router ID。 如果设备存在多个逻辑接口地址,则路由器使用逻辑接口中最大的IP地址作为Router ID;如果没有配置逻辑接口,则路由器使用物理接口的最大IP地址作为Router ID。
邻居(Neighbor):
OSPF路由器启动后,便会通过OSPF接口向外发送Hello报文用于发现邻居。 收到Hello报文的OSPF路由器会检查报文中所定义的一些参数,如果双方的参数一致,就会彼此形成邻居关系。
邻接(Adjacency):
形成邻居关系的双方不一定都能形成邻接关系,这要根据网络类型而定。只有当双方成功交换DD报文,并能交换LSA之后,才形成真正意义上的邻接关系。
OSPF的邻居収现过程是基于Hello报文来实现的,Hello报文中的重要字段解释如下
OSPF定义了四种网络类型,分别是点到点网络,广播型网络,NBMA网络和点到多点网络。
点到点网络是指只把两台路由器直接相连的网络。 一个运行PPP的64K串行线路就是一个点到点网络的例子。
广播型网络是指支持两台以上路由器,并且具有广播能力的网络。 一个含有三台路由器的以太网就是一个广播型网络的例子。
OSPF可以在不支持广播的多路访问网络上运行,此类网络包括在hubspoke拓扑上运行的帧中继(FR)和异步传输模式(ATM)网络,这些网络的通信依赖于虚电路。 OSPF定义了两种支持多路访问的网络类型:非广播多路访问网络(NBMA) 和点到多点网络(Point To MultiPoints)。
在广播和NBMA网络中为了减少连接的数量,减轻网络负荷通过选举DR/BDR
在邻居収现完成之后,路由器会根据网段类型迚行DR选举。 在广播和NBMA网络上,路由器会根据参不选举的每个接口的优先级迚行DR选举。 优先级取值范围为0-255,值越高越先。 缺省情况下,接口优先级为1。 如果一个接口优先级为0,那么该接口将不会参不DR戒者BDR的选举。 如果优先级相同时,则比较Router ID,值越大越优先被选举为DR。
为了给DR做备份,每个广播和NBMA网络上还要选举一个BDR。 BDR也会与网络上所有的路由器建立邻接关系。为了维护网络上邻接关系的稳定性,如果网络中已经存在DR和BDR,则新添加进该网络的路由器不会成为DR和BDR,不管该路由器的Router Priority是否最大。 如果当前DR发生故障,则当前BDR自动成为新的DR,网络中重新选举BDR;如果当前BDR发生故障,则DR不变,重新选举BDR。 这种选举机制的目的是为了保持邻接关系的稳定,使拓扑结构的改变对邻接关系的影响尽量小。
划分OSPF区域可以减少LSDB规模,节约链路带宽,减轻路由负荷。
每个区域都要维护一个独立的LSDB.
Area 0 骨干区域,为了避免区域间路由环路,非骨干区域之间不允许直接相互发布路由信息。 因此,每个区域都必须连接到骨干区域。
ABR 区域边界路由器,运行在区域之间的路由器,它包含所有相连区域的LSDB。
ASBR 自治系统边界路由器,是指和其他AS中的路由器交换路由信息的路由器,这种路由器会向整个AS通告AS外部路由信息。
OSPF基于接口带宽计算开销,计算公式为:接口开销=带宽参考值÷带宽。 带宽参考值可配置,缺省为100Mbit/s。 以此,一个64kbit/s串口的开销为1562,一个E1接口(2.048Mbit/s)的开销为48。
命令bandwidth-reference可以用来调整带宽参考值,从而可以改变接口开销,带宽参考值越大,开销越准确。还可以通过ospf cost命令来手动为一个接口调整开销,开销值范围是1~65535,缺省值为1。
在配置OSPF时,需要首先使能OSPF进程
命令ospf [process id]用来使能OSPF,在该命令中可以配置迚程ID。
命令ospf [process id] [router-id <router-id>]既可以使能OSPF迚程,还同时可以用于配置Router ID。 在该命令中,router-id代表路由器的ID。
命令network用于指定运行OSPF协议的接口,在该命令中需要指定一个反掩码。 反掩码中,“0” 表示此位必须严格匹配,“1” 表示该地址可以为任意值。