OSPF詳解(5種包和狀態機)

1.OSPF的數據包(5種)

在這裏插入圖片描述
Hello :發現建立並週期保護鄰居關係
DBD :數據庫描述包——進行主從關係的選舉,最重要的作用是發送LSDB目錄
LSR :鏈路狀態請求——對收到鄰接發來的LSDB目錄中,對於本地未知的LSA進行請求
LSU :鏈路狀態更新——對收到鄰接發來的LSR,攜帶LSA給鄰接
LSack :對DBD/LSR/LSU進行確認

2.OSPF的狀態機

Down :一旦收發hello包,直接進入下一狀態
Int :初始化——收到的hello包中含有本地的RID,進入下一狀態
2way :鄰居關係建立的標誌

條件匹配 :雙向通信——點到點直接進入下一狀態;MA網絡進行DR/BDR選舉(30s)。DR,BDR進入下一狀態,非DR,BDR保持鄰居關係,hello包週期保活即可。

exstart :預啓動——使用類似hello 的DBD包進行主從關係的選舉,RID大爲主,優先進入下一狀態
exchange :準交換——使用真正的DBD包進行LSDB目錄的交互
loading :加載——使用LSR/LSU/LSack獲取未知信息
full :轉發——鄰接關係建立的標誌

3.實驗抓包分析

在這裏插入圖片描述

3.1 Hello 數據報文(發現建立並週期保護鄰居關係)

在這裏插入圖片描述

(1)OSPF的頭部信息(OSPF Header)

在這裏插入圖片描述
(2)OSPF協議報文頭部字段,每種OSPF報文都包含。

字段 作用
version 描述OSPF協議版本
message type 描述OSPF報文信息,1 hello ,2 DBD, 3 LSR,4 LSU,5 LSAck
packet length 描述OSPF報文長度
router id 描述設備的router id
area id 描述所屬的OSPF區域
checksum 校驗和
anth type 0 null,1 明文,2 md5
auth date 認證信息

(3)Hello包中內容分析

在這裏插入圖片描述

作用
network mask 接口掩碼
hello interval hello報文發送間隔,P2P,broadcast默認10s,P2MP,NBMA默認30s
router priority 接口優先級,用在Broadcast,NBMA型鏈路選舉DR,BDR,默認爲1,取值範圍0-255
dead interval 鄰居失效時間,默認爲hello time的4倍
DR 該鏈路上DR接口的IP地址,P2P,P2MP該字段爲0.0.0.0
BDR 該鏈路上BDR接口的IP地址,P2P,P2MP該字段爲0.0.0.0
option E bit=1 代表能交換5類LSA, N bit=0 代表不能交換7類LSA

(4)任何情況下要滿足的建立鄰居關係的條件

  1. router id 不能衝突
  2. area id 必須一樣(必須在一個同區域)
  3. auth type 要一致
  4. auth data 要匹配
  5. hello interval 要一致
  6. dead interval 要一致
  7. E bit ,N bit 要一致

(5)特殊場景下對其他參數的要求

  1. P2P鏈路不要求地址在同一個網段,不要求掩碼一致。
  2. broadcast,NBMA 要求地址必須在同一個網段,掩碼必須一致。
  3. P2MP 要求地址必須在同一個網段,默認情況下要求掩碼一致,但可以通過命令忽略對掩碼的檢測

(6)其他報文對鄰居關係的影響

DBD報文中IP MTU值要一致,默認情況下華爲設備不對BDB報文的IP MTU值做檢測,華爲設備DBD報文的IP MTU 默認爲0,思科設備默認設置爲接口IP MTU的大小。當設備接收到DBD報文時,會檢測DBD報文中的IP MTU值是否小於自身接口的IP MTU,如果小則接收並處理,如果大則丟棄。

(7)華爲設備的DBD報文中的IP MTU值:
在這裏插入圖片描述

若cisco和華爲設備互聯可以直接建立鄰居關係。(原因是因爲cisco的IP MTU等於1500,而華爲默認不對DBD報文的IP MTU進行檢測,並且值爲0)

3.2 DBD(進行主從關係的選舉,最重要的作用是發送LSDB目錄)

(1)Src:10.1.1.1 Dst:10.1.1.2 (R1給R2發送初次發送DBD報文)
在這裏插入圖片描述
(2)Src:10.1.1.2 Dst:10.1.1.1 (R2給R1發送初次發送DBD報文)

