OSPF協議詳解

   

開放最短路徑優先 (OSPF) 協議是一種鏈路狀態路由協議,旨在替代距離矢量路由協議 RIP。OSPF 是一種無類路由協議,它使用區域概念實現可擴展性。RFC 2328 將 OSPF 度量定義爲一個獨立的值,該值稱爲開銷。 Cisco IOS 使用帶寬作爲 OSPF 開銷度量。

OSPF背景

Internet 工程工作小組 (IETF) 的 OSPF 工作組於 1987 年着手開發 OSPF。當時,Internet 基本是由美國政府資助的學術研究網絡。以下是發展歷程:

OSPF消息封裝:   

OSPF 消息的數據部分封裝在數據包內。此數據字段可能包含五種 OSPF 數據包類型之一。

無論每個 OSPF 數據包的類型如何,都具有 OSPF 數據包報頭。隨後,OSPF 數據包報頭和數據包類型特定的數據被封裝到 IP 數據包中。在該 IP 數據包報頭中,協議字段被設爲 89 以代表 OSPF,目的地址則被設爲以下兩個組播地址之一:224.0.0.5 或 224.0.0.6。如果 OSPF 數據包被封裝在以太網幀內,則目的 MAC 地址也是一個組播地址:01-00-5E-00-00-05 或 01-00-5E-00-00-06。

OSPF數據包類型:

我們介紹了鏈路狀態數據包 (LSP)。OSPF的 LSP 有五種類型。每種數據包在 OSPF 路由過程中發揮各自的作用:

1. Hello — Hello 數據包用於與其它 OSPF 路由器建立和維持相鄰關係。Hello 協議將在下一主題中詳細討論。

2. DBD — DBD(數據庫說明) 數據包包含發送方路由器的鏈路狀態數據庫的簡略列表,接收方路由器使用本數據包與其本地鏈路狀態數據庫對比。

3. LSR — 隨後,接收方路由器可以通過發送鏈路狀態請求 (LSR) 數據包來請求 DBD 中任何條目的有關詳細信息。

4. LSU — 鏈路狀態更新 (LSU) 數據包用於回覆 LSR 和通告新信息。LSU 包含七種類型的鏈路狀態通告 (LSA)。LSU 和 LSA 將在下一主題中簡略討論。

5. LSAck - 路由器收到 LSU 後,會發送一個鏈路狀態確認 (LSAck) 數據包來確認接收到了 LSU。

Hello協議:  

第一種類型的 OSPF 數據包 1 是 OSPF Hello 數據包。Hello 數據包用於:

l   發現 OSPF 鄰居並建立相鄰關係。

l    通告兩臺路由器建立相鄰關係所必需統一的參數。

l    在以太網和幀中繼網絡等多路訪問網絡中選舉指定路由器 (DR) 和備用指定路由器 (BDR)。

重要字段包括:

l   類型:OSPF 數據包類型:Hello (1)、DD (2)、LS 請求 (3)、LS 更新 (4) 或 LS 確認 (5)

l   路由器 ID:始發路由器的 ID

l   區域 ID:數據包的始發區域

l   網絡掩碼:與發送方接口關聯的子網掩碼

l   Hello 間隔:發送方路由器連續兩次發送 hello 數據包之間的秒數

l   路由器優先級:用於 DR/BDR 選舉

l  指定路由器 (DR):DR 的路由器 ID(如果有的話)

l  備用指定路由器 (BDR):BDR 的路由器 ID(如果有的話)

l   鄰居列表:列出相鄰路由器的 OSPF 路由器 ID

建立相鄰關係

在 OSPF 路由器可將其鏈路狀態泛洪給其它路由器之前,OSPF首先要建立鄰居。OSPF Hello 中的信息包括髮送方路由器的 OSPF 路由器 ID。如果通過一個接口收到 OSPF Hello 數據包,即可確認該鏈路上存在另一臺 OSPF 路由器。隨後,OSPF 即與該鄰居建立相鄰關係。

