Wireshark的OSPF报文抓包和分析(单区域ospf实验)
一、OSPF的5种数据包和7种状态机制
数据包
Hello:发现、建立邻居(邻接)关系、维持、周期保活;存在全网唯一的RID,使用IP地址表示
DBD:本地的数据库的目录(摘要),LSDB的目录(所有LSA的集合)
LSR:基于DBD包中的未知信息进行查询
LSU:携带了真正的LSA信息(链路状态通告),用于答复对端的LSR
LSack:对传递LSA信息进行确认,链路状态确认
状态机制
Down:一旦启动后发出hello包,则立即进入下一状态
Init(初始化):若收到了携带了自己的RID的hello包,则和对方一起进入下一状态
Two-way(双向通信):邻居关系建立(DR/BDR选举),此时进行条件匹配,若成功,RID大的优先进入下一状态;若失败,则保持邻居关系,hello包10s周期保活即可
Exstart(预启动):使用类hello的DBD进行主从选举,RID大的优先进入下一状态
Exchange(准交换):使用真正的DBD包进行数据库目录交换共享
Loading(加载):使用LSR/LSU/LSack来获取未知的LSA信息
Full(转发):邻接关系建立的标志
拓扑:
二、实验配置
R1
配置IP
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]ip add 12.1.1.1 24
[R1]int LoopBack 0
[R1-LoopBack0]ip add 1.1.1.1 24
配置ospf
[R1]ospf router-id 1.1.1.1
[R1-ospf-1]area 0
[R1-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0]network 1.1.1.0 0.0.0.255
R2
[R2]int g0/0/0
[R2-GigabitEthernet0/0/0]ip add 12.1.1.2 24
[R2]int g0/0/1
[R2-GigabitEthernet0/0/1]ip add 23.1.1.2 24
[R2]int LoopBack 0
[R2-LoopBack0]ip add 2.2.2.2 24
[R2]ospf router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 23.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 2.2.2.0 0.0.0.255
R3
[R3]int g0/0/1
[R3-GigabitEthernet0/0/1]ip add 23.1.1.3 24
[R3]int LoopBack 0
[R3-LoopBack0]ip add 3.3.3.3 24
[R3]ospf router-id 3.3.3.3
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]network 23.1.1.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]network 3.3.3.0 0.0.0.255
三、数据抓包
(1)Hello包:12.1.1.1以组播的方式周期为10s向相邻的链路发送Hello包
224.0.0.5是组播地址
224.0.0.5:这是OSPF协议中用于多点广播通信的重要组播地址。它允许OSPF路由器之间通过该地址进行信息交换和路由更新。每当一个路由器在网络中发生状态改变时(例如链路故障或恢复),该路由器会将这一信息打包成LSA(链路状态通告)广播给网络中的其他路由器。因此,所有运行OSPF的路由器都会监听224.0.0.5地址。
(2)Exstart预启动和Exchange准交换
R1要进入下一个状态,要与R2比较RID,R1在第一次发送DBD时会将自己的master设置为YES,且DD-seq为48(DD报文中包含的DD-seq用于标识报文的版本和顺序,确保双方能够正确地同步数据库信息。)
R2的RID比R1的大,就会给R1发送DBD时将自己的master设置为YES,且DD-seq为46
R1再发送一次DBD,因为R1的RID比R2的小,R1会将自己的master设置成NO,且会将DD-seq改成46(为了确认上一步R2发来的DD-seq,所以DD-seq是46)
R2会再发一次DBD,将M置位0,告诉R1没有DD要发送了。且DD-seq会在原基础上+1,因为是新的DD-seq,所以R1会在发来一个用于确认的报文
R1第三次发来DBD,也是将M置位0,表示R1也没有DBD要发送了。且DD-seq是47是为了确认R2发来的DD-seq
过程总结
(3)Loading::使用LSR/LSU/LSACK获取未知的LSA信息 (共享拓扑图)
R1和R2之间相互发送LSR LSU
R2向R1以单播方式发送LSR请求
R1给R2回复LSU的确认包含了LSA、路由信息或拓扑信息
R2要给R1发送LSACK确认
到此,7个状态完成,路由与拓扑完成交换
四、总结
路由器之间先发送Hello包建立邻居关系,然后比较RID去完成DR和BDR的选举,选举完会使用真正的DBD包进行数据库的共享,再去获取未知LSA信息,进行交换加入到LSDB中,然后邻接关系建立完成,可以开始转发。