状态机,OSPF的邻居状态机

关键字: OSPF路由 WCCP EIGRP协议 QoS IBGP RIP协议

内容摘要:邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文。



  Down:邻居状态机的初始状态,是指在过去的Dead-Interval时间内没有收到对方的Hello报文。

  Attempt:只适用于NBMA类型的接口,处于本状态时,定期向那些手工配置的邻居发送HELLO报文。

  Init:本状态表示已经收到了邻居的HELLO报文,但是该报文中列出的邻居中没有包含我的Router ID(对方并没有收到我发的HELLO报文)。

  2-Way:本状态表示双方互相收到了对端发送的HELLO报文,建立了邻居关系。在广播和NBMA类型的网络中,两个接口状态是DROther的路由器之间将停留在此状态。其他情况状态机将继续转入高级状态。

  ExStart:在此状态下,路由器和它的邻居之间通过互相交换DD报文(该报文并不包含实际的内容,只包含一些标志位)来决定发送时的主/从关系。建立主/从关系主要是为了保证在后续的DD报文交换中能够有序的发送。

  Exchange:路由器将本地的LSDB用DD报文来描述,并发给邻居。

  Loading:路由器发送LSR报文向邻居请求对方的DD报文。

  两台路由器之间如何通过发送5种协议报文来建立邻接关系,以及邻居状态机的迁移。

  1.  RT1的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个HELLO报文(使用组播地址224.0.0.5)。由于此时RT1在该网段中还未发现任何邻居,所以HELLO报文中的Neighbor字段为空。

  2.  RT2收到RT1发送的HELLO报文后,为RT1创建一个邻居的数据结构。RT2发送一个HELLO报文回应RT1,并且在报文中的Neighbor字段中填入RT1的Router id,表示已收到RT1的HELLO报文,并且将RT1的邻居状态机置为Init。

  3.  RT1收到RT2回应的HELLO报文后,为RT2创建一个邻居的数据结构,并将邻居状态机置为Exstart状态。下一步双方开始发送各自的链路状态数据库。

  为了提高发送的效率,双方需先了解一下对端数据库中那些LSA是自己所需要的(如果某一条LSA自己已经有了,就不再需要请求了)。方法是先发送DD报文,DD报文中包含了对本地数据库中LSA的摘要描述(每一条摘要可以惟一标识一条LSA,但所占的空间要少得多)。由于OSPF直接用IP报文来封装自己的协议报文,所以在传输的过程中必须考虑到报文传输的可靠性。为了做到这一点,在DD报文的发送过程中需要确定双方的主从关系。作为Master的一方定义一个序列号seq,每发送一个新的DD报文将seq 加一。作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的seq。实际上这种序列号机制是一种隐含的确认方法。如果再加上每个报文都有超时重传,就可以保证这种传输是可靠的。

  RT1首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号为x。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。

  4.  RT2在收到RT1的DD报文后,将RT1的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RT2的Router ID较大,所以在报文中RT2认为自己是Master,并且重新规定了序列号为y。

  5.  RT1收到报文后,同意了RT2为Master,并将RT2的邻居状态机改为Exchange。RT1使用RT2的序列号y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中RT1将MS=0,说明自己是Slave。

  6.  RT2收到报文后,将RT1的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,需要注意的是:此时RT2已将报文的序列号改为y+1了。

  7.  上述过程持续进行,RT1通过重复RT2的序列号来确认已收到RT2的报文。RT2通过将序列号+1来确认已收到RT1的报文。当RT2发送最后一个DD报文时,将报文中的M=0,表示这是最后一个DD报文了。

  8.  RT1收到最后一个DD报文后,发现RT2的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RT2也收到了RT1的最后一个DD报文,但RT1的LSA,RT2都已经有了,不需要再请求,所以直接将RT1的邻居状态机改为Full状态。

  9.  RT1发送LS Request报文向RT2请求所需要的LSA。RT2用LS Update报文来回应RT1的请求。RT1收到之后,需要发送LS Ack报文来确认。上述过程持续到RT1中的LSA与RT2的LSA完全同步为止。此时RT1将RT2的邻居状态机改为Full状态。

  Full:在此状态下,邻居路由器的LSDB中所有的LSA本路由器全都有了。即,本路由器和邻居建立了邻接(adjacency)状态。



Tags:  无限状态机 什么是状态机 状态机图 vhdl状态机 有限状态机 状态机

延伸阅读

最新评论

发表评论