CCNP4:OSPF的【數據包、狀態機、工作過程、接口網絡類型、建立鄰接關係的條件】 2019.07.26補充

CCNP4:OSPF的【數據包、狀態機、工作過程、接口網絡類型、建立鄰接關係的條件】

OSPF:開放式最短路徑最短優先協議

OSPF 開放式最短路徑最短優先協議
無類別鏈路狀態路由協議。
組播更新,組播更新地址224.0.0.5、224.0.0.6

點到點網絡中:
使用224.0.0.5進行更新
MA網絡中:
DR、BDR使用224.0.0.5進行發送,使用224.0.0.6進行監聽
DRother使用224.0.0.6進行發送,使用224.0.0.5進行監聽
管理距離110
存在觸發更新,週期更新(30min)
跨層封裝至3層,協議號89。
基於拓撲型協議,選擇路徑佳
默認值:hello time 10s,dead time 40s
NBMA 網絡:hello time 30s,dead time 120s

OSPF基於LSA更新,這就導致更新量很大。由於它需要爲中大型網絡服務,因此它需要結構化部署(區域劃分、地址規劃)

結構化部署:
(1)區域劃分(在一個單區域內部傳拓撲,兩個拓撲之間傳路由。兩個區域拓撲計算所得結果進行共享,也就是路由)
(2)地址規劃

一、數據包:

數據包 全名 特點
Hello Hello包 鄰居的發現、建立、保活
DBD 數據庫描述包 數據庫目錄信息
LSR 鏈路狀態請求 用於請求未知的LSA
LSU 鏈路狀態更新 攜帶各種LSA
LSack 鏈路狀態確認 用於確認LSR、LSU

OSPF報頭格式:上面的包會被放在IP報頭之後的OSPF Packet Types 這部分。
在這裏插入圖片描述

OSPF Packet 註解
Version Number 版本號2(IPv4)、3(IPv6)
Type 編號代表包的類型:在這裏插入圖片描述
Packet Length 包長度
Router ID 每臺設備唯一的名字
Area ID 區域ID
Check-sum 校驗和
Authentication-Type 認證類型(空、明文、密文)
Authentication 攜帶明文或密文密碼
Data 攜帶Hello、DBD、LSR、LSU或LSack的數據

1、Hello包:

在這裏插入圖片描述
Hello包所獨有的是:

Data 註解
Hello and dead intervals 生成、死亡時間
Neighbors 當圖中的A發出Hello包的時候,包中就會攜帶BCED的RouterID
Router priority 路由器的優先級
DR IP address DR的IP地址
BDR IP address BDR的IP地址
Stub area flag 區域末梢標記

我們觀察到Hello包中有幾項數據是被標記爲*的,這表明鄰居間Hello包中這4個參數完成一致,否則無法建立鄰居關係。
①Hello、dead time
②區域ID
③認證字段
④末梢區域標記

2、DBD包:

R1#debug ip ospf adj	   查看OSPF建鄰過程
R1#clear ip ospf process   重啓ospf進程,可以查看建鄰過程
R1#un all                  關閉Debug

它出現在exstart、exchange均出現,exstart狀態時,沒有攜帶目錄信息,僅用於主從關係選舉。
(1) DBD包中攜帶MTU,強制要求鄰接間MTU值必須一致。否則將卡在 exstart、exchange狀態。如果不一致,導致數據包被多次的分段,佔用的資源將會更多。

(2) 在exstart狀態的DBD時,使用的隱形確認(基於序列號),該包基於序列號,使用的DBD序號來確認主的信息。
打開OSPF重建鄰居的Debug,然後重建鄰居關係,之後關閉Debug。下圖就是緊鄰過程的部分截取,通過使用主的序列號用來確認主的信息。
在這裏插入圖片描述

(3)標記位:
下圖是我抓取的OSPF的一個DBD包:
在這裏插入圖片描述

標記位 註解
I 爲1標識本地發出的第一個DBD包
M 爲0標識本地發出的最後一個DBD包
MS 爲1標識主,爲0標識從

