一、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中,然后鄰接關系建立完成,可以開始轉發。