OSPF协议基础
◉ 链路状态路由协议OSPF
所谓Link State(链路状态)指的就是路由器的接口状态。
路由信息传递与路由计算分离
OSPF作为链路状态路由协议,不直接传递各路由器的路由表,而传递链路状态信息,各路由器基于链路状态信息独立计算路由。
基于SPF算法
所有路由器各自维护一个链路状态数据库。邻居路由器间先同步链路状态数据库,再各自基于SPF(Shortest Path First)算法计算最优路由,从而提高收敛速度。
以“累计链路开销”作为选路参考值
在度量方式上,OSPF将链路带宽作为选路时的参考依据。“累计带宽”是一种要比“累积跳数”更科学的计算方式。
◉ OSPF的工作过程
OSPF的路由计算过程:
- 路由器之间发现并建立邻居关系。
- 每台路由器产生并向邻居泛洪链路状态信息,同时收集来自其他路由器链路状态信息,完成LSDB(Link State Database)的同步。
- 每台路由器基于LSDB通过SPF算法,计算得到一棵以自己为根的SPT(Shortest Path Tree),再以SPT为基础计算去往各目的网络的最优路由,并形成路由表。
OSPF基本工作原理
◉ 邻居建立过程
Router ID
用于在自治系统中唯一标识一台运行OSPF的路由器,每台运行OSPF的路由器都有一个Router ID。
Router ID是一个32位的无符号整数,其格式和IP地址的格式是一样的。
OSPF的路由器Router ID重新配置后,可以通过重置OSPF进程来更新Router ID。
Router ID选举规则:
- 手动配置OSPF路由器的Router ID(通常建议手动配置);
- 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID;
- 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID。
发现并建立邻居 - Hello报文
OSPF路由器之间在交换链路状态信息之前,首先需要彼此建立邻居关系,通过Hello报文实现。
- OSPF协议通过Hello报文可以让互联的路由器间自动发现并建立邻居关系,为后续可达性信息的同步作准备。
- 在形成邻居关系过程中,路由器通过Hello报文完成一些参数的协商。
- 邻居关系建立后,周期性的Hello报文发送还可以实现邻居保持的功能,在一定时间内没有收到邻居的Hello报文,则会中断路由器间的OSPF邻居关系。
Hello报文的作用:
- 邻居发现:自动发现邻居路由器。
- 邻居建立:完成Hello报文中的参数协商,建立邻居关系。
- 邻居保持:通过Keepalive机制,检测邻居运行状态。
OSPF邻居建立过程
状态含义:
- Down:这是邻居的初始状态,表示没有从邻居收到任何信息。
- Init:在此状态下,路由器已经从邻居收到了Hello报文,但是自己的Router ID不在所收到的Hello报文的邻居列表中,表示尚未与邻居建立双向通信关系。
- 2-Way:在此状态下,路由器发现自己的Router ID存在于收到的Hello报文的邻居列表中,已确认可以双向通信。
邻居建立过程:
- RTA和RTB的Router ID分别为1.1.1.1和2.2.2.2。当RTA启动OSPF后,RTA会发送第一个Hello报文。此报文中邻居列表为空,此时状态为Down,RTB收到RTA的这个Hello报文,状态置为Init。
- RTB发送Hello报文,此报文中邻居列表为空,RTA收到RTB的Hello报文,状态置为Init。
- RTB向RTA发送邻居列表为1.1.1.1的Hello报文,RTA在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
- RTA向RTB发送邻居列表为2.2.2.2的Hello报文,RTB在收到的Hello报文邻居列表中发现自己的Router ID,状态置为2-way。
因为邻居都是未知的,所以Hello报文的目的IP地址不是某个特定的单播地址。邻