OSPF状态机和报文

246 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

OSPF是日常网络建设中用到的最为广泛的路由协议,该协议配置简单,许多网络人从业多年还未能理解其邻居建立过程和更新路由的过程,下面详细为大家梳理一下状态机和报文的结合。以下为自己学习记录笔记内容,如有错误,欢迎指正。

状态机和报文结合描述理解:

DOWN: 没有接收到OSPF报文。没有发现任何的邻居。

Attempt: 此状态只在NBMA网络上存在,表示没有收到邻居的任何信息,但是已经周期性的向邻居发送报文,发送间隔HelloInterval(30S)。如果RouterDeadInterval(120S)间隔内未收到邻居的Hello报文,则转为Down状态。

Init : 收到邻居的hello包, 但hello中没发现自己的router-id。  此时代表你发现邻居的存在,但不代表邻居已经发现我,one-way 状态。

Two-way: 收到邻居hello报文,并从hello包中发现自己的router-id. init 收到邻居的hello包, 但hello中没有发现自已的Router id,

two-way之后,dr-other之间就只到two way状态,不会进行LSDB的同步。

其他情况会继续进行lsdb的同步,进入到exstart状态,开始发送DBD报文。

OSPF 采用3次握手建立邻居关系,是0SPF协议可靠性的体现。

exstart:做主从选举,为实现可靠的DBD同步做准备。 exstart 发送的DBD报文只做主从选举,而不会携带任何LSDB中LSA的头部信息。并各自表达自身是初次发送DBD报文,后续还希望维续发送DBD,并自身是master;随机生成DBD报文序列号,进行主从选举,彼此交换该DBD报文后, 根据router id的大小完成主从选举。router id大的成为master, router id小的成为slave.

1.1.1.1  I=1 M=1  MS=1   SEQ=x

2.2.2.2  I=1 M=1  MS=1   SEQ=Y

主从选举完毕后,进入到exchage状态exchage: slave路由器开始发送携带自身LSDB中LSA的头部信息的DBD报文,并使用exstart状态master路由器的序列号。

slave 1.1.1.1  I=0    M=1/0  MS=0   lsa头部   (M 1代表LSDB中LSA的头部信息还没发完,后续需要继续通过DBD报文发送,0代表LSDB中所有LSA的头部已经发送完毕)

master 2.2.2.2   I=0   M=1/0   MS=1   SEQ=Y+1   1sa头部

slave   1.1.1.1   I=0   M=1     MS=0   SEQ=Y+1   lsa头部

master 2.2.2.2   I=0   M=1     MS=1   SEQ=Y+2   lsa头部

Slave   1.1.1.1   I=0   M=0     MS=0   SEQ=Y+2   lsa头部

master 2.2.2.2   I=0   M=0     MS=1   SEQ=Y+3   lsa头部

slave 1.1.1.1   I=0   M=0   MS=0   SEQ=Y+3

slave总是用master的序列号向master发送DD报文,master将slave序列号 加1向从发送DD报文

exchange完成后,邻居根据DBD报文的头部信息和自身LSDB的头部信息做比较,进行LSDB的同步。

Loading: 发送LSRLSULSACK

Full: 路由器的LSDB一致

以上就是状态机和报文结合描述理解,望大家指正。