在這裏插入圖片描述
一般情況下:
在這裏插入圖片描述
而圖中顯示的是第二次已經是最後一次發出的DBD包了。之後的0x0都只是作爲應答,表示其接收到了來自主的DBD。

二、OSPF的狀態機:

狀態機 意義
Down 一旦本地發出hello包就進入下一個狀態
Init
(初始化)
本地接收到的hello包中,若存在本地RID,那麼進入下一狀態
2way
(雙向通信)
鄰居關係建立的標誌

條件匹配:點到點網絡直接進入下一狀態,MA網絡中將進行DR/BDR選舉(40s)非DR/BDR間不得進入下一狀態

Exstart
(預啓動)
類hello的DBD,進行主從關係選舉,RID數字爲大者爲主,優先進入下一狀態,該階段進行的主從關係選舉主要解決誰先發消息誰後發消息,該階段還會協商MTU。
Exchange
(準交換)
使用真正的DBD包,進行數據庫目錄的共享,需要ACK確認,用於發現自己缺少的LSA信息
Loading
(加載)
使用LSR/LSU/LSack來獲取未知的LSA信息
Full
(轉發)
鄰接關係建立的標誌

除上述狀態機外,還存在一個Attempt:
Attempt:這種狀態僅僅適用於NBMA網絡上的鄰居,表示最近沒有從鄰居收到信息,但仍需作出進一步的嘗試,用以與鄰居聯繫。這時按Hello time的間隔向鄰居發送Hello包

總結一下就是:
①該狀態只有NBMA網絡中才會出現,
②該狀態爲了建立鄰居關係會按hello time的間隔向鄰居發送Hello包

三、OSPF的工作過程:

序號 註解
1 啓動配置完成後,本地使用組播(224.0.0.5、224.0.0.6)發送hello包到所有鄰居處,若收集到其他鄰居的hello包,那麼建立鄰居關係,生成鄰居表
2 緊接着和所有鄰居間進行 條件匹配 :
①若失敗將停留於鄰居關係,僅hello包週期保活即可。
②若匹配成功,將建立鄰接(毗鄰)關係(需要DBD共享數據庫目錄),鄰接關係將使用DBD/LSR/LSU/LSack來獲取未知的LSA信息,當收集齊所有的LSA信息後,本地生成LSDB(鏈路狀態數據庫也就是數據庫表)
3 之後在本地基於LSDB計算到達所有未知網段的最佳路徑,然後將其加載到路由表。
4 收斂完成後,hello包週期保活鄰居、鄰接關係;每過30min週期性的使用DBD比對數據庫。
5 若結構突變:
①新增、斷開網段時,直連新增或斷開的設備使用DBD告知鄰居,鄰居再使用LSR、LSU、LSack獲取
②設備斷電無法溝通,dead time到時後斷開鄰居關係。

名詞註解:
LSA:鏈路狀態通告,或者說是拓撲或路由。
LSDB:鏈路狀態數據庫,用於存放所有的LSA集合。
OSPF協議的收斂被稱作LSA洪泛、LSDB同步

在這裏插入圖片描述

1、狀態排錯:

首先,上面也說過Hello包中必須匹配的有四個參數:Hello和dead time、區域ID、認證類型和祕鑰、特殊區域標記,除此之外RID不能一致。

所卡狀態 狀態分析 卡住原因
init hello包出現問題 網絡擁塞,或者Hello包協商失敗
two-way 鄰居關係正常 鄰接關係若卡在該狀態,可能因爲優先級爲0,沒有DR
exstart 雙方MTU不匹配
loading LSU更新數據丟失 ①LSDB總數超量(最大10000條LSA)
②設置了LSA最大接收數量,導致卡住
attempt NBMA網絡中指定錯誤的鄰居地址

2、OSPF鄰居關係建立的條件:

序號 條件
hello time、dead time 一致
mtu 一致
認證類型、認證數據相同
具有相同的 區域ID
特殊區域標識(末梢、nssa)相同
雙方網絡掩碼一致(MA網絡可以不一致)
RID不同

補充:
(1)若MA網絡中僅存在DR或BDR,其餘路由器的接口優先級均爲0,那麼重啓OSPF進程之後,則依然可以建立鄰居關係。
(2)若MA網絡中所有路由器的接口優先級均爲0,它們均會卡在Two-way狀態
(3)若A、B、C三臺路由器連成線,它們的RID均配置爲相同的RID,那麼它們的鄰居表將不會有任何鄰居顯示。
(4)若R1、R2、R3三臺路由器連成線,R1與R3的RID配置爲一樣,那麼B可以在鄰居表中看到兩個鄰居,雖然能夠正常建立鄰居關係,但是鄰居關係及其不穩定,R2只能ping通一邊的環回,之後便中斷了,之後又能夠ping 通了。(我這裏用的是WebIOU模擬器,之後有機會我會拿真機去測試)
在這裏插入圖片描述

(5)如下配置:
在這裏插入圖片描述

測試結果
R1 ping 不通 3.3.3.3,其餘均可ping 通
R3 ping 只能ping通 本地環回3.3.3.3
R2 ping 不通 1.1.1.1,3.3.3.3,但有時能 ping 通 4.4.4.4,有時不能
R4 同R2

3、SPF算法:

OSPF算法使用的是迪傑斯卡拉算法,這裏不具體說。只說下它大概過程,這個算法可以算出最短的路徑,最後成樹狀結構。接口開銷值越小,則路徑越優。
在這裏插入圖片描述
整個OPSF的收斂過程總共使用了兩次SPF算法,第一次生成樹狀結構,然後第二次檢索出每個節點的最短路徑。

根據建鄰,收集的信息完閉之後會生成LSDB,然後運行SPF算法,從而生成最短路徑樹狀圖,樹狀圖具備無環,然後到達其它節點也是最短路徑。

之後第二次檢索到達每個路由器網段的路徑,這個路徑一定是最短路徑,之後就可以生成路由信息了。

四、OSPF的配置:

1、啓動、宣告:

接下來的配置我會以下圖爲例,IP如下,宣告省略:
在這裏插入圖片描述

R1(config)#router ospf 1          啓動時需要配置進程號,僅具有本地意義
R1(config-router)#router-id 1.1.1.1

router-id全網唯一,優先級從高到底按下面排列:
手工配置 > 環回接口上最大數值的IP地址 > 物理接口最大數值 > 無進程

宣告的作用:①激活接口 ②傳遞拓撲 ③區域劃分

R1(config-router)#network 1.1.1.1 0.0.0.0 area 0
R1(config-router)#network 12.1.1.1 0.0.0.0 area 0

OSPF在宣告時,必須攜帶反掩碼。

區域劃分規則:
1、星型結構:所有非骨幹必須直連到骨幹區域,區域0爲骨幹,大於0爲非骨幹。
2、ABR:區域邊界路由器,一臺設備同時工作在兩個區域之間,用於實現路由的共享。

2、鄰居表:

表中包含了鄰居ID、優先級、狀態機、死亡時間、鄰居的IP、出接口
在這裏插入圖片描述

3、數據庫表:

查看OSPF的數據庫表(目錄),關於目錄的詳細信息我會在下一次講。

R2#show ip ospf database  查看數據庫的目錄
R2#show ip ospf database router 1.1.1.1  具體查看某條LSA
(router 爲類別,1.1.1.1 爲番號)

4、路由表:

ABR:區域邊界路由器,它位於OSPF區域邊界上,將OSPF的非骨幹區域連接到了OSPF的骨幹區域。
ASBR:自治系統邊界路由器,它位於OSPF自主系統和非OSPF網絡之間,ASBR可以同時運行着多種協議。