OSPF Hello 間隔和 Dead 間隔

兩臺路由器在建立 OSPF 相鄰關係之前,必須統一三個值:Hello 間隔、Dead 間隔和網絡類型。OSPF Hello 間隔表示 OSPF 路由器發送其 Hello 數據包的頻度(默認情況下,在多路訪問網段和點對點網段中每 10 秒鐘發送一次 OSPF Hello 數據包,而在非廣播多路訪問 (NBMA) 網段(幀中繼、X.25 或 ATM)中則每 30 秒鐘發送一次 OSPF Hello 數據包。)Hello數據包使用組播發送給ALLSPFRouters 的專用地址 224.0.0.5 。

Dead 間隔是路由器在宣告鄰居進入 down(不可用)狀態之前等待該設備發送 Hello 數據包的時長,單位爲秒。Cisco 所用的默認斷路間隔爲 Hello 間隔的四倍。如果 Dead 間隔已到期,而路由器仍未收到鄰居發來的 Hello 數據包,則會從其鏈路狀態數據庫中刪除該鄰居。

選舉 DR 和 BDR

爲減小多路訪問網絡中的 OSPF 流量,OSPF 會選舉一個指定路由器 (DR) 和一個備用指定路由器 (BDR)。當多路訪問網絡中發生變化時,DR 負責使用該變化信息更新其它所有 OSPF 路由器(稱爲 DROther)。BDR 會監控 DR 的狀態,並在當前 DR 發生故障時接替其角色。

(點對點鏈路相互連接,不會執行 DR/BDR 選舉。)

OSPF鏈路狀態更新

鏈路狀態更新 (LSU) 數據包用於 OSPF 路由更新。一個 LSU 數據包可能包含11類型的鏈路狀態通告 (LSA),術語“鏈路狀態更新 (LSU)”和“鏈路狀態通告 (LSA)”之間的差異有時較難分清。有時,它們可以互換使用。一個 LSU 包含一個或多個 LSA,這兩個術語中的任何一個都可用於表示由 OSPF 路由器傳播的鏈路狀態信息。

以下是LAS的11種類型:

OSPF算法

每臺 OSPF 路由器都會維持一個鏈路狀態數據庫,其中包含來自其它所有路由器的 LSA。一旦路由器收到所有 LSA 並建立其本地鏈路狀態數據庫,OSPF 就會使用 Dijkstra 的最短路徑優先 (SPF) 算法創建一個 SPF 樹。隨後,將根據 SPF 樹,使用通向每個網絡的最佳路徑填充 IP 路由表。

管理距離:OSPF的管理距離(AD)是“110”。

身份驗證:

與對其它路由協議一樣,OSPF 也可進行身份驗證配置。對傳輸的路由信息進行身份驗證是好的做法。此做法可確保路由器僅接受配置有相同的口令和身份驗證信息的其它路由器所發來的路由信息。

OSPF基本配置          

Router ospf 命令:

process-id 是一個介於 1 和 65535 之間的數字,由網絡管理員選定。process-id僅在本地有效,這意味着路由器之間建立相鄰關係時無需匹配該值。

配置方法:

R1#conf t

R1(config)#router ospf 1

R1(config-router)#

Network 命令

OSPF 中的 network 命令與其它 IGP 路由協議中的 network 命令具有相同的功能:

l  路由器上任何符合 network 命令中的網絡地址的接口都將啓用,可發送和接收 OSPF 數據包。

l   此網絡(或子網)將被包括在 OSPF 路由更新中。

Router(config-router)#network network-address wildcard-mask areaarea-id

area area-id 指 OSPF 區域。OSPF 區域是共享鏈路狀態信息的一組路由器。相同區域內的所有 OSPF 路由器的鏈路狀態數據庫中必須具有相同的鏈路狀態信息,這通過路由器將各自的鏈路狀態泛洪給該區域內的其它所有路由器來實現。(“0”爲骨幹區域)

