对于很多学习网络的同学来说,可能对于如何在路由器上配置OSPF比较熟悉了,但是OSPF邻接关系是如何建立起来的呢?本文将介绍OSPF邻接关系从初始状态到最后完成建立的全过程,通过学习这一部分,可以深入了解OSPF协议的全过程,对于网络排错也有很大帮助。

一、OSPF建立过程图

OSPF从开始到邻接关系建立,全过程如图所示。(该图说明了在BMA网络【广播网络】下OSPF邻接状态大的建立过程,其他模式与此略有不同)

OSPF路由建立邻接关系的过程讲解 ospf邻接关系建立的状态_OSPF路由建立邻接关系的过程讲解

二、OSPF邻接关系建立描述
OSPF邻接关系建立,说起来很复杂,但是其实很简单。总得来看,就是发现OSPF邻居,并且互相交换所知的网络信息的过程。
**首先,OSPF要互相发现对方。**该过程是通过发送Hello包实现的,运行OSPF的路由器一旦上线,就会想运行OSPF协议的端口上发送OSPF Hello包。该包含有一个32位的邻居字段,描述了自己所有已知的OSPF邻居。(注意,这里是邻居而不是邻接)换句话说,只要收到了一其他运行OSPF的路由器发送的Hello包,就会把该路由器的Router ID记录到Hello包中。这样,当一个OSPF路由器收到其他人发送的含有自己Router ID的Hello包时,就说明对方已经发现自己了,因此也就可以进行下一步。这时,我们说两个OSPF路由器建立了邻居关系。
其次,OSPF要互换自己所知道的网络的信息。 OSPF作为动态路由协议,之所以可以动态生成路由,就是因为运行OSPF协议的路由器之间互相交换了自己说知道的网络拓扑信息,也因此知道了整个网络的拓扑结构。在OSPF中,描述自己所知道的网络信息的报文时DD报文,因此只需要互相发送DD报文,就可以先告诉对方自己所知道的网络信息。但是要注意,DD报文中没有详细的网络信息。
此外,在DD报文互相交换之前,建立邻居的OSPF路由器之间还要发送一个空的DD报文,以便协商主从。
最后,OSPF路由器要发送详细的网络信息,以便达到网络拓扑结构认识的统一。该过程的实现是依托于LSR、LSU和LSACK报文实现的。LSR报文用于请求对方路由器的某一个网络的信息;LSU用于在收到LSR报文后向对方路由器回送某一个网络的信息;LSACK用于在收到LSU后向对方回复表示自己已经收到该信息。

三、OSPF报文类型总结
综上所述,OSPF一共有5种报文。
1、Hello报文。
用于发现OSPF邻居。
2、DD报文。
DD是Database Description的简写,用于描述LSDB。
3、LSR报文。
LSR是Link state Request的简写,用于向OSPF邻居请求LSU。
4、LSU报文。
LSU是Link State Update的简写,用于向对方发送描述网络的信息。
5、LSACK报文。
LSACK是Link State Ackowladgement的简写,用于回复LSU报文。