OSPF(Open Shortest Path First,开放最短路径优先)是一个内部网关协议(IGP),用于在单一自治系统(AS)内计算并传播路由信息。它通过五种不同类型的协议报文来维护其链路状态数据库,并确保所有参与路由器具有相同的网络拓扑视图。以下是OSPF的五种报文及其功能:
-
Hello报文(Type 1)
- Hello报文用于发现和维持邻接关系,即在OSPF路由器之间的点对点或多点接口上定期广播或发送。
- 它包含了如发送路由器的身份(Router ID)、区域ID、邻居列表、指定路由器(DR, Designated Router)和备份指定路由器(BDR, Backup Designated Router)的信息,以及一些定时器设置。
-
数据库描述报文(Type 2)
- 在建立邻接关系的过程中,DD报文用于交换完整的或者部分的链路状态数据库摘要信息。
- 这些报文用于 OSPF 的数据库同步过程,即邻接路由器间相互告知它们所拥有的链路状态通告(LSA)的摘要信息。
-
链路状态请求报文(Type 3)
- LSR报文是路由器根据从邻居收到的DD报文得知有新的或更新的LSA后,主动向邻居发出的请求报文。
- 路由器使用这类报文来请求缺失或需要更新的具体LSA。
-
链路状态更新报文(Type 4)
- LSU报文作为响应LSR请求,或者在某些情况下主动发送,用以更新邻接路由器的链路状态数据库。
- 报文中包含了一组完整的链路状态通告(LSAs),这些LSAs描述了网络中各个链路的状态变化。
-
链路状态确认报文(Type 5)
- LSAck报文用于确认接收到了链路状态更新报文(LSU)并且成功地将其中的所有LSA添加或更新到了本地的链路状态数据库中。
- 每个收到的LSU都会得到一个单独的LSAck回应,以确保数据传输的可靠性。
这五种报文共同协作,保证了OSPF能够快速、准确地在整个自治系统内部传播和同步网络拓扑信息。
---------------------------------------------------------------------------------------------------------------------------------
OSPF协议定义了一个明确的邻居状态机模型,用于描述两台运行OSPF的路由器之间邻居关系建立和维护的过程。最初,OSPF定义了五种状态,后来在RFC 2328中扩展为了八种状态。以下是OSPF邻居状态机的八个状态及它们的功能说明:
-
Down:
- 初始状态,表示路由器未与邻居建立任何联系,未收到来自邻居的Hello报文。
-
Init:
- 接收到邻居发送的Hello报文,但报文中并未包含本路由器的Router ID,即邻居尚未感知到本路由器的存在。
-
Attempt(非必需状态,仅存在于NBMA网络中):
- 在NBMA(Non-Broadcast Multi-Access)网络环境中,如果路由器无法被动等待Hello报文,它会在Dead Interval超时后主动尝试发送Hello报文,试图建立连接。
-
2-Way:
- 双方互相在Hello报文中看到对方的Router ID,形成双向通信。这是成为邻接关系的前提条件,但并不意味着已经建立了邻接关系。
-
ExStart:
- 开始进行数据库同步过程,双方协商主从关系,同时决定序列号和初始化DD(Database Description)报文的交换。
-
Exchange:
- 通过DD报文交换链路状态数据库的摘要信息。
-
Loading:
- 根据DD报文中的摘要信息,路由器通过LSR(Link State Request)报文请求缺少的LSA(Link State Advertisement),然后接收来自邻居的LSU(Link State Update)报文,填充或更新自己的链路状态数据库。
-
Full:
- 完成链路状态数据库的同步,两台路由器现在是完全邻接关系,可以交换路由信息,且链路状态数据库相同。
这一系列状态变迁确保了OSPF路由器间能够可靠地建立和维护邻接关系,从而实现整个自治系统内的路由信息同步和最优路径计算。