OSPF路由器ID

確定路由器 ID

OSPF 路由器 ID 用於唯一標識 OSPF 路由域內的每臺路由器。Cisco 路由器按下列順序根據下列三個條件確定路由器 ID:

l 使用通過 OSPF router-id 命令配置的 IP 地址。

l 如果未配置 router-id,則路由器會選擇其所有環回接口的最高 IP 地址。

l 如果未配置環回接口,則路由器會選擇其所有物理接口的最高活動 IP 地址。

OSPF router-id 命令

Router(config)#router ospf process-id    //進入OSPF配置模式

Router(config-router)#router-id ip-address  //配置Router-id

修改路由器 ID   

使用:Router#clear ip ospf process 命令來重啓OSPF進程,然後去修改你想要的Router-id。

重複的路由器 ID

當同一個 OSPF 路由域內的兩臺路由器具有相同的路由器 ID 時,將無法正常路由。如果兩臺相鄰路由器的路由器 ID 相同,則無法建立相鄰關係。當出現重複的 OSPF 路由器 ID 時,IOS 將顯示一條類似下列的消息:

%OSPF-4-DUP_RTRID1:Detected router with duplicate router ID

驗證Router-id:使用show ip protocols來驗證。

驗證OSPF

              show ip ospf neighbor 命令可用於驗證 OSPF 相鄰關係並排除相應的故障。此命令爲每個鄰居顯示下列輸出:

l       Neighbor ID — 該相鄰路由器的路由器 ID。

l       Pri — 該接口的 OSPF 優先級。

l       State — 該接口的 OSPF 狀態。FULL 狀態表明該路由器和其鄰居具有相同的 OSPF 鏈路狀態數據庫。

l       Dead Time — 路由器在宣告鄰居進入 down(不可用)狀態之前等待該設備發送 Hello 數據包所剩餘的時間。此值在該接口收到 Hello 數據包時重置。

l       Address — 該鄰居用於與本路由器直連的接口的 IP 地址。

l       Interface — 本路由器用於與該鄰居建立相鄰關係的接口。

在下列情況下,兩臺路由器不會建立 OSPF 相鄰關係:

l       子網掩碼不匹配,導致該兩臺路由器分處於不同的網絡中。

l       OSPF Hello 計時器或 Dead 計時器不匹配。

l       OSPF 網絡類型不匹配。

l       存在信息缺失或不正確的 OSPF network 命令。

其它功能強大的 OSPF 故障排除命令包括:

show ip protocols    

可用於快速驗證關鍵 OSPF 配置信息,其中包括 OSPF 進程 ID、路由器 ID、路由器正在通告的網絡、正在向該路由器發送更新的鄰居以及默認管理距離

show ip ospf   

命令也可用於檢查 OSPF 進程 ID 和路由器 ID,此外,還可顯示 OSPF 區域信息以及上次計算 SPF 算法的時間。

路由器每次收到有關拓撲的新信息時,必須重新運行 SPF 算法,SPF 算法會佔用很多 CPU 資源。以下信息是使用show ip ospf的輸出。

Initial SPF schedule delay 5000 msecs

Minimum hold time between two consecutive SPFs 10000 msecs

Maximum wait time between two consecutive SPFs 10000 msecs

狀態在 up 和 down 之間來回變化的網絡稱爲鏈路不穩。鏈路不穩會導致區域內的 OSPF 路由器持續重新計算 SPF 算法,從而無法正確收斂。爲儘量減輕此問題,路由器在收到一個 LSU 後,會等待 5 秒(5000 毫秒)才運行 SPF 算法。這樣可以防止路由器持續運行 SPF 算法,還存在一個 10 秒(10000 毫秒)的保留時間。路由器運行完一次 SPF 算法後,會等待 10 秒纔再次運行該算法。