標識 註解
O 標識OSPF本區域內通過拓撲計算所得路由。
O IA 標識其它區域路由器通過ABR導入所得
O E1/2 標識其它協議或其它進程產生後,通過ASBR重發布進入
O N1/2 標識其它協議或其它進程產生後,通過ASBR重發布進入,同時本地處於NSSA特殊區域。

管理距離爲110,度量爲cost開銷值:
在這裏插入圖片描述
注意:當接口帶寬大於參考帶寬時,度量爲1,可能導致選路不佳,因此可以修改默認的參考帶寬,但要求整個網絡所有設備參考帶寬需一致。

R1(config-router)#router ospf 1
R1(config-router)#auto-cost reference-bandwidth 1000
注意:它的單位是Mbits

五、OSPF的鄰居建立成爲鄰接關係的條件:

1、基於網絡類型:
(1)點到點 :
在點到點網絡中,鄰居關係必須成爲鄰接關係,否則無法正常收斂。
(2)MA多路訪問:
在MA網絡若全網均爲鄰接關係,那麼將可能出現大量重複性的LSA洪泛。爲避免該現象,將進行DR/BDR的選舉,所有的非DR/BDR間不得建立成爲鄰接關係。

2、選舉規則:
(1)先比較接口優先級:默認爲1,數值越大越優選,0標識不參選,點到點接口默認爲0。
(2)優先級相同,比較設備的RID,數值越大越優選。

3、干涉選舉的方法:
(1)修改DR最大優先級,BDR次大。

R1(config)#interface fastEthernet 0/0
R1(config-if)#ip ospf priority 3

注意:DR選舉爲非搶佔,故修改優先級後必須重啓設備的OSPF進程,必須在40s之內修改完成。

R1#clear ip ospf process 
Reset ALL OSPF processes? [no]: yes

(2)修改DR最大優先級,BDR次大,剩餘所有設備優先級修改爲0。
這種方式不需要重啓設備的進程,切記不得將所有設備優先級修改爲0,至少必須存在DR。

六、OSPF的接口網絡類型:

OSPF的接口網絡類型:指OSPF協議在不同網絡類型下的接口上,不同的工作方式。

網絡類型 名稱 特點 其它
環回 Loopback 無Hello包 以32位主機掩碼發送路由
點到點
(HDLC、PPP)
point_to_point hello time 10s 不選DR
BMA
以太網
Broadcast hello time 10s 選DR
NBMA
(幀中繼、MGRE)
point_to_point hello time 10s 不選DR

除上述4種網絡類型外,OSPF還存在點到多點模式,這個本文最後將會提到,還存在虛鏈路,這個我會在下一節講。

注:點到點的工作方式,僅適用於一個網段兩個節點的網絡。

因此:在MGRE環境下若適用tunnel口默認的工作方式,那麼一個網段內若存在兩個以上節點將出現鄰居關係翻滾。

想了解MGRE可以看我這篇博客:CCNP2:二層技術、PPP、HDLC、GRE(Tunnel)、MGRE技術

如果需要解決鄰居關係的翻滾,可以使用以下方法:
1、所有節點修改網絡類型尾以太網類型Broadcast

R1(config)#interface tunnel 0
R1(config-if)#ip ospf network broadcast

注:
①若MGRE環境下,不同接口處於不同的網絡類型,若hello time 一致將建立鄰居關係,但工作機制的不同,導致LSA更新出現問題,因此必須所有節點處於相同的工作方式
②在MGRE環境下,若構建的OSPF工作環境不是一個全連結構(網段內所有設備間均建立鄰居關係),那麼一旦使用Broadcast工作方式,就必須將DR固定在中心站點的位置,否則導致DR位置混亂,網絡將無法正常收斂。
2、所有節點修改爲點到多點模式
點到多點是Cisco爲OSPF協議額外設置的工作方式,處在MGRE下的所有鄰居之間都應該修改爲相同的網絡類型。

R1(config)#interface tunnel 0
R1(config-if)#ip ospf network point-to-multipoint 

點到多點的工作:hello time 30s,無DR選舉,生成訪問各個節點的精確路由。

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