在這裏插入圖片描述
exstart發送的DBD報文只做主從關係的選舉,而不會攜帶任何LSDB中LSA的頭部信息。並各自表達自身的初次發送DBD報文,後續還希望繼續發送DBD,並以自身爲Master,隨機生成DBD報文序列號,進行主從選舉,彼此交換該DBD報文後,根據router id 的大小完成主從關係的選舉,router id 大的爲master,router id 小的爲salve。

(3)exchange狀態,salve路由器開始發送攜帶自身LSDB中LSA頭部信息的DBD報文,並使用exstart狀態下的master路由器的序列號來進行確認。

在這裏插入圖片描述

(4)master路由器收到salve路由器發送過來的攜帶LSA的DBD報文後,通過對自己的序列號加1來對salve路由器進行確認。(如圖salve序列號爲239,master序列號爲240)

在這裏插入圖片描述

(5)當DBD報文交互完成後,最終salve路由器會再發一個沒有攜帶LSA頭部信息的DBD包來對master進行隱式確認。

在這裏插入圖片描述

(6)問題:爲什麼要設計DD報文呢?

原因:實現按需同步,提高收斂速度

(7)問題:爲什麼要採用隱式確認?

原因:因爲DBD報文攜帶自身LSDB中所以LSA的頭部信息,信息比較多,一 一進行確認處理起來比較繁瑣,消耗設備資源,影響鄰居收斂的時間,所以採用相對簡單的隱式確認機制。

exchange完成後,鄰居根據DBD報文的頭部信息和自身的LSDB的頭部信息做比較,進行LSDB的同步。

(8)同步規則:交換彼此沒有的LSA以及新的LSA替換老舊的LSA,實現鄰居LSDB的一致性。

爲了實現同步,對LSA的數據結構做出定義要能實現如下功能:

  1. 如何實現唯一的區分一條LSA。
  2. 如何實現LSA的新舊判斷。

而這些功能就是LSA的頭部信息(摘要信息),DBD報文攜帶的正是LSA的頭部信息,exstart狀態下DBD不攜帶LSA頭部信息。

(9)LSA通過6個參數來標識自身和新舊程度。

在這裏插入圖片描述

例:首先在R1上寫一條靜態,再重發布靜態,R1上就產生一條5類LSA,然後傳到R2上。

[R1]ip route-static 192.168.2.1 24 NULL 0
[R1]ospf 1
[R1-ospf-1]import-route static

在這裏插入圖片描述

當在R1上取下重發布後,R2上的這條5類LSA老化時間達到3600後刪除。

[R1-ospf-1]undo import-route static

在這裏插入圖片描述
最終5類LSA被刪除。

在這裏插入圖片描述

exchange 進入loading狀態,發送LSR,LSU,LSAck完成LSDB的同步。

3.3 LSR:對收到鄰接發來的LSDB目錄中,對於本地未知的LSA進行請求

在這裏插入圖片描述

當R1和R2收到對方發來的DD報文後,就自己本地未知的LSA進行請求,發送LSR給鄰接R2,如抓包結果所示,R1請求了兩條1類LSA。

3.4 LSU:對收到鄰接發來的LSR,攜帶LSA給鄰接

在這裏插入圖片描述
之後應答鄰接的LSR,讓LSU攜帶LSA給鄰接。

在這裏插入圖片描述

上圖所示,R2發送了兩個LSU。查看對應序列號得知發生了變化,第一次有兩條link,第二次有3條link,則進行了觸發更新。

在這裏插入圖片描述

3.5 LSAck:對DBD/LSR/LSU進行確認

在這裏插入圖片描述

ack是對LSU裏面的LSA進行確認。而不是讀LSU包進行確認。若LSU裏面攜帶兩條LSA,他就會直接發送一個LSAck,裏面直接攜帶這兩個LSA的頭部信息,一起進行確認。

補充說明:

DD報文的隱性確認是序列號直接的確認。而LSAck的確認是顯式確認。就相當於一個是收到消息回覆1來確認。而另一個確認是我對你說的話你在給我複述一遍,我就確保你知道了。所以ack的確認更加可靠。

DD報文用隱式的簡單確認的原因是DD報文裏的都是摘要信息,信息量大,逐一去進行確認,比較繁瑣,消耗資源大,並且收斂速度過慢。我們之間就進行一下簡單的確認。而ack確認用LSA的頭部進行顯式確認的原因是通過DD報文,我們大體路由信息基本都有了,只需要按需進行同步,相對的數量也會少,所以用ack進行確認。對設備性能的開銷不會很大,並且更可靠。

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