文章目錄
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選舉,生成訪問各個節點的精確路由。