OSPF—開放最短路徑優先協議詳解---附:OSPF LSA 詳解
OSPF:開放式最短路徑優先協議
無類別鏈路狀態路由協議---公有協議--組播更新協議:224.0.0.5/6
觸發更新、週期更新(30min);跨層封裝到網路層--協議號89
基於LSA更新導致更新量很大-----需要為中大型網路服務---週期的維護---結構化部署
結構化部署--區域劃分、地址規劃
資料包---5種基本資料包
HELLO -- 鄰居的發現、建立、保活
DBD --資料庫描述包 -- 資料庫目錄資訊
LSR --鏈路狀態請求
LSU ---鏈路狀態更新---攜帶各種LSA
LSack ----鏈路狀態確認
OSPF的狀態機
Down:本地一旦發出hello包,進入下一狀態
Init初始化:本地接收到的hello包中若存在本地的RID,進入下一狀態
2way雙向通訊:鄰居關係建立標誌
條件匹配:點到點網路直接進入下一狀態;MA網路將進行DR/BDR選舉(40S),非DR/BDR間不能進入下一狀態;
Exstart預啟動:使用類hello 的DBD包進行主從關係選舉,RID數值大為主,主優先進入下一狀態
Exchange準交換:使用真正的DBD進行資料庫目錄的共享,需要ACK;
Loading 載入:使用LSR/LSU/LSack來獲取未知的LSA資訊;
Full轉發:鄰接關係建立的標誌;
OSPF的工作過程
啟動配置完成後,本地收發hello包,建立鄰居關係,生成鄰居表;
再進行條件的匹配,匹配失敗將停留於鄰居關係,僅hello包週期保活即可;
匹配成功者間可以建立鄰接(毗鄰)關係,需要DBD共享資料庫目錄,LSR/LSU/LSack來獲取未知的LSA資訊,當收集完網路中所有的LSA後,生成資料表--LSDB
LSDB建立完成後,本地基於SPF選路規則,計算本地到達所有未知網段的最短路徑,然後將其載入到路由表中;完成收斂
收斂完成後--hello包週期保活
-- 30min週期的DBD比對,若不一致將使用LSR/LSU/LSack重新獲取
結構突變:
- 新增網段---直連新增網段的裝置使用DBD告知鄰居,鄰居再使用LSR/LSU/LSack來獲取
- 斷開網段---直連斷開網段的裝置使用DBD告知鄰居,鄰居再使用LSR/LSU/LSack來獲取
- 無法溝通---dead time 計時到後,鄰居關係斷開,刪除所有從該鄰接處學習到的所有LSA資訊;
名詞註解:
LSA:鏈路狀態通告--在不同條件下產生不同的拓撲或路由資訊,被分為各種類別;
LSDB:鏈路狀態資料庫---所有的LSA的集合
OSPF收斂:LSA洪泛 LSDB同步
配置:
r1(config)#router ospf 1 //啟動時需要配置程序號,僅具有本地意義
r1(config-router)#router-id 1.1.1.1
router-id全網唯一 router-id順序:手工----環回介面上最大數值的ip地址----物理介面最大數值----無程序
宣告:1、啟用 2、拓撲 3、區域劃分
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
在宣告時必須攜帶反掩碼
區域劃分規則:
- 星型結構------所有非骨幹必須直連到骨幹區域 區域0為骨幹 大於0為非骨幹
- ABR--區域邊界路由器
啟動配置完成後,鄰居間使用hello包建立鄰居關係,生成鄰居表:
Hello包----用於鄰居的發現、關係的建立和保活
鄰居間hello包中必須有4個引數完成一致,否則無法建立鄰居關係:
- hello 和dead time 2、區域ID 3、認證欄位 4、末梢區域標記
r2#show ip ospf neighbor 檢視鄰居表
Neighbor ID Pri State Dead Time Address Interface
1.1.1.1 0 FULL/ - 00:00:32 12.1.1.1 Serial1/0
3.3.3.3 0 FULL/ - 00:00:36 23.1.1.2 Serial1/1
狀態機
鄰居關係建立後,進行條件匹配,匹配失敗為鄰居關係,hello包週期保活即可;
匹配成功將使用DBD/LSR/LSU/LSack獲取未知的LSA資訊,生成LSDB---資料庫表:
r2#show ip ospf database 檢視資料庫的目錄
r2#show ip ospf database router 1.1.1.1 具體檢視某條LSA
類別 番號
DBD包:exstart和exchange均出現; exstart狀態時,沒有攜帶目錄資訊,僅用於主從關係選舉;
- DBD包中攜帶MTU,強制要求鄰接間MTU值必須一致,否則將卡在該狀態
- 在exstart狀態的DBD時,使用隱型確認;---基於序列號
從使用主的DBD序號來確認主的資訊
- 標記位 I 為1標識本地發出的第一個DBD 包
M為0標識本地的發出最後一個DBD包
MS為1標識主,為0標識從
當LSDB同步完成後,本地基於資料庫最短選路規則,計算到達所有未知網段的最短路徑,然後將其載入到路由表中:
O - OSPF, IA - OSPF inter area
N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
E1 - OSPF external type 1, E2 - OSPF external type 2
使用O標識OSPF本區域內通過拓撲計算所得路由
使用O IA標識其他區域路由器通過ABR匯入所得
使用O E1/2標識其他協議或其他程序產生後,通過ASBR重發布進入
使用O N1/2標識其他協議或其他程序產生後,通過ASBR重發布進入,同時本地處於NSSA特殊區域;
管理距離為110;度量為cost值;
Cost值=開銷值=參考頻寬/介面頻寬 預設參考頻寬為100M;
OSPF優選cost值之和最小的路徑;
注:到介面實際頻寬大於參考頻寬時,度量為1;可能導致選路不佳
可以修改預設的參考頻寬,切記整個網路所有裝置參考頻寬需一致
r1(config-router)#auto-cost reference-bandwidth ?
<1-4294967> The reference bandwidth in terms of Mbits per second
r1(config-router)#auto-cost reference-bandwidth 1000
OSPF的鄰居建立成為鄰接關係的條件
基於網路型別------點到點 MA多路訪問
在點到點網路中,鄰居關係必須成為鄰接關係,否則無法正常收斂
在MA網路若全網均為鄰接關係,那麼將可能出現大量重複性的LSA洪泛;
為避免該現象,將進行DR/BDR的選舉;所有的非DR/BDR間不得建立成為鄰接關係;
選舉規則:1、先比較介面優先順序----- 預設1;大優;0標識不參選,點到點介面預設為0;
2、優先順序相同,比較裝置的RID,數值大優;
干涉選舉的方法:
- 修改DR最大優先順序,BDR次大
r1(config)#interface fastEthernet 0/0
r1(config-if)#ip ospf priority 3
注:DR選舉非搶佔,故修改優先順序後必須重啟裝置的OSPF程序
r1#clear ip ospf process
Reset ALL OSPF processes? [no]: yes
- 修改DR最大優先順序,BDR次大;剩餘所有裝置優先順序修改為0;
不需要重啟裝置的程序;切記不得將所有裝置優先順序修改為0,至少必須存在DR;
- OSPF的介面網路型別----OSPF協議在不同網路型別下的介面上,不同的工作方式;
OSPF介面工作方式
r1#show ip ospf interface lo0 檢視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
注:點到點的工作方式,僅適用於一個網段兩個節點的網路;
故在MGRE環境下若適用tunnel口預設的工作方式,那麼一個網段內若存在兩個以上節點將出現鄰居關係翻滾;
解決方法:
- 所有節點修改 BROADCAST
r1(config)#interface tunnel 0 r1(config-if)#ip ospf network broadcast //修改介面工作方式為broadcast
注:若MGRE環境下,不同介面處於不同的網路型別;若hello time一致將建立鄰居關係,當工作機制的不同導致LSA更新出現問題;必須所有節點處於相同的工作方式
注2:MGRE環境下,若構建的OSPF工作環境不是一個全連結構(網段內所有裝置間均建立鄰居關係),那麼一旦使用broadcast工作方式,就必須將DR固定在中心站點位置,否則將出現DR位置混亂,導致網路無法正常收斂;
- 所有節點修改為點到多點模式;
點到多點為cisco為OSPF協議額外設定的工作方式
r1(config)#interface tunnel 0
r1(config-if)#ip ospf network point-to-multipoint
點到多點的工作:hello time30;無DR選舉;生成訪問各個節點的精確路由;
OSPF的不規則區域
【1】遠離骨幹的非骨幹區域 ----ABR必須同時工作於區域0,才能進行區域間的路由共享
【2】不連續骨幹---從X區域獲取到的路由資訊不得發往編號為X的區域;即便X區域連線
了本區域不同的ABR;---水平分割
解決方案:
- 普通tunnel---在兩臺ABR上建立隧道,然後將其宣告於OSPF協議中
缺點:週期的保活和更新,觸發的資訊均需要通過中間的穿越區域,對中間區域影響較大;
選路不佳;
OSPF協議若通過不同的區域學習到的相同的路由,優選區域0;若均為非骨幹,比較度量值;
- OSPF虛擬路---非骨幹區域間的ABR到骨幹區域的ABR處授權--建立一條虛鏈路
r2(config)#router ospf 1
r2(config-router)#area 1 virtual-link 4.4.4.4
中間的穿越區域 對端的ABR的RID
因為沒有新的網段出現,故選路正常;為了避免週期的資訊對中間區域的影響,故停止虛鏈路間的所有周期行為-----不可靠
- 多程序雙向重發布
一臺裝置上若同時執行多個程序,那麼不同程序擁有不同的RID,生成各自的資料庫,當資料庫不共享;僅將各自計算所得路由加載於同一張路由表內;若多個程序工作於同一個介面上,僅最新啟動的程序生效;
在解決不規則區域時,讓連線兩個非骨幹區域的ABR裝置,將不同區域宣告到本地的不同程序下,之後使用重發布技術,進行路由共享即可;
r4(config)#router ospf 1
r4(config-router)#redistribute ospf 2 subnets
r4(config-router)#exit
r4(config)#router ospf 2
r4(config-router)#redistribute ospf 1 subnets
OSPF的資料庫表
OSPF協議基於LSU來共享LSA資訊;
LSA--鏈路狀態通告----拓撲或者路由資訊
在不同的條件下發出不同類別的LSA;
詳細檢視某條LSA:
r1#show ip ospf database router 1.1.1.1
類別名 link-id
無論哪種類別的LSA均存在以下引數:
LS age: 142 老化時間,週期1800歸0,也可觸發歸0;最大老化3609s
Options: (No TOS-capability, DC)
LS Type: Router Links 類別名,此處為1類
Link State ID: 1.1.1.1 link-ID,在目錄中的編號
Advertising Router: 1.1.1.1 通告者的RID
LS Seq Number: 80000004
Checksum: 0x65F9
Length: 60
Number of Links: 3
傳播範圍 通告者 攜帶資訊
LSA1 router 本區域 本地區域所有裝置 本地的直連拓撲
LSA2 network 本區域 DR MA網段部分的拓撲
LSA3 Summary 整個OSPF域 ABR O IA 域間路由
LSA4 asbr-summary 除ASBR所在區域外 ABR ASBR位置
的整個OSPF域
LSA5 External 整個OSPF域 ASBR O E 域外路由
LSA7 nssa-external NSSA區域內 ASBR O N 域外路由
離開該區域後轉換回5類
Link-ID 通告者
LSA1 router 通告者的RID 本地區域所有裝置
LSA2 network DR的介面IP地址 DR
LSA3 Summary O IA路由,目標網路號 ABR,在經過下一跳ABR時,修改為本地
LAS4 asbr-summary ASBR的RID ABR,在經過下一跳ABR時,修改為本地
LSA5 External O E 路由,目標網路號 ASBR(不修改)
LSA7 nssa-external O N路由,目標網路號 ASBR(不修改)
擴充套件配置
減少LSA的更新量
【1】手工彙總
- 域間路由彙總---只能在ABR上配置
r1(config)#router ospf 1
r1(config-router)#area 2 range 5.5.4.0 255.255.252.0
通過該區域的1/2類LSA計算所得路由才能彙總成功
- 域外路由彙總---ASBR上配置
r4(config)#router ospf 1
r4(config-router)#summary-address 99.1.0.0 255.255.252.0
注:以上彙總均會自動生成空介面防環路由;
【2】特殊區域--不能為骨幹區域、不能存在虛鏈路
不能存在ASBR
- 末梢區域---拒絕4/5的LSA,ABR自動產生3類預設發向該區域
r5(config)#router ospf 1
r5(config-router)#area 1 stub 該區域所有的裝置均需要配置
- 完全末梢區域--在末梢區域的基礎上進一步拒絕3的LSA,僅保留一條3類的預設
先將該區域配置為末梢區域,然後僅在ABR上定義完全即可
r1(config-router)#area 2 stub no-summary
存在ASBR
NSSA--非完全末梢區域--該區域拒絕4/5類LSA;不自動產生3類預設;本地的5類LSA基於7類轉發,通過NSSA區域後轉回5類;
該特殊區域的意義在於拒絕其他區域的ASBR產生的4/5資料,又為了避免環路的出現,預設不自動產生預設路由,導致無法訪問其他的域外網段;故在管理員確定無環的情況下,可以手工新增預設路由
r4(config)#router ospf 1
r4(config-router)#area 1 nssa 該區域所有裝置配置
完全NSSA--在NSSA的基礎上進一步拒絕3的LSA,自動產生3類預設
先將該區域配置為NSSA,然後僅在ABR上定義完全即可
r3(config)#router ospf 1
r3(config-router)#area 1 nssa no-summary
切記:ISP所在位置的非骨幹區域不得配置為任何的特殊區域;
若ISP連線在其他的協議時,連線該協議的非骨幹區域也不得配置為任何特殊區域;
介面認證
介面明文
r1(config)#interface s1/1 //連線鄰居的介面上配置 r1(config-if)#ip ospf authentication //開啟介面明文認證需要,開啟後本地hello包中認證型別欄位被修改,若鄰居間不一致,將無法建立鄰居關係 r1(config-if)#ip ospf authentication-key cisco //定義明文認證的祕鑰
介面密文
r2(config)#interface s1/1 r2(config-if)#ip ospf authentication message-digest // 開啟密文認證需要 r2(config-if)#ip ospf message-digest-key 1 md5 cisco123 // 配置祕鑰及編號
區域認證:
例:在R1上開啟關於區域0的明文或密文認證;實際就是在R1上所有的區域0介面配置了明文或密文的認證需求,修改了認證型別欄位而已
介面的祕鑰還需要到各個介面上逐一匹配
r2(config)#router ospf 1 r2(config-router)#area 1 authentication //區域明文 r2(config-router)#area 1 authentication message-digest //區域密文
虛鏈路認證
明文認證
r2(config-router)#area 1 virtual-link 4.4.4.4 authentication //先開啟明文認證需求 r2(config-router)#area 1 virtual-link 4.4.4.4 authentication-key cisco //在配明文認證密碼
密文認證
r2(config-router)#area 1 virtual-link 4.4.4.4 authentication message-digest r2(config-router)#area 1 virtual-link 4.4.4.4 message-digest-key 1 md5 cisco123
被動介面---只接收不傳送路由協議資訊,僅用於連線使用者的介面,不得用於連線鄰居的介面
r2(config)#router ospf 1
r2(config-router)#passive-interface fastEthernet 0/0 //把介面改為被動
加快收斂
r2(config)#interface s1/1
r2(config-if)#ip ospf hello-interval 10 //修改hello time
r2(config-if)#ip ospf dead-interval 40 //修改dead time
切記:修改本端的hello time,本端的dead time將自動4倍關係匹配;
鄰居間hello 和 dead time必須一致;