show ip ospf interface  

 此命令用於檢驗 Hello 間隔和 Dead 間隔的最快方法。Cost就是開銷值。

檢查路由表

使用show ip route 命令可用於檢驗路由器是否正在通過 OSPF 發送和接收路由。每條路由開頭的 O 表示路由來源爲 OSPF。

OSPF度量

    OSPF 度量稱爲開銷RFC 2328 中有下列描述:“開銷與每個路由器接口的輸出端關聯。系統管理員可配置此開銷。開銷越低,該接口越可能被用於轉發數據流量。”

    Cisco IOS 使用從路由器到目的網絡沿途的傳出接口的累積帶寬作爲開銷值。

圖示爲各種接口的默認 OSPF 開銷。

參考帶寬

參考帶寬默認爲 10 的 8 次冪,即 100,000,000 bps,亦即 100 Mbps。這使帶寬等於或大於 100 Mbps 的接口具有相同的 OSPF 開銷 1。

可使用 OSPF 命令 auto-cost reference-bandwidth 修改參考帶寬值。如果需要使用此命令,則建議同時用在所有路由器上,以使 OSPF 路由度量保持一致。

OSPF 累計開銷

    OSPF 路由的開銷爲從路由器到目的網絡的累計開銷值。(就是說源地址到目的地址中間經過的所有路徑的開銷值進行相加)

修改鏈路的開銷

bandwidth 接口命令或 ip ospf cost 接口命令都可用於達到此目的 — 使 OSPF 在確定最佳路由時使用準確的值。(要該就要兩端都要改)

Router(config-if)#bandwidth bandwidth-kbps //修改接口的帶寬參數。

Router(config-if)# ip ospf cost “加數字”   //命令則直接將鏈路開銷設置爲特定值並免除了計算過程。

  多路訪問網絡中的挑戰

      在多路訪問網絡中,相同的共享介質上連接有兩臺以上設備。以太網 LAN 就是一種廣播多路訪問網絡。因爲該網絡中的所有設備會看到所有廣播幀,所以它屬於廣播網絡。

       OSPF 定義了五種網絡類型:

l 點對點

l 廣播多路訪問

l 非廣播多路訪問 (NBMA)

l 點對多點

l 虛擬鏈路

   多路訪問網絡對 OSPF 的 LSA 泛洪過程提出了兩項挑戰:

1. 創建多邊相鄰關係,其中每對路由器都存在一項相鄰關係。

2. LSA(鏈路狀態通告)的大量泛洪。

           多邊相鄰關係

           在網絡中的每對路由器間創建相鄰關係會產生一些不必要的相鄰關係。這將導致大量 LSA 在該網絡內的路由器間傳輸。對於多路訪問網絡中任意數量(用 n 表示)的路由器,將存在 n ( n - 1 ) / 2 項相鄰關係。但隨着網絡中路由器數量增加,相鄰關係數量將急劇增大。

           LSA 泛洪

           鏈路狀態路由器會在 OSPF 初始化以及拓撲更改時泛洪其鏈路狀態數據包。在多路訪問網絡中,此泛洪過程中的流量可能變得很大。

           解決方案:指定路由器(DR)

           用於在多路訪問網絡中管理相鄰關係數量和 LSA 泛洪的解決方案是指定路由器 (DR)。(可比喻爲在房間裏選舉出一個人,由該人員向所有人逐個詢問姓名,然後將這些姓名一次性通告給所有人。)多路訪問網絡中的路由器會選舉出一個 DR 和一個 BDR。DROther 僅與網絡中的 DR 和 BDR 建立完全的相鄰關係。這意味着 DROther 無需向網絡中的所有路由器泛洪 LSA,只需使用組播地址 224.0.0.6(ALLDRouters — 所有 DR 路由器)將其 LSA 發送給 DR 和 BDR 即可。

           DR/BDR選舉過程(DR/BDR 選舉不會發生在點對點網絡中)

           DR/BDR 選舉

           選舉過程遵循以下條件:

