1. 程式人生 > >OSPF—開放最短路徑優先協議詳解---附:OSPF LSA 詳解

OSPF—開放最短路徑優先協議詳解---附:OSPF LSA 詳解

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


無類別鏈路狀態路由協議---公有協議--組播更新協議:224.0.0.5/6  

觸發更新、週期更新(30min);跨層封裝到網路層--協議號89

基於LSA更新導致更新量很大-----需要為中大型網路服務---週期的維護---結構化部署

結構化部署--區域劃分、地址規劃

資料包---5種基本資料包

HELLO -- 鄰居的發現、建立、保活

DBD  --資料庫描述包 -- 資料庫目錄資訊

LSR   --鏈路狀態請求

LSU  ---鏈路狀態更新---攜帶各種LSA

LSack ----鏈路狀態確認

OSPF資料包示意圖

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重新獲取

結構突變:

  1. 新增網段---直連新增網段的裝置使用DBD告知鄰居,鄰居再使用LSR/LSU/LSack來獲取
  2. 斷開網段---直連斷開網段的裝置使用DBD告知鄰居,鄰居再使用LSR/LSU/LSack來獲取
  3. 無法溝通---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

在宣告時必須攜帶反掩碼 

區域劃分規則:

  1. 星型結構------所有非骨幹必須直連到骨幹區域  區域0為骨幹  大於0為非骨幹
  2. ABR--區域邊界路由器

 

啟動配置完成後,鄰居間使用hello包建立鄰居關係,生成鄰居表

Hello包----用於鄰居的發現、關係的建立和保活

鄰居間hello包中必須有4個引數完成一致,否則無法建立鄰居關係:

  1. 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狀態時,沒有攜帶目錄資訊,僅用於主從關係選舉;

  1. DBD包中攜帶MTU,強制要求鄰接間MTU值必須一致,否則將卡在該狀態
  2. 在exstart狀態的DBD時,使用隱型確認;---基於序列號

   從使用主的DBD序號來確認主的資訊

  1. 標記位  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,數值大優;

干涉選舉的方法:

  1. 修改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

  1. 修改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口預設的工作方式,那麼一個網段內若存在兩個以上節點將出現鄰居關係翻滾;

 

解決方法:

  1. 所有節點修改 BROADCAST
r1(config)#interface tunnel 0

r1(config-if)#ip ospf network broadcast //修改介面工作方式為broadcast 

注:若MGRE環境下,不同介面處於不同的網路型別;若hello time一致將建立鄰居關係,當工作機制的不同導致LSA更新出現問題;必須所有節點處於相同的工作方式

 

注2:MGRE環境下,若構建的OSPF工作環境不是一個全連結構(網段內所有裝置間均建立鄰居關係),那麼一旦使用broadcast工作方式,就必須將DR固定在中心站點位置,否則將出現DR位置混亂,導致網路無法正常收斂;

  1. 所有節點修改為點到多點模式;

點到多點為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;---水平分割

解決方案:

  1. 普通tunnel---在兩臺ABR上建立隧道,然後將其宣告於OSPF協議中

缺點:週期的保活和更新,觸發的資訊均需要通過中間的穿越區域,對中間區域影響較大;

      選路不佳;

      OSPF協議若通過不同的區域學習到的相同的路由,優選區域0;若均為非骨幹,比較度量值;  

  1. OSPF虛擬路---非骨幹區域間的ABR到骨幹區域的ABR處授權--建立一條虛鏈路
r2(config)#router ospf 1

r2(config-router)#area 1 virtual-link 4.4.4.4

       中間的穿越區域   對端的ABR的RID

因為沒有新的網段出現,故選路正常;為了避免週期的資訊對中間區域的影響,故停止虛鏈路間的所有周期行為-----不可靠

  1. 多程序雙向重發布

   一臺裝置上若同時執行多個程序,那麼不同程序擁有不同的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】手工彙總

  1. 域間路由彙總---只能在ABR上配置

r1(config)#router ospf 1

r1(config-router)#area 2 range 5.5.4.0 255.255.252.0

              通過該區域的1/2類LSA計算所得路由才能彙總成功

  1. 域外路由彙總---ASBR上配置

r4(config)#router ospf 1

r4(config-router)#summary-address 99.1.0.0 255.255.252.0

 

注:以上彙總均會自動生成空介面防環路由;

 

 

【2】特殊區域--不能為骨幹區域、不能存在虛鏈路

不能存在ASBR

  1. 末梢區域---拒絕4/5的LSA,ABR自動產生3類預設發向該區域

r5(config)#router ospf 1

r5(config-router)#area 1 stub 該區域所有的裝置均需要配置

 

  1. 完全末梢區域--在末梢區域的基礎上進一步拒絕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必須一致;

OSPF-LSA詳解:https://blog.csdn.net/weixin_42767604/article/details/85159109