网工干货知识

网工技术详解
当前位置:首页 > 干货知识

OSPF 八种状态机

更新时间:2021年11月04日   作者:spoto   标签(Tag):

OSPF的八种状态机目录

 

 

OSPF概述

在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念。

 

邻居关系

OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。

 

邻接关系

形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。

OSPF的八种状态机

 

邻居状态机

OSPF共有8种状态机

分别是:Down、Attempt、Init、2-way、Exstart、Exchange、Loading、Full。
Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。

Attempt:该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔(poll interval)向对端发送Hello报文。
 
Init:收到Hello报文后状态为Init。
 
2-way:收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。
 
Exstart:开始协商主从关系,并确定DD的序列号,此时状态为Exstart。
 
Exchange:主从关系协商完毕后开始交换DD报文,此时状态为Exchange。
 
Loading:DD报文交换完成即Exchange done,此时状态为Loading。
 
Full:LSR重传列表为空,此时状态为Full。

在广播网络中建立OSPF邻接关系

1.建立邻居关系


广播网络中建立OSPF邻接关系

a.RouterA的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个Hello报文(使用组播地址224.0.0.5)。此时,RouterA认为自己是DR路由器(DR=1.1.1.1),但不确定邻居是哪台路由器(Neighbors Seen=0)。
 
b.RouterB收到RouterA发送的Hello报文后,发送一个Hello报文回应给RouterA,并且在报文中的Neighbors Seen字段中填入RouterA的Router ID(Neighbors Seen=1.1.1.1),表示已收到RouterA的Hello报文,并且宣告DR路由器是RouterB(DR=2.2.2.2),然后RouterB的邻居状态机置为Init。
 
c.RouterA收到RouterB回应的Hello报文后,将邻居状态机置为2-way状态,下一步双方开始发送各自的链路状态数据库。
 
注意:在广播网络中,两个接口状态是DR Other的路由器之间将停留在此步骤。

 

2.主/从关系协商、DD报文交换

a.RouterA首先发送一个DD报文,宣称自己是Master(MS=1),并规定序列号Seq=X。I=1表示这是第一个DD报文,报文中并不包含LSA的摘要,只是为了协商主从关系。M=1说明这不是最后一个报文。
为了提高发送的效率,RouterA和RouterB首先了解对端数据库中哪些LSA是需要更新的,如果某一条LSA在LSDB中已经存在,就不再需要请求更新了。为了达到这个目的,RouterA和RouterB先发送DD报文,DD报文中包含了对LSDB中LSA的摘要描述(每一条摘要可以惟一标识一条LSA)。为了保证在传输的过程中报文传输的可靠性,在DD报文的发送过程中需要确定双方的主从关系,作为Master的一方定义一个序列号Seq,每发送一个新的DD报文将Seq加一,作为Slave的一方,每次发送DD报文时使用接收到的上一个Master的DD报文中的Seq。
 
b.RouterB在收到RouterA的DD报文后,将RouterA的邻居状态机改为Exstart,并且回应了一个DD报文(该报文中同样不包含LSA的摘要信息)。由于RouterB的Router ID较大,所以在报文中RouterB认为自己是Master,并且重新规定了序列号Seq=Y。
 
c.RouterA收到报文后,同意了RouterB为Master,并将RouterB的邻居状态机改为Exchange。RouterA使用RouterB的序列号Seq=Y来发送新的DD报文,该报文开始正式地传送LSA的摘要。在报文中RouterA将MS=0,说明自己是Slave。
 
d.RouterB收到报文后,将RouterA的邻居状态机改为Exchange,并发送新的DD报文来描述自己的LSA摘要,此时RouterB将报文的序列号改为Seq=Y+1。
 
上述过程持续进行,RouterA通过重复RouterB的序列号来确认已收到RouterB的报文。RouterB通过将序列号Seq加1来确认已收到RouterA的报文。当RouterB发送最后一个DD报文时,在报文中写上M=0。

 

3.LSDB同步(LSA请求、LSA传输、LSA应答)

a.RouterA收到最后一个DD报文后,发现RouterB的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。此时RouterB也收到了RouterA的最后一个DD报文,但RouterA的LSA,RouterB都已经有了,不需要再请求,所以直接将RouterA的邻居状态机改为Full状态。
 
b.RouterA发送LSR报文向RouterB请求更新LSA。RouterB用LSU报文来回应RouterA的请求。RouterA收到后,发送LSAck报文确认。
 
上述过程持续到RouterA中的LSA与RouterB的LSA完全同步为止,此时RouterA将RouterB的邻居状态机改为Full状态。当路由器交换完DD报文并更新所有的LSA后,此时邻接关系建立完成。

 

在NBMA网络中建立OSPF邻接关系

NBMA网络和广播网络的邻接关系建立过程只在交换DD报文前不一致,如图中的蓝色标记。
在NBMA网络中,所有路由器只与DR和BDR之间形成邻接关系。

NBMA网络中建立OSPF邻接关系
 

 

 

1.建立邻居关系

a.RouterB向RouterA的一个状态为Down的接口发送Hello报文后,RouterB的邻居状态机置为Attempt。此时,RouterB认为自己是DR路由器(DR=2.2.2.2),但不确定邻居是哪台路由器(Neighbors Seen=0)。
 
b.RouterA收到Hello报文后将邻居状态机置为Init,然后再回复一个Hello报文。此时,RouterA同意RouterB是DR路由器(DR=2.2.2.2),并且在Neighbors Seen字段中填入邻居路由器的Router ID(Neighbors Seen=2.2.2.2)。

 

2.主/从关系协商、DD报文交换过程

同广播网络的邻接关系建立过程。

 

3.LSDB同步(LSA请求、LSA传输、LSA应答)过程

同广播网络的邻接关系建立过程。

 马上抢免费试听资格
意向课程: *必选
姓名: *必填
联系方式: *必填
QQ:
思博SPOTO在线咨询

上一篇:第一页

下一篇:Fuioncompute特性

相关资讯


即刻预约

免费试听-咨询课程-获取免费资料

思博网络SPOTO新活动X