1. DR:具有最高 OSPF 接口優先級的路由器

2. BDR:具有第二高 OSPF 接口優先級的路由器

3. 如果 OSPF 接口優先級相等,則取路由器 ID 最高者。

           DROther 僅與 DR 和 BDR 建立完全的相鄰關係,但也會與該網絡中的任何其它 DROthers 建立相鄰關係。這意味着多路訪問網絡中的所有 DROther 路由器仍然會收到其它所有 DROther 路由器發來的 Hello 數據包。當兩臺 DROther 路由器形成相鄰關係後,其相鄰狀態顯示爲 2WAY。

           使用show ip ospf neighbor可以快速查看DR、BDR和DROther以及2WAY。

           使用show ip ospf interface 可以查看詳細的DR、BDR信息

           DR/BDR 選舉的時間安排

           DR 一旦選出,將保持 DR 地位,直到出現下列條件之一爲止:

l         DR 發生故障。

l         DR 上的 OSPF 進程發生故障。

l         DR 上的多路訪問接口發生故障。

如果 DR 發生故障,BDR 將接替 DR 角色,隨即進行選舉,選出新的 BDR。

新路由器加入該網絡。如果在選出 DR 和 BDR 後有新路由器加入網絡,即使新路由器的 OSPF 接口優先級或路由器 ID 比當前 DR 或 BDR 高,也不會成爲 DR 或 BDR。

前任 DR 返回網絡後不會重新取得 DR 的地位。

如果 BDR 發生故障,則會在 DRother 之間選出新的 BDR。

                您怎樣確保所需的路由器在 DR 和 BDR 選舉中獲勝呢?無需進一步配置,解決方案有兩種:

l     首先啓動 DR,再啓動 BDR,然後啓動其它所有路由器;

l     關閉所有路由器上的接口,然後在 DR 上執行 no shutdown 命令,再在 BDR 上執行該命令,隨後在其它所有路由器上執行該命令。

OSPF接口優先級

   由於 DR 成爲 LSA 的集散中心,所以它必須具有足夠的 CPU 和存儲性能才能擔此重責。與其依賴路由器 ID 來確定 DR 和 BDR 結果,不如使用 ip ospf priority 接口命令來控制選舉。

Router(config-if)#ip ospf priority {0 - 255}

       OSPF默認路由重分發

              R1#conf t

              R1(config)#ip route 0.0.0.0 0.0.0.0 loopback 1

              R1(config)#router ospf 1

              R1(config-router)#default-information originate

         路由表的輸出信息:O*E2 0.0.0.0/0 [110/1] via 192.168.10.10, 00:05:34, Serial0/0/1

              O表示從OSPF學到的路由

E2 表示此路由爲一條 OSPF第 2 類外部路由。

OSPF 外部路由分爲以下兩類:第 1 類外部 (E1) 和第 2 類外部 (E2)。兩種類型的差異在於路由的 OSPF 開銷在每臺路由器上的計算方式不同。

l         E1 路由在整個 OSPF 區域內傳播時,OSPF 會累計路由的開銷。

l         E2 路由的開銷卻始終是外部開銷,而與通向該路由的內部開銷無關。

       微調OSPF

            參考帶寬

可使用 OSPF 命令 auto-cost reference-bandwidth修改參考帶寬,以適應這些更快鏈路的要求。

R1(config-router)#auto-cost reference-bandwidth “1~4294967”單位是Mbits

            修改 OSPF 間隔

            可使用下列接口命令手動修改 OSPF Hello 間隔和 Dead 間隔:

            Router(config-if)#ip ospf hello-intervalseconds  //Hello間隔多少秒發送一次

Router(config-if)#ip ospf dead-intervalseconds  //多少秒沒有收到Hello就Down

 

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