华为:Wireshark的OSPF抓包分析过程
一、OSPF 的5包7状态
5个数据包
1.Hello:发现、建立邻居(邻接)关系、维持、周期保活;存在全网唯一的RID,使用IP地址表示
2.DBD:本地的数据库的目录(摘要),LSDB的目录(所有LSA的集合)
3.LSR:基于DBD包中的未知信息进行查询
4.LSU:携带了真正的LSA信息(链路状态通告),用于答复对端的LSR
5.LSack:对传递LSA信息进行确认,链路状态确认。
7个状态
Down:一旦启动后发出hello包,则立即进入下一状态
Init(初始化):收到邻居Hello包,但未确认双方可达
2-Way(双向通信):双向通信建立
ExStart(预启动):主从关系协商
Exchange(准交换):LSA摘要信息交换
Loading(加载):请求完整LSA信息
Full(转发):邻接关系完全建立
二、状态变化过程
三、状态过程分析
拓扑
分析
(1)Down:
邻居会话的初级阶段,表示没有收到hello报文
HELLO包:12.1.1.1以10秒为周期向其他链路以组播方式发送hello包,并携带自己的RID。
(2)init:
收到hello报文之后,变成此状态(此时只有一方知道了邻居的存在1-way),
之后发送的hello报文中会有对方的RID,如下图
(3)2-way:
另一方收到hello报文之后,如果从中看到自己的RID以及hello报文中的各项参数是对的,就进入此状态。此时网络类型是广播,则需要选举BDR和DB。如果不建立形成邻居关系,邻居状态就停止,否则直接进入Exstatr。
(4)Extart(预启动)和Exchange(准交换)
①相互发送一个空的DD报文,AR1在第一次发送DBD时会将自己的master设置为YES,且两个的DD都是不一样的;
②比较DD报文,RID大的则为master,如果是最后一个DD,标志位M置为0;
③master收到使自己序列号的DD报文后。表示对方自己为master,状态变为Exchange,同时也会发送DD报文描述自己的LS信息,序列号+1。Slave收到master最后一个DD报文后,使用空的DD报文回复确认,此时状态变为Loading。
(5)Loading
确定主从关系之后,双方开始发送LSA请求LSA信息,对方收到请求恢复LSAck报文,直到LSA同步。
注意:双方不会对每个LSU发送LSAck进行确认,会采用LSA头部的序列号进行隐式确认,类似TCP的序列号,但是会对最后一个LSU发送LSAck进行确认。
(6)Full:LSR重传列表位空,LSA交互完毕。
到此,7个状态完成,路由与拓扑完成交换
四、总结
通过Wireshark分析可清晰观察OSPF状态机的动态过程,首先路由器之间发送Hello包建立邻居关系,然后比较RID选举master,选举完之后使用真正的DBD包进行数据共享,再去获取未知LSA信息,进行交换加入到LSDB中;建立完成邻居关系,就可以转发了。