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個狀態機制完成,路由與拓撲完成交換