建立OSPF交互关系adjacency

OSPF路由协议通过建立交互关系来交换路由信息 , 但是并不是所有相邻的路由器会建立OSPF交互关系 。下面将OSPF建立adjacency的过程简要介绍一下 。
OSPF协议
OSPF协议是通过Hello协议数据包来建立及维护相邻关系的 , 同时也用其来保证相邻路由器之间的双向通信 。OSPF路由器会周期性地发送Hello数据包 , 当这个路由器看到自身被列于其它路由器的Hello数据包里时 , 这两个路由器之间会建立起双向通信 。在多接入的环境中 , Hello数据包还用于发现指定路由器DR , 通过DR来控制与哪些路由器建立交互关系 。
两个OSPF路由器建立双向通信这后的第二个步骤是进行数据库的同步 , 数据库同步是所有链路状态路由协议的最大的共性 。在OSPF路由协议中 , 数据库同步关系仅仅在建立交互关系的路由器之间保持 。
OSPF的数据库同步是通过OSPF数据库描述数据包(Database Description Packets)来进行的 。OSPF路由器周期性地产生数据库描述数据包 , 该数据包是有序的 , 即附带有序列号 , 并将这些数据包对相邻路由器广播 。相邻路由器可以根据数据库描述数据包的序列号与自身数据库的数据作比较 , 若发现接收到的数据比数据库内的数据序列号大 , 则相邻路由器会针对序列号较大的数据发出请求 , 并用请求得到的数据来更新其链路状态数据库 。
我们可以将OSPF相邻路由器从发送Hello数据包 , 建立数据库同步至建立完全的OSPF交互关系的过程分成几个不同的状态 , 分别为:
Down:这是OSPF建立交互关系的初始化状态 , 表示在一定时间之内没有接收到从某一相邻路由器发送来的信息 。在非广播性的网络环境内 , OSPF路由器还可能对处于Down状态的路由器发送Hello数据包 。
Attempt:该状态仅在NBMA环境 , 例如帧中继、X.25或ATM环境中有效 , 表示在一定时间内没有接收到某一相邻路由器的信息 , 但是OSPF路由器仍必须通过以一个较低的频率向该相邻路由器发送Hello数据包来保持联系 。
Init:在该状态时 , OSPF路由器已经接收到相邻路由器发送来的Hello数据包 , 但自身的IP地址并没有出现在该Hello数据包内 , 也就是说 , 双方的双向通信还没有建立起来 。
2-Way:这个状态可以说是建立交互方式真正的开始步骤 。在这个状态 , 路由器看到自身已经处于相邻路由器的Hello数据包内 , 双向通信已经建立 。指定路由器及备份指定路由器的选择正是在这个状态完成的 。在这个状态 , OSPF路由器还可以根据其中的一个路由器是否指定路由器或是根据链路是否点对点或虚拟链路来决定是否建立交互关系 。
Exstart:这个状态是建立交互状态的第一个步骤 。在这个状态 , 路由器要决定用于数据交换的初始的数据库描述数据包的序列号 , 以保证路由器得到的永远是最新的链路状态信息 。同时 , 在这个状态路由器还必须决定路由器之间的主备关系 , 处于主控地位的路由器会向处于备份地位的路由器请求链路状态信息 。
Exchange:在这个状态 , 路由器向相邻的OSPF路由器发送数据库描述数据包来交换链路状态信息 , 每一个数据包都有一个数据包序列号 。在这个状态 , 路由器还有可能向相邻路由器发送链路状态请求数据包来请求其相应数据 。从这个状态开始 , 我们说OSPF处于Flood状态 。
Loading:在loading状态 , OSPF路由器会就其发现的相邻路由器的新的链路状态数据及自身的已经过期的数据向相邻路由器提出请求 , 并等待相邻路由器的回答 。
Full:这是两个OSPF路由器建立交互关系的最后一个状态 , 在这时 , 建立起交互关系的路由器之间已经完成了数据库同步的工作 , 它们的链路状态数据库已经一致 。

推荐阅读