OSPF(Open Shortest Path First,开放式最短路径优先)是IETF组织开发的一个基于链路状态的内部网关协议。作为链路状态路由协议,OSPF不直接传递各路由器的路由表,而传递链路状态信息,各路由器基于链路状态信息独立计算路由。
所谓链路状态(Link State)指的就是路由器的接口状态。链路信息主要包括:链路的类型、接口IP地址及掩码、链路上所连接的邻居路由器和链路的带宽(开销)。
Router ID
Router ID是设备通过指定的动态路由协议进行路由交互过程中,唯一标识自身的32位整数。Router ID的格式和IP地址的格式是一样的。如下图所示,每个运行OSPF的路由器都有一个Router ID用于标识自身路由器。
Router ID有手动配置和设备自动选取两种选取方式。在实际网络部署中,考虑到协议的稳定性,建议手工配置Loopback接口的IP地址作为Router ID。
手动配置
-
如果指定动态路由协议配置了Router ID,则以该协议自身的配置为准。
-
如果指定动态路由协议没有配置Router ID,且设备配置了全局Router ID,则以全局Router ID为准。
设备自动选取
如果管理员没有手动配置Router ID,设备会从当前接口的IP地址中自动选取一个作为全局Router ID。其选择顺序如下:
-
如果存在配置了IP地址的Loopback接口,则选择Loopback接口地址中最大的作为全局Router ID。
-
如果设备上不存在Loopback接口或者存在Loopback接口但没有配置IP地址,则从其他接口的IP地址中选择最大的作为全局Router ID(不考虑接口的UP/DOWN状态)。
Router ID的重新选取
OSPF在以下3种情况会进行Router ID的重新选取:
-
通过命令ospf router-id router-id重新配置OSPF的Router ID,并且重新启动OSPF进程。
-
重新配置全局Router ID,并且重新启动OSPF进程。
-
原来被选举为全局Router ID的IP地址被删除并且重新启动OSPF进程。
OSPF的路由计算
在OSPF网络中,每台路由器根据自己周围的网络拓扑结构生成链路状态通告LSA(Link State Advertisement),并通过更新报文将LSA发送给网络中的其它路由器。
每台路由器都会收集其它路由器发来的LSA,所有的LSA放在一起便组成了链路状态数据库LSDB(Link State DataBase)。路由器将LSDB转换成一张带权的有向图,这张图便是对整个网络拓扑结构的真实反映。在网络拓扑稳定的情况下,各个路由器得到的有向图是完全相同的。
每台路由器根据有向图,使用SPF算法计算出一棵以自己为根的最短路径树,这棵树给出了到自治系统中各节点的路由。
OSPF运行机制
OSPF的运行机制包括以下5个步骤:
-
通过交互Hello报文形成邻居关系
路由器运行OSPF协议后,会从所有启动OSPF协议的接口上发送Hello报文。如果两台路由器共享一条公共数据链路,并且能够成功协商各自Hello报文中所指定的某些参数,就能形成邻居关系。
-
通过泛洪LSA通告链路状态信息
形成邻居关系的路由器之间进一步交互LSA形成邻接关系,如下图所示。每台路由器根据自己周围的网络拓扑结构生成LSAÿ