OSPF状态机

OSPF状态机
OSPF状态机OSPF状态机
下面是关于状态机的详细解释:

1.Down
在DOWN状态下,OSPF接口仍然有尝试发现邻居的意愿,因此会不断的发送组播hello包。

2.Attempt
如果一个路由器,它邻居处于这种状态,则表示它从邻居没有收到任何信息,但是做了努力来与邻居联系。
仅在NBMA网络上存在,当NBMA网络上具有DR选取资格的路由器和其邻居路由器相连的接口开始变为有效(Activ/e)时,或者当这台路由器成为DR或BDR时,这台具有DR选取资格的路由器将会把邻居路由器的状态转换到Attempt状态。在Attempt状态下,路由器将使用hellointerval时间代替pollinterval的时间来作为向邻居发送hello数据包的时间间隔。

3.init
当OSPF接口收到链路上某个邻居发来的第一个HELLO包的时候,它会在接口上将该邻居置为init状态,注意这个hello包中可能并未包含任何的邻居信息。但是这至少证明,我这个OSPF接口在这个链路上,至少有个活的邻居。下面是一个没有发现任何active neighbor的hello包:
OSPF状态机
4.Two-way
当OSPF路由器在某个链路上发现了邻居后,它自己发送的hello包里就会增加active neighbor字段,用于存储在该链路上发现的OSPF邻居。当一台OSPF router看到自己(的RouterID)出现在邻居发过来的的hello分组中,它就会将该邻居置为Two-way。该状态是OSPF邻居之间可以具有的最基本的关系,也是第一个稳态,但是此时两者还不能共享路由信息。下面是一个已经在链路上发现了邻居1.1.1.1的hello:
OSPF状态机
5.ExStart
一台OSPF路由器在将某个邻居置为2way状态后,就开始发送空的DBD包,用于协商master/slave。这个就是ex-start状态。两台router间用空的BDB 分组确定master和slave关系(注意不是DR和BDR),
在DBD包中有3个标记位用来管理邻接关系的建立过程:
I位 或称为初始位(initial bit) 用于ex-start协商主从关系的初始化协商的DBD包,该位置1
M位 或称为后继位(More bit) 如果这不是OSPFrouter发送的最后一个DBD,该位置1
MS位 或称为主/从位(Master/slave bit) 如果始发路由器是Master,则该位置1
如果某台OSPF router收到邻居发来的DBD,I位也就是init位置0,则意味着ex-start状态结束,并且MS/slave已经选出来了,那么该路由器会将邻居置为exchange状态,开始用包含LSA头部的DBD交换各自的LSBD。
下面是一个用于初始化协商的DBD消息:
OSPF状态机
6.Exchange状态
这个过程,双方使用包含自己LSA头部的DBD报文进行交互,并且将对方发过来的LSA头部、并且自己感兴趣的LSA(或自己没有的LSA)存储在一个本地OSPF接口的队列里,以便在下一个阶段进行LSA详细信息的请求。当某个OSPF接口收到邻居发来的DBD,M位置0,则表示对方已经发完DBD了,与此同时,如果该路由器的这个OSPF接口上存在待请求的LSA,那么它会将这个邻居置为loading状态。
下面是一个装载了LSA头部的DBD消息:
OSPF状态机
7.loading 状态
OSPF router使用LSR去请求LSA的详细信息,对方使用LSU发来更新,因此只有LSU里才有LSA的完整信息。在收到LSU后,一方面本地使用LSAack进行确认,另一方面将LSU中包含的LSA装载进自己的LSDB。
以下是一个LSR消息,非常的简单:
OSPF状态机
接着是一个LSU消息,里头包含了LSA的完整信息,LSA这里暂时不做详细介绍,请看下文:OSPF状态机
8.Full Adjacency状态
Loading 状态结束后,也就是本地OSPF接口上再没有待更新的LSA队列后,将邻居置为FULL。