抓包(wireshark)詳細分析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(轉發):鄰接關係建立的標誌

什麼是條件匹配?

1.MA網段進行DR/BDR選舉,P2P網段中沒有DR/BDR

2.點到點網絡直接進入下一狀態;MA網絡將進行DR/BDR選舉(40S),非DR/BDR間不得進入下一狀態

可參考這篇OSPF詳細工作過程

拓撲:

Down:關閉狀態

init:初始化

Hello包:12.1.1.1 以 10s爲週期向其他鏈路以組播方式發送hello包,並攜帶了自己的RID

 

此時,R2收到了R1的hello包,並向R1發送hello(打招呼)

Init完成,雙方成爲鄰居關係Two-way:鄰居關係建立(DR/BDR選舉)

Exstart預啓動

發送了四次的DBD是因爲,首先R1想要先進入下一狀態,但是R2告訴R1你的RID比我的小(要想進入下一狀態RID要是較大方,此時R2將R1的RID與自己進行了比較),R2向R1發送DBD請求,告訴R1 我纔是RID大的

 

R1第一次發送DBD將自己的master置成Yes

R2給R1迴應,我才應該是Yes

 

R1第二次發送DBD將自己的master置成No 並將初始化去除(因爲此時R1在Two-way狀態

 

R2將自己的初始化狀態更改(因爲此時R2也在Two-way狀態

R1第三次發送DBD將M置爲0

 

Exchange準交換:雙方交換DBD

 

 

Loading::使用LSR/LSU/LSACK獲取未知的LSA信息 (共享拓撲圖)  

R1向R2以單播方式發送LSR的請求

R2給R1 回覆LSU的確認包含了LSA,路由信息或拓撲信息

R1 R2之間互相發送LSR LSU

 

R1 要給R2發送 LSU的確認

 

至此,7個狀態機制完成,路由與拓撲完成交換


 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章