動態路由 - OSPF 一文詳解

動態路由

在之前的文章中,介紹了基於距離矢量的路由協議。而在今天這這一部分中會主要講解鏈路狀態的路由協議,對於動態的路由協議來說,需要具備如下的能力:

發現遠端網絡
路由器可以直接獲得直連路由,這是由路由器的接口 IP 地址得到。動態路由能夠自動學習遠端目的路由條目。

維護和更新路由信息
路由信息保存在路由器的路由表中。但路由的情況有時會發生變動。動態路由支持自動更新這些變化

在多個到達目的網絡的路徑之中選擇最優路徑
有時,路由協議會計算出到達同一目的網絡的多條可用路徑,路由協議需要有辦法在多條路徑之中選出最優的一條用於轉發數據。

在當前路徑不可用時發現一條新的可行路徑的能力
我們給這種過程(網絡發生變化後,路由協議重新對路由進行計算並與其它路由器交換路由信息)起了一個名字,叫收斂。收斂的最終結果是網絡重新回到一個穩定的正確的工作狀態。收斂的速度越快越好,是體現路由協議性能的重要指標。

鏈路狀態路由協議

在介紹具體 OSPF 協議前,先來比較一下鏈路狀態路由協議和距離矢量路由協議的區別:

  • 鏈路協議具有更好的擴展性,比如 RIP 只能最多有 15 臺路由器,而 OSPF 沒有這個限制。
  • 每個路由器都有一張完整的拓撲結構(LSDB)
  • 週期的觸發更新(LSA,後面會提到)
  • 在在拓撲有更新時,鏈路狀態的反應速度會更快
  • 路由器之間可以交流更多的信息。

鏈路狀態協議的數據結構:

這裏簡單說一下過程,假設上面四臺路由器中都遵從鏈路狀態協議,在每臺路由器啓動後,會將 LSA 以泛洪的方式傳遞給其他路由器,進而在每個路由器中構建出完整的拓撲信息。然後按照最短路徑的優先算法,以自己爲樹根,將到達其他網絡的最優路徑放入到路由表中。

OSPF

OSPF 特性

開放是指 OSPF 是一種基於開放標準的路由選擇協議,其中 OSPFV2 參考 RFC2328,OSPFV3 參考 RFC5340. 路徑最短優先是指 OSPF 在路由選擇上採用 Dijkstra 所提出的最短路徑算法。

OSPF 是基於鏈路狀態的路由協議。(鏈路狀態指這個路由器與哪些路由器相鄰,以及它們之間鏈路的"度量")。OSPF 使用帶寬、延遲、負載、距離和費用等多種元素來考慮度量,度量越小,代價越小。

每個使用 OSPF 的路由器中擁有整個拓撲,並且不傳遞路由,僅僅是發送鏈路狀態通道 (LSA)。

OPSF 使用觸發更新加增量更新。(OSPF 有一個非常緩慢的週期更新)

作爲對比,RIP 使用週期更新加完整更新(RIP 也具有觸發更新的機制)
觸發更新:當拓撲發生變化時,立即發送更新。
週期更新:每經過一個時間週期,發送一次更新。
增量更新:只發送變化部分的路由信息。
完整更新:發送所有路由信息

OSPF 有可擴展性(適合大型網絡-幾百臺),以及快速收斂的能力(但比 EIGRP 差,比 RIP 好)

獨立於傳輸層,數據包封裝在 IP 報文中。

支持 VLSM

支持手動彙總

支持認證

工作原理

每個路由器回週期性的向相鄰路由器發送探測報文(Hello 報文),檢測其是否可達。如果鄰站給予應答,說明鏈路正常;否則說明鏈路出現故障。

如果一個路由器檢測到某條鏈路狀態協議發生變化,該路由器就發送鏈路狀態更新報文,採用泛洪操作對全網更新鏈路狀態。

泛洪指某個路由器收到更新報文後都將這個報文發送給自己的相鄰路由器,直到報文送到整個網絡

即使鏈路狀態沒有發生變化,每隔 30min 路由器要向網絡中的其他路由器廣播鏈路狀態信息,以保證鏈路狀態數據庫和全網保持一致。

每個路由器收到其他路由器的鏈路狀態信息後,更新鏈路狀態數據庫,構建整個網絡的拓撲圖,利用 Dijkstra 的最短路徑算法計算出到達每個網絡的最短路徑(就是路由表中的內容)。

工作過程

鏈路狀態路由協議的主要工作原理是:

通過讓拓撲中的每臺路由器都在整個拓撲的範圍內泛洪自己的鏈路狀態通告(LSA),每臺路由器都會獲得整個拓撲中其它所有路由器的 LSA。

用這些 LSA 生成全拓撲統一的鏈路狀態數據庫(LSDB),再使用 SPF 算法計算出一個 SPF 樹(每臺路由器以自己爲起點到達拓撲中所有子網的樹形結構)。

然後將最優的路徑裝載到路由表中。

這個工作過程類似於拼圖。每臺路由器生成的 LSA 相當於一塊地圖的碎片,用可靠的機制泛洪這些地圖碎片後,每個路由器都能獲得一個整張拓撲的地圖,這個地圖就是 LSDB。

總結就是如下過程:

  1. 發現鄰居,建立並維護鄰居關係
  2. 生成 LSA,每臺路由器都會生成自己的 LSA
  3. 泛洪 LSA,使用 OPSF 自身具備可靠傳輸能力將 LSA 泛洪到區域中的其它路由器上
  4. 將收到的 LSA 組裝成LSDB,根據 SPF 算法計算出到達拓撲中所有網絡的最短路徑
  5. 將計算得出的路由裝載到路由表

OSPF 問題 - 分層架構的出現

問題

OSPF 在很多方面有着很大的優勢,但也存在着問題隨着網絡規模越大資源消耗呈指數增長,限制擴展性。網絡的帶寬和資源的消耗會隨着設備數量的增加而增加,因爲每臺路由器都需要維護 LSDB 的最新狀態,以及當發生更新時,進行泛洪的通告。

解決方式

OSPF使用兩級區域劃分,所有區域被分爲普通區域和骨幹區域。區域用一個 32bit 的數來進行標識。可以用點分十進制的方法,也可以直接用一個十進制數標識。唯一需要注意的,骨幹區域區域號固定爲0。骨幹區域只有一個,且必須連續。

區域在進行規劃的時候,一般要根據一個區域內路由器的型號,性能,以及負載來進行設計,通常一個區域中的路由器數量爲30到100臺左右。

區域在進行規劃的時候,一定要注意,所有普通區域必須與骨幹區域直接相連。這樣要求主要是爲了 OSPF 區域間防環。

由於 SPF 算法本身可以保證 OSPF 在區域內部無環路,所以區域間防環主要依靠網絡設計來解決。

因爲 OSPF 在區域間使用類似距離矢量路由協議的路由傳遞方式,所以不能保證沒有環路,

所以區域之間採星型的拓撲結構,通信都要經過骨幹區域,區域與區域之間無法單獨通信,進而無法形成環路。

進而將路由器分成了幾類:

  1. 區域內部路由器(所有的接口都位於同一區域)
  2. 區域邊界路由器(ABR)(有不同的接口位於不同的區域且其中一個爲骨幹區域)。ABR 路由器的性能要求更高,因爲需要同時裝載不同區域的 LSDB。
  3. 自治系統邊界路由器(ASBR)(進行重分佈操作,將其它路由器源學習到的路由引入 OSPF 的路由器)
  4. 骨幹路由器(BR)(只有一個接口位於骨幹區域)

這樣的設計,是每個路由器僅裝載本區域的 LSDB,大大提升了效率。而對於 ABR 這樣的路由器來說,由於橫跨多個區域,所以需要裝載不同的區域的路由器,自然要求的性能也比較高。在訪問不同的區域的網絡時,不需要傳遞 LSA,而是傳遞路由信息,使得效率進一步提高。

OSPF 報文類型

  1. Hello 報文,用於 OSPF 鄰居動態發現,鄰居參數協商,鄰居關係維護。
  2. DBD 報文,數據庫描述。
    • 用於傳遞 LSDB 摘要信息,實際上是 LSDB 中 所有 LSA 的頭部信息。OSPF 路由器通過交換 DBD 報文,來統計自己缺少的 LSA 並向對端發送 LSR 報文進行請求
    • 用於主從路由器的選舉
  3. LSR 報文,用於向鄰居請求自己 LSDB 中沒有的 LSA
  4. LSU 報文,LSU 用於給鄰居發送它們請求的 LSA,只有 LSU 報文中會包含完整的 LSA
  5. LSAck 報文,LSAck 用於向鄰居確認收到的 LSU,如果沒收到 LSAck 的話,鄰居會不斷重傳請求的 LSU。注意區分 LSA 和 LSAck

注意 LSA 本身不是報文

鄰居與鄰接

OSPF 鄰居關係,分爲鄰接和鄰居兩種。LSA 只在鄰接關係的鄰居之間同步,普通鄰居關係之間不同步 LSA 信息。

鄰居關係:路由器之間僅通過 Hello 報文,知道目前處於同一區域。

鄰接關係:在鄰居關係的基礎上,DR 和 BDR 之間互相發送 LSA。

我們知道,在運行着多臺 OSPF 的路由器中,爲了讓對方能夠發現自己,需要互相發送 HELLO 消息,建立鄰居關係。接着發送在路由器之間傳送 LSA 碎片。但這就有一個問題,由於每臺路由都需要知道完整的拓撲信息,所以所有路由器都需要廣播和接受 LSA 的碎片,假設有 n 個路由器之間連接鄰接關係,那麼將需要建立 n(n-1)/2 個鄰接關係。這無疑是對網絡資源的很大損耗。

爲了解決這個問題就提出了一個 DR 和 BDR 的概念,將路由器的類型分爲三種:

DR: 選舉成功的路由器 - 理解成掌門

BDR:作爲backup 的路由器 - 理解成副掌門,時刻監聽掌門狀態,掌門一死,副掌門就是掌門。

Other:未選舉成功的其他路由器。

接着在一個多路訪問鏈路上,所有的路由器都需要與 DR 路由器建立鄰接關係,同時也要與 BDR 路由器建立鄰接關係,DR Other 之間,只建立鄰居關係,不會同步數據庫信息。換句話說,區域中的普通路由器只和老大和老二建立關係。進而依靠這種方式降低 OSPF 進程對路由器資源佔用的。

OSPF 建立鄰居過程

Hello 報文:用於動態鄰居發現,鄰接參數協商,鄰接關係保持。

動態鄰居發現:OSPF 的鄰居關係,在支持廣播(支持組播)的鏈路上,可以自動建立,而不需要管理員進行顯式配置。通過向組播地址(224.0.0.5)發送 OSPF Hello 包,OSPF 能動態發現鏈路上的其它 OSPF 路由器。

Other -> DR/BDR 組播發送:224.0.0.6

DR -> Other 組播發送:Other 會監聽 224.0.0.5 的 IP,接受 DR 的 LSA

選舉步驟:

判斷網絡中是否有 DR 和 BDR:

  • 如果網絡中有 DR,BDR 新加入的路由要承認
  • 如果有 DR,沒有 BDR,選擇 BDR
  • 沒有 DR,有 BDR,則 BDR 晉升爲 DR,選舉 BDR

選舉 DR 和 BDR 的過程:

  1. 區域內中所有路由器發送 Hello 報文,進行 PK 選舉出 BDR。
    1. 原則是先比較 Hello 報文中的優先級(0 - 255),其次 Router ID。
    2. 稱爲BDR後,監聽網絡中是否存在 DR,沒有再晉升爲 DR.

如果想要重新選舉,則要重啓 OSPF 進程。如果是兩個運行 OSPF 的網絡整合在一起,如果都存在 DR 和 BDR,則兩個網絡中 DR 和 BDR 同層次進行比較。

選舉成功後:

  1. DR Other 和 DR,BDR 之間是鄰接關係
  2. DR 和 BDR 之間是鄰接關係
  3. DR Other 之間是鄰居關係
  4. DR other 監聽組地址是 224.0.0.5
  5. DR BDR 監聽組地址 224.0.0.5, 224.0.0.6(BDR 和 DR 之間通信)

鄰居協商參數

  1. Router-ID,路由器標識符。兩臺路由器想建立 OSPF 鄰居關係,Router-ID 必須不同。Router-ID 可以由管理員進行手工配置,一個點分十進制的 32bit 值。
    • 如果管理員沒有顯式配置 Router-ID,路由器獲取自身最大的環回接口 IP 地址作爲自己的 Router-ID
    • 如果沒有配置環回接口,則獲取最大物理接口 IP 地址作爲自己的 Router-ID。推薦對 Router-ID 進行手工配置。
  2. Hello Interval&Dead Interval,Hello 計時器和死亡計時器。默認在高速鏈路上,爲10秒 40秒。當 Hello 計時器超時,路由器將發送Hello 報文,當死亡計時器超時,路由器將會斷掉與該鄰居的鄰居關係。而每次從鄰居收到 Hello 報文將重置死亡計時器。建立鄰居關係的路由器要求擁有完全一致的 Hello 和 Dead Interval。
  3. Active Neighbors,活躍鄰居,一個發送 Hello 報文路由器的鄰居列表。
  4. Area ID,區域號,代表該接口屬於哪個 OSPF 區域。建立鄰居關係的兩個路由器(兩個接口)必須屬於同一個區域。
  5. Router Priority: 接口的優先級,影響 DR,BDR 選舉。越大越好,默認爲 1,最大爲 255,當優先級爲 0 時,代表不參與 DR,BDR 選舉。
  6. DR 指定路由器,BDR 備份指定路由器。在每個鏈路上通過選舉產生,路由器優先級越大越好,當優先級都相等時,選舉 Router-ID 最大的路由器。
  7. Authentication Type&Date,認證類型與認證數據,認證類型指示鄰居關係使用什麼方式進行認證(空:不認證,明文認證,MD5 摘要認證),默認使用空認證且不攜帶認證數據。認證類型或認證數據不一致都會導致 OSPF 鄰居建立失敗。
  8. Stub Area Flag 末節區域標記,建立鄰居的路由器必須擁有完全一致的末節區域標記。

OSPF狀態機-建立鄰接狀態過程

建立鄰居關係:

1. Down 初始狀態
與鄰居之間的接口沒有宣告 OPSF 進程。某些情況下也會讓鄰居處於 DOWN 的狀態比如鏈路兩端分別爲點到點和點到多點網絡類型

2. Init 初始化狀態
從鄰居收到一個 Hello 包,其中不包含自己的 Router-ID。會讓自己處於初始化狀態。如果鏈路存在單向鏈路問題,會讓鄰居關係保持在初始化的狀態無法繼續向前遷移。

3. Attempt(NBMA)嘗試狀態
每 poll 時間(120秒)向對面發送一個 Hello 包嘗試建立一個鄰居關係。只在低速的 NBMA 鏈路上出現。

3. 2-WAY 雙向通信狀態
收到鄰居發來的 Hello 包,且其中包含自己的 router-id,則認爲與鄰居之間的雙向通信已經建立,進入 2-WAY 狀態。

2-WAY 狀態鄰居兩端需要進行如下操作:

  • 先判斷網絡類型,是否需要選舉 DR,BDR
  • 如果不需要選舉 DR,BDR,則直接轉換到 EX-START。
  • 如果是廣播型或 NBMA 網絡,則選舉 DR, BDR。
  • 判斷鄰居之間是否需要建立鄰接關係。
  • 這個是鄰居路由器之間的穩定工作狀態。
  • 當 DR,BDR 選舉結束,且鄰居之間需要建立鄰接關係,則繼續向 ExStart 狀態遷移。

建立鄰接關係:

4. ExStart
該狀態下路由器的主要任務是選舉主從路由器主導 DBD 的交互。發送空的,標誌位置位情況爲 111 的 DBD 報文來進行主從選舉, 確定初始序列號,比較接口 MTU.

  • 當從路由器發出標誌位置位情況爲 010 或 000 的報文後,則進入 Ex-Change 狀態。
  • 如果接口的 MTU 設置不一致,則鄰居關係會停留在 ExStart 狀態

爲什麼要進行主從的選舉?

想象有 R1,R2 兩臺路由器。其中 R1 共有 1000 個 LSA 碎片,對應 DBD 假設共有 10 個。而 R2 有 300 個 LSA 碎片,DBD 有 3 個。假設只能一次發送一個 DBD. 如果沒有主從關係的話,R1 和 R2 直接會向對方發送,但這就存在對方可能沒有收到的情況,到時數據庫不一致。

但如果先選擇了主從關係後,這裏假設 R1 爲主,R2 爲從。這時 R1 需要給 R2 發送 10 個 DBD。R2 需要給 R1 發送 3 個 DBD。由 R1 先給 R2 發送第一個 DBD 報文,R2 收到後將自己的 DBD 報文再發送 R1。R2 給 R1 恢復,表明兩件事。第一之前的 DBD 我收到了。並把自己的 DBD 發送 R1。R1 收到後給 R2 發送第二個 DBD 報文,同樣表示之前的 DBD 收到了,下面是序號爲 2 的 DBD 報文。假設某次沒有收到對方的回覆,則會重複發送。這樣就保證了可靠性。

如果想 R1 和 R2 DBD 數量不對等的情況,如第三次 R2 給 R1 發送了序號爲 3 的 DBD 報文,自己所有的 DBD 都已經發送 R1了。之後再給 R1 的回覆中就是空報文,表示 R1 給自己的報文收到了,並且自己已經沒有要發送的報文了。

5. ExChange
通過發送 DBD 報文,同步數據庫結構。
當主發出 001,從回覆 000 報文的時候,DBD 報文交互結束。根據鏈路狀態請求列表的情況,進入 Loading 或者 Full 狀態。
Loading 繼續發送 LSR,請求數據庫中缺少的 LSA。同步數據庫。
Full 數據庫同步完成。一個鄰接關係成功建立。Full 是鄰接關係的穩定工作狀態。

在哪些情況下需要選舉 DR,BDR?
根據鏈路類型進行選擇 (點對點不選,以太網線選)

爲什麼要在多路訪問網絡當中選舉 DR,BDR ?
爲了減少鄰接關係的數量,減少 LSA 的泛洪流量,減少 CPU 資源和鏈路帶寬的佔用。

如何選舉 DR, BDR?
根據接口優先級。優先級越大,越可能稱爲 DR。默認優先級爲 1,優先級爲 0 時,代表不參與選舉。如果優先級相同,則比較 Router-ID 來進行選舉,Router-ID 大的路由器,成爲 DR

6. Loading State:

加載收到的 DBD 的內容,發現本地缺少的 LSA,接着取請求需要的 LSA。收到 LSR 報文,回覆 LSU 報文。

7. Full State

回覆對方收到了需要的 LSA。回覆 LSAck 報文。

OSPF 鄰居無法建立原因彙總

  1. 鄰居路由器發送的 HELLO 包中,Router-ID 字段相同
  2. 鄰居路由器發送的 HELLO 包中,Area-ID 與本端接口 Area 宣告不一致,鄰居無法建立
  3. 鄰居兩端認證類型不一致,鄰居無法建立
  4. 鄰居兩端認證數據不一致,鄰居無法建立
  5. 鄰居兩端接口掩碼配置不一致,鄰居無法建立
  6. 鄰居兩端的 Hello-interval 配置必須一致,否則鄰居無法建立
  7. 鄰居兩端的 dead-interval 配置必須一致,否則鄰居無法建立
  8. 如果鄰居兩端末節區域標記不一致,則鄰居無法建立

抓包 OSPF 通信過程

選取 DR 和 BDR 的區別

這裏首先假設 R1,R2,R3 已經配置了 OSPF 的協議。

這時我們將 R1 宣告的 12.1.1.0 網絡刪除掉,在 R2 查看鄰居狀態:

Router#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
34.1.1.1          1   FULL/DR         00:00:31    23.1.1.2        Ethernet0/1
12.1.1.1          1   FULL/BDR        00:00:39    12.1.1.1        Ethernet0/0

可以看到, 沒有立馬消失,在 Dead time 到達 0 時,會將 12 網絡刪除。

之後在 R1 網絡上重新宣告,在 R2 上可以看到,非常快就建立鄰接關係成功了:

Router#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
34.1.1.1          1   FULL/DR         00:00:30    23.1.1.2        Ethernet0/1
12.1.1.1          1   FULL/BDR        00:00:38    12.1.1.1        Ethernet0/0

但是如果我們把,R1 和 R2 宣告的 12 網絡都刪掉,再重新宣告,就會發現狀態卡在 2-Way 狀態很長時間:

Router#show ip ospf neighbor

Neighbor ID     Pri   State           Dead Time   Address         Interface
34.1.1.1          1   FULL/DR         00:00:35    23.1.1.2        Ethernet0/1
12.1.1.1          1   2WAY/DROTHER    00:00:33    12.1.1.1        Ethernet0/0

這裏卡成的時間,是在選舉 DR 和 BDR,可見 DR 和 BDR 的選舉在是非常影響網絡的性能的。

鏈路的狀態變化

從 down 狀態到 init 狀態:

可以看到這時發送的 Hello 包發往 224.0.0.5 組播地址。並且報文裏,沒有記錄活躍的鄰居。

init 到 2-way 狀態:

這時 R1 收到了 R2 的 Hello 報文,並告訴對方我的鄰居是你,這時就可以成爲 2-Way 狀態了。對應就是 Active Neighbor 字段,這裏是 23.1.1.1 是因爲 R2 的 router-id 沒有指定,也沒有 loopback 接口,所以用的是物理接口。

2-way到 exstart狀態:

紅框的部分,就是通過發送空的 DBD 報文,置位 111 進行主從選舉的過程。

Exchange狀態到 Full 狀態:

R1 發送 LSR 報文,獲取缺少的鏈路狀態。R2 回覆 LSU 報文。之後發送 LSU 到組播,然後對方進行 Ls Ack 進行確認。

OSPF 基本 Header

  • version: ospf 版本

  • Message Type: 共有五種報文

  • Packet Length:包括 Header Ospf 總長度

  • Source OSPF Router:發送者的 Router-id

  • Area ID:發送接口表示所在區域

  • Checksum: 整個數據包的校驗和

  • Auth Type:

    • 0:沒有認證
    • 1:明文認證
    • 2:MD5 認證

Auth Data: 所需要的認證信息

Hello 報文

  • Network Mask: 發送接口的網絡掩碼
  • Hello Interval [sec]: Hello 報文發送的時間間隔
  • Options: OSPF 啓用的功能
  • Router Priority: 優先級,用於 DR 和 BDR 的選舉
  • Router Dead Interval [sec]: 路由失效週期
  • Designated Router: 選舉出的 DR IP
  • Backup Designated Router: 選舉出的 BDR IP
  • Active Neighbor: 當前的鄰居,在剛開始的 Hello 包中並沒有

DBD 報文

空 DBD 用於選舉:

正常 DBD 用於同步狀態:

  • Interface MTU: 在數據包不分片的情況下,始發路由器接口可以發送的最大 IP 數據包的大小,如果 MTU 不一致,會導致鄰接關係無法建立
  • Options: OSPF 啓用的功能
  • DB Description:
    • R:保留位
    • I:Init = 1,代表此報文用於選舉主從,I = 0,表示主從選擇完畢,發送帶摘要信息的 DBD.
    • M:M = 1,表示 DBD 並未發完,後續還有。M = 0,報名此 DBD 報文最 last DBD.
    • MS: 表示主從位,MS=1 爲 Master,=0 爲 Slave.
  • DD Sequence: DBD 的序列號,主從雙方利用序列號來確保DD報文傳輸的可靠性和完整性
  • LSA - type: LSA 頭部信息

LSR 報文

  • LS Type: LSA 種類
  • Link State ID:根據 LS Type 而變化
  • Advertising Router: 始發這條 LSA 的路由器的 Router Id.

LSU 報文

  • number of LSAs: 包含 LSA 的數量
  • LSA :具體的 LSA 信息

LS ACK 報文

OSPF 網絡類型

Point-to-Point:點到點網絡,不需要選擇 DR 和 BDR,二層封裝爲 P2P 和 HDLC

Broadcast:二層協議爲以太網協議,爲廣播型,需要選 DR 和 BDR,解決 LSA 泛洪的類型

NMA:二層協議爲幀中繼,爲低速網絡,已經淘汰

P2MP:需要管理員手動配置,爲幀中繼網絡使用

P2MP-nobrocast:P2MP 的子類,幀中繼網絡,已經淘汰

Loopback:環回口網絡類型,會將環回口路由掩碼設置爲 /32. 通過修改網絡類型來改變掩碼。

其中 P2P,Broadcast:發送 Hello 間隔爲 10s

NMA P2MP P2MP-nobrocast :發送 Hello 週期爲 120s

LSA 類型

OSPFV2 中共有 6 中 LSA:

  • Router LSA (TYPE 1)
  • Network LSA (TYPE 2)
  • Network Summary LSA (Type 3)
  • SABR Summary LSA (Type 4)
  • AS-External LSA (Type 5)
  • NSSA LSA(Type 7)

從如下角度考慮 LSA:

  • 由誰始發
  • 傳播範圍
  • 作用

Router LSA : 一類 LSA

只要運行 OSPF,都會產生,在區域內傳播,描述了路由器的鏈路狀態和開銷,可根據一類 LSA 還原拓撲結構

LSA 頭部:

  • Age:16 bit,後 15 位表示 age,最多在數據庫存在 3600s,LSA 每 1800s 泛洪一次,最高位爲 1 表示 LSA 在 LSDB 永不老化.
  • Option: 表示 LSA 支持的可選性能
  • LS Type:標識 LSA 類型, 這裏是類型1
  • Link State ID:產生該 LSA 路由器的 Router ID
  • advertising Router:產生該 LSA 路由器的 Router ID
  • Sequence Number:識別 LSA 新舊問題,初始值從Ox80000001 開始
  • Checksum:對 Age 外的字段進行校驗
  • Length:包含 LSA 頭部的 LSA 大小

LSA 內容:

  • Flags:

    • V:1 表示始發路由器是一條或者多條具有完全鄰接關係的虛鏈路的端帶
    • E:1 表示始發路由是一個 ASBR 路由器
    • B:1表示是 ABR 路由器
  • Number of links:鏈路的數量

  • Type:OSPF 定義了四種 Link 類型(根據網絡類型不同)

    • Link Type Link ID Link Data
      1 P2P(P2P 網絡) 鄰居路由器的 Router ID 自己接口 IP
      2 Transit(廣播型網絡) DR 的接口 IP 地址 自己接口 IP
      3 Stub(描述環回接口) IP 所在網絡 子網掩碼
      4 Virtual-Link 虛擬鄰居路由器 Router ID 本虛鏈路 IP
    • number of Metrics:開銷 metrics

Network LSA:二類 LSA

網絡 LSA,由 DR 產生,區域內傳播,描述了 DR 所在網絡中的網絡信息和拓撲信息

LSA 頭部:

  • Age:16 bit,後 15 位表示 age,最多在數據庫存在 3600s,LSA 每 1800s 泛洪一次,最高位爲 1 表示 LSA 在 LSDB 永不老化.
  • Option: 表示 LSA 支持的可選性能
  • LS Type:標識 LSA 類型, 這裏是類型 2
  • Link State ID:DR IP 地址
  • advertising Router:產生該 LSA 路由器的 Router ID
  • Sequence Number:識別 LSA 新舊問題,初始值從Ox80000001 開始
  • Checksum:對 Age 外的字段進行校驗
  • Length:包含 LSA 頭部的 LSA 大小

LSA 內容:

network mask:網絡掩碼,用於表示 Transit 網絡使用的網絡掩碼

Attached:由哪些路由器連到網絡中,列出 MA (multiple access多路訪問,廣播型) 網絡中與 DR 形成鄰接關係,包括自身的 ID.

僞節點:二類 LSA 是 DR 代替僞節點產生的。爲了方便表示廣播網絡中的 Metric 開銷和表示。

Network Summary LSA : 三類 LSA

由 ABR 產生,在區域內傳播,描述區域內某個網段的路由。

由於 ABR 具有 Area 0 和 Are1 的兩個數據庫,爲了傳輸的方便和性能,會將數據庫的信息轉換爲路由信息進行傳輸。比如這裏的 R2,會將 Area 0 的數據庫轉換爲路由信息,發送給 Area1 裏的路由器。將 Area 1 的數據庫轉換爲路由信息,發送給 Area0 裏的路由器。發送的報文就是網絡彙總 LSA - 三類 LSA.

  • Link State ID: 網絡號
  • Network Mask:子網掩碼
  • Metric:度量值
  • Advertising Router:產生報文的路由器

在 R2 查看 3 類 LSA 信息,可以發現在 Area 0 中,自己產生了 12 網段的路由信息。

Router>show ip ospf database

            OSPF Router with ID (2.2.2.2) (Process ID 100)

                Router Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum Link count
2.2.2.2         2.2.2.2         329         0x80000004 0x00D40D 1
3.3.3.3         3.3.3.3         312         0x80000007 0x004032 2
4.4.4.4         4.4.4.4         245         0x80000005 0x00199F 1

                Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
23.1.1.1        2.2.2.2         329         0x80000002 0x00EE14
34.1.1.2        4.4.4.4         245         0x80000002 0x005D89

                Summary Net Link States (Area 0)

Link ID         ADV Router      Age         Seq#       Checksum
12.1.1.0        2.2.2.2         329         0x80000002 0x00FB20
45.1.1.0        4.4.4.4         245         0x80000002 0x0011E1

在 R1 上查看引入的路由(區域間的路由,不是本區域的路由):

AS-External LSA:五類 LSA

由 ASBR 產生,描述 AS 外部的路由信息,如果將外部路由在 OSPF 區域內,做了重分佈(redistribute ), 則會在整個 OSPF (AS)內泛洪。

如 R6 中並沒運行 OSPF,在 R6 的迴環接口上配置 6.6.6.6/24 的 IP, 這時在 R5 就會通過靜態路由的方式,通過重分佈引入 AS,然後將去往 6.6.6.6/24 網絡的數據包通過 E0/1 轉發給 R6.

在 R4 E0/1 抓包 ,可以收到五類 LSA 的更新:

  • Link State ID:目標網絡
  • Netmask: 網絡子網掩碼
  • Advertising Router:始發該報文的 Router ID
  • Options - E 位: 用於更改引入 OSPF 外部路由的 Metric 計算方式
    • 置位 1:爲 E2 類型, 僅僅計算外部開銷。在思科設備中,默認爲 20,永遠爲 20.
    • 置位 0:爲 E1 類型, 計算外部和內部開銷.
  • Forwarding Address:轉發地址,用於優化網絡,解決網絡中次優路由的問題(多臺路由器接口,在同一網絡)。
    • 轉發地址爲 0.0.0.0, 則會將數據包報轉發至始發 ASBR 上。
      • 在 ASBR 上,如果引入外部路由的外部接口不參與 OSPF,則爲全 0
    • 轉發地址非 0 ,則會將數據包轉發至 FA 地址。
      • 在 ASBR 上,滿足下面則 FA 不爲 0,IP 爲 是 ASBR 路由器 AS 外部鄰居的接口 IP 地址
        • ASBR 外部接口參與 OSPF
        • 該接口網絡類型不是 P2P 或 P2MP
        • 該接口不能是被動接口

ASBR Summary:四類 LSA

ABR 產生,描述到 ASBR 的路由,整個 AS 區域內傳播(ASBR 區域除外).

這時考慮,當 R1 在知道五類 LSA 的信息後,知道要去往 6.6.6.0/24 網絡,需要找 Router-Id 爲 5.5.5.5 的路由器。但由於並不知道 5.5.5.5 路由器的路由信息,所以就需要四類 LSA,要告知其需要的路由。由 ABR - R4 產生。

在 R3 E 0/1 口進行抓包:注意報文格式和三類 LSA 一樣。

由 ASBR 產生,描述 AS 外部路由,NSSA 區域內傳播。

OSPF 特殊區域:在一些場景下,由於某些路由器的性能不高,不足以接受和計算特別大量的路由信息,減小鏈路狀態數據庫,會將這樣的區域配置成特殊區域。

特殊區域的類型:

  • Stub 區域:末節區域,Stub 區域的 ABR 不傳播接受到的自治系統外部路由。一般在該區域,只會有一類,二類,三類 LSA。默認情況下,Stub 區域中的 ABR 會向 Stub 區域自動通告三類 LSA OIA 的缺省路由。默認路由,開銷值爲 1.
  • 完全 Stub 區域:在 Stub 區域的基礎上,也不允許區域間的路由傳播。不發送三類 LSA,僅有一類和二類的 LSA。配置時需要在所有 ABR 設備上進行 no-summary 配置。
  • NSSA 區域:Not So Stubby Area. 外部區域引入的路由不要,但是本身區域想要可以引入外部路由。NSSA 區域沒有 LSA 5,但允許外部路由通告到 NSSA 區域。通過 NSSA 內的 ASBR 發送 LSA 7 類將外部路由通告到 NSSA 區域中。在 NSSA 區域內泛洪,存在 1,2,7 類 LSA。
    • NSSA 區域不會通告默認路由,需要在 ABR 上手動下發路由
  • 完全 NSSA 區域:完全非末節區域。不予許區域間路由進入,僅存在 LSA 1, 2, 7 和 LSA 3 類默認路由的信息。配置時需要在所有 ABR 設備上增加關鍵字 no-summary.
    • 由於 7類 LSA 只能在 NSSA 區域內泛洪,需要 NSSA 區域 ABR 將 LSA7 轉換成 LSA5 進行泛洪。如果存在多臺 ABR,由 Router-Id 大的路由器泛洪。

開銷計算

OSPF 使用 Metric 組委度量值,Metric 越低,表示路徑越好。默認情況下,接口的開銷與接口帶寬成反比。,帶寬越高則開銷越低。

在思科設備上,OSPF 開銷計算公式:

Metric = 參考帶寬 / 實際帶寬

  • 默認參考帶寬爲 10^8 bit/s

cost = 10^8 / 10 mbps = 10

cost = 10^8 / 100 mbps = 1

cost = 10^8 / 1000 mbps = 0.1

但由於只能是整數,所以千兆鏈路也是 1 所以無法區分百兆和千兆鏈路。這裏可以採用修改標準比如將 十兆帶寬的標準修改爲 10^9 ,但需要注意的是,在所有的鏈路都要修改.

修改方式:

  1. 如上修改參考帶寬
  2. 修改接口開銷,ip ospf cost(推薦)

虛鏈路

虛鏈路通過在兩臺邊界設備之間,穿越所屬的非骨幹區域所建立的一條邏輯上的連接通道。讓非骨幹區域連接到骨幹區域或骨幹區域被分割的情況。

虛鏈路所穿越的區域稱爲傳輸區域。

比如下面的 R4 和 R2 之間連接的虛鏈路,讓非骨幹區域連接到骨幹區域:

或者像 R1 和 R4 所在 Area0 區域被分割的情況:

在配置虛鏈路時需要注意:

  • 在兩端設備同時配置,並且處於同一區域。
  • 傳輸區域不能是特殊區域。
  • 其中一臺設備必須連接骨幹區域。
  • 如果骨幹區域配置認證,虛鏈路也需要配置認證。

配置

按照第一個圖正常配置 OSPF 後,在 R3 和 R5 上查詢 database:

# 發現 Area3 區域的路由並沒有收到
R3#show ip ospf database

            OSPF Router with ID (34.1.1.3) (Process ID 100)

                Router Link States (Area 2)

Link ID         ADV Router      Age         Seq#       Checksum Link count
23.1.1.2        23.1.1.2        219         0x80000003 0x004575 1
34.1.1.3        34.1.1.3        117         0x80000005 0x003AFE 2
46.1.1.4        46.1.1.4        113         0x80000002 0x00155C 1

                Net Link States (Area 2)

Link ID         ADV Router      Age         Seq#       Checksum
23.1.1.2        23.1.1.2        219         0x80000001 0x00DEE2
34.1.1.3        34.1.1.3        117         0x80000001 0x00C5CA

                Summary Net Link States (Area 2)

Link ID         ADV Router      Age         Seq#       Checksum
10.1.0.1        23.1.1.2        323         0x80000002 0x007297
10.1.1.1        23.1.1.2        323         0x80000002 0x0067A1
10.1.2.1        23.1.1.2        323         0x80000002 0x005CAB
10.1.3.1        23.1.1.2        323         0x80000002 0x0051B5
12.1.1.0        23.1.1.2        323         0x80000002 0x004DBB

# 發現 Area0,1,2 區域的路由並沒有收到
R5#show ip ospf database

            OSPF Router with ID (45.1.1.5) (Process ID 100)

                Router Link States (Area 3)

Link ID         ADV Router      Age         Seq#       Checksum Link count
45.1.1.5        45.1.1.5        272         0x80000003 0x00F760 1
46.1.1.4        46.1.1.4        282         0x80000003 0x00E375 1

                Net Link States (Area 3)

Link ID         ADV Router      Age         Seq#       Checksum
45.1.1.4        46.1.1.4        282         0x80000001 0x001B4F

沒有收到路由的原因就因爲 R4 並不是 ABR,並不能傳遞區域間的路由,所以需要配置虛鏈路,讓 R4 稱爲 ABR.

# R2 配置
R2(config)#router ospf 100
# 46.1.1.4 爲 R4 的 Router-id
R2(config-router)#area 2 virtual-link 46.1.1.4

# R4 配置
R4(config)#router ospf 100
# 23.1.1.2 爲 R2 的 Router-id
R4(config-router)#area 2 virtual-link 23.1.1.2

# 查詢虛鏈路
R4#show ip ospf virtual-links
Virtual Link OSPF_VL0 to router 23.1.1.2 is up
  Run as demand circuit
  DoNotAge LSA allowed.
  Transit area 2, via interface Ethernet0/0
 Topology-MTID    Cost    Disabled     Shutdown      Topology Name
        0           20        no          no            Base
  Transmit Delay is 1 sec, State POINT_TO_POINT,
  Timer intervals configured, Hello 10, Dead 40, Wait 40, Retransmit 5
    Hello due in 00:00:01
    Adjacency State FULL (Hello suppressed)
    Index 1/1/3, retransmission queue length 0, number of retransmission 0
    First 0x0(0)/0x0(0)/0x0(0) Next 0x0(0)/0x0(0)/0x0(0)
    Last retransmission scan length is 0, maximum is 0
    Last retransmission scan time is 0 msec, maximum is 0 msec

虛鏈路使用單播發送 hello 包建立鄰居,建立成功後,Hello 包將不再發送。通過虛鏈路學到的 LSA,AGE 字段爲 DNA,表示永不老化。

認證

OSPF 提供認證功能,共有三種模式:

  1. 不啓用認證
  2. 明文認證
  3. MD5 密文認證

OSPF 有三種認證部署類型:

  1. 接口認證
  2. 區域認證
  3. 虛鏈路認證

接口認證

爲 R1 E0/0 和 R2 E0/0 配置:

明文認證:

# R1 開啓明文認證
R1(config)#int e0/0
R1(config-if)#ip ospf authentication me
R1(config-if)#ip ospf authentication-key 123456

# R2 開啓明文認證
R2(config)#int e0/0
R2(config-if)#ip ospf authentication me
R2(config-if)#ip ospf authentication-key 123456

密文認證:

R1(config)#int e0/0
R1(config-if)#ip ospf authentication message-digest
R1(config-if)#ip ospf message-digest-key 1 md5 1234

R2(config)#int e0/0
R2(config-if)#ip ospf authentication message-digest
R2(config-if)#ip ospf message-digest-key 1 md5 1234

區域認證

爲某個區域下同時配置認證,比如爲 Area 0 區域,比在每個接口下配置認證更加方便:

# R1 爲 Are0 下的接口開啓認證功能
R1(config)#router ospf 100
R1(config-router)#area 0 authentication
# 去接口下設置密碼
R1(config)#int e 0/0
R1(config-if)#ip ospf authentication-key 123

# R2 爲 Are0 下的接口開啓認證功能
R2(config)#router ospf 100
R2(config-router)#area 0 authentication
# 去接口下設置密碼
R2(config)#int e 0/0
R2(config-if)#ip ospf authentication-key 123

虛鏈路認證

當爲骨幹區域配置了區域認證時,如果啓用了虛鏈路,也要爲虛鏈路配置認證,因爲虛鏈路也需要骨幹區域

虛鏈路明文認證:

R2(config)#router ospf 100
R4(config-router)#area 0 authentication
R2(config-router)#area 2 virtual-link 46.1.1.4 authentication
R2(config-router)#area 2 virtual-link 46.1.1.4 authentication-key 123123

R4(config)#router ospf 100
R4(config-router)#area 0 authentication
R4(config-router)#area 2 virtual-link  23.1.1.2 authentication
R4(config-router)#area 2 virtual-link  23.1.1.2 authentication-key 123123

密碼認證:

R2(config)#router ospf 100
R4(config-router)#area 0 authentication
R2(config-router)#area 2 virtual-link 46.1.1.4 authentication message-digest
R2(config-router)#area 2 virtual-link 46.1.1.4  message-digest-key 1 md5 1234

R4(config)#router ospf 100
R4(config-router)#area 0 authentication
R4(config-router)#area 2 virtual-link  23.1.1.2 authentication message-digest
R4(config-router)#area 2 virtual-link  23.1.1.2  message-digest-key 1 md5 1234

路由彙總

彙總後將減小產生 3 類 LSA 的數量,減少帶寬,提高性能。

區域間彙總

在 ABR 配置: Area1 的路由進行彙總

# 在 R1 上配置
R1(config)#router ospf 100
# area 1 表示所需彙總路由的區域
R1(config-router)#area 1 range 10.1.0.0 255.255.252.0
# 可加參數,進行路由過濾
not-advertise

# 在 R2 查看
R2#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, 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
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      10.0.0.0/22 is subnetted, 1 subnets
O IA     10.1.0.0 [110/11] via 12.1.1.1, 00:00:08, Ethernet0/0
      12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        12.1.1.0/24 is directly connected, Ethernet0/0
L        12.1.1.2/32 is directly connected, Ethernet0/0
      23.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        23.1.1.0/24 is directly connected, Ethernet0/1
L        23.1.1.2/32 is directly connected, Ethernet0/1
      34.0.0.0/24 is subnetted, 1 subnets
O        34.1.1.0 [110/20] via 23.1.1.3, 01:04:26, Ethernet0/1
      45.0.0.0/24 is subnetted, 1 subnets

區域外匯總

在 ASBR 配置: 將外部路由進行彙總後再重分佈到上 OSPF

R4(config)#router ospf 100
# 將 eigrp 中的路由重分佈到 ospf 中
R4(config-router)#redistribute eigrp 50
# 將路由彙總
R4(config-router)#summary-address 60.1.0.0 255.255.252.0

缺省路由下發

向 OSPF 區域內發佈缺省路由,無法使用重分佈命令進行路由的下發

# 假設 R4 連接的是 ISP 的網絡,會在 R4 配置默認路由,並引入到 OSPF 區域內
R4(config)#ip route 0.0.0.0 0.0.0.0 46.1.1.5
R4(config)#router ospf 100
R4(config-router)#default-information originate
# 加入 always 表示無論是否自身有缺省路由,都會想 OSPF 域內下發

被動接口

當一些路由器連接的是交換機接口時,這時發送 OSPF 報文給交換機是沒有意義的,所以一般會將和交換機連接的接口設置成被動接口。

R1(config)#router ospf 100
R1(config-router)#passive-interface ethernet 0/1

OSPFV3 配置

ipv6 router ospf 100
router-id 1.1.1.1
int e 0/0
ipv6 ospf 100 are3

SPF 算法

cost = 10^8 / 10mbps = 10

cost = 10^8 / 100mbps = 1

cost = 10^8 / 1000mbps = 0.1

但由於只能是整數,所以千兆鏈路也是 1 所以無法區分百兆和千兆鏈路。這裏可以採用修改標準比如將 十兆帶寬的標準修改爲 10^9 ,但需要注意的是,在所有的鏈路都要修改

排錯

  1. 檢查直連連通性
  2. 查看鄰居表是否正常建立
    1. router-id 唯一(show ip protocols
    2. 鏈路兩端 Area 號不一致(show run | s router ospf, show run interface x
    3. 認證方式是否匹配
    4. Hello 報文 Dead 計時器設置不一致
      1. Broadcast,P2P: Hello 10s, Dead 20s;
      2. NBMA,P2MP,P2MP-NB: Hello 30s, Dead:120s
    5. 廣播型網絡,接口掩碼是否一致
    6. DBD mtu 設置不一致(卡到 ExStart 狀態)
      1. 配置相同 MTU
      2. 在小的 MTU 端配置,忽略 MTU(ip ospf mtu-ignore)
    7. Hello包:特殊區域標識位不一致
    8. Hello 包: 優先級相同(都爲 0 無法建立連接)
  3. 查看是否有路由
    1. 對應網絡是否通告
    2. 是否配置路由過濾

OSPF 配置

實驗1:模擬特殊區域情況。

在 R1 和 R5 配置去往 6.6.6.6 / 24 的默認路由,但在 R6 是通過重分佈引入 OSPF,開銷計算爲 Type1.

而 R1 所在區域模擬性能不好的情況,配置爲特殊區域.

在 R5 上配置到 6.6.6.6 網絡的默認路由,並設置開銷計算爲 Type1:

# R5 - 配置靜態路由
ip route 6.6.6.0 255.255.255.0 56.1.1.6
# 重分佈到 OSPF
router ospf 100
redistribute static metric-type 1

# 在 R1 上查看 metric:
類型爲 E1,並且 Metric 爲 60:以太網口默認爲 10 mbps = 10^8/ 10^7=10, 所以內部開銷爲 10 + 10 + 10 + 10 + 40.
對於思科設備來說,外部開銷默認爲 20,所以加起來一共 60.

將 Area1 配置 Stub 區域 - ABR 不傳播自治系統外的路由:

# R1 配置 stub 區域,
Router1(config-router)#area 1 stub
# R2 配置 stub 區域
Router2(config-router)#area 1 stub

可以發現,之前去往 6.6.6.6 的外部路由已經沒有了,多了一條 O*IA 的默認路由

需要將 stub 區域中的路由器都配置成 stub,否則會因爲 Hello 中無法匹配 Stub 標識,導致無法連接鄰居。

並且在 R1 查看數據庫:可以發現,無法區域外部路由已經沒有了。

Router#show ip ospf database

            OSPF Router with ID (1.1.1.1) (Process ID 100)

                Router Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         1329        0x80000008 0x007786 1
2.2.2.2         2.2.2.2         1324        0x80000009 0x003AB8 1

                Net Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
12.1.1.2        2.2.2.2         1324        0x80000005 0x0028EB

                Summary Net Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
0.0.0.0         2.2.2.2         1324        0x80000002 0x0073C1
23.1.1.0        2.2.2.2         1324        0x80000004 0x00868A
34.1.1.0        2.2.2.2         1324        0x80000004 0x005BA0
45.1.1.0        2.2.2.2         1324        0x80000004 0x0030B6

將 Area 區域配置爲完全 stub 區域, 連區域間的路由信息也不要 - 在 ABR 上配置:

# 在 ABR R2 配置完全 stub 區域
Router2(config-router)#area 1 stub no-summary

# 在 R1 上查看,發下區域間的路由也沒有了
Router#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, 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
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is 12.1.1.2 to network 0.0.0.0

O*IA  0.0.0.0/0 [110/11] via 12.1.1.2, 00:00:02, Ethernet0/0
      1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        1.1.1.0/24 is directly connected, Loopback0
L        1.1.1.1/32 is directly connected, Loopback0
      12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        12.1.1.0/24 is directly connected, Ethernet0/0
L        12.1.1.1/32 is directly connected, Ethernet0/0
Router#show ip ospf database

            OSPF Router with ID (1.1.1.1) (Process ID 100)

                Router Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         1666        0x80000008 0x007786 1
2.2.2.2         2.2.2.2         1661        0x80000009 0x003AB8 1

                Net Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
12.1.1.2        2.2.2.2         1661        0x80000005 0x0028EB

                Summary Net Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
0.0.0.0         2.2.2.2         7           0x80000004 0x006FC3

將 Area 區域配置爲NSSA 區域, 不要區域外部路由,但允許本區域內配置外部路由 :

# R1 配置 nssa 區域,
Router1(config-router)#area 1 nssa
# R2 配置 nssa 區域
Router2(config-router)#area 1 nssa

# 在 R6 上配置 7.7.7.7/24 的迴環口 Lo 2
# 在 R1 配置到 6.6.6.6 的靜態路由
Router1(config)#ip route 7.7.7.0 255.255.255.0 16.1.1.6
# 重分佈 static
Router1(config-router)#redistribute static

# 此時 R1 作爲 ABR 連接了外部路由器
# 查看 R2 路由信息,多出了去往 7.0 網絡的路由:
Router#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, 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
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is not set

      2.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        2.2.2.0/24 is directly connected, Loopback0
L        2.2.2.2/32 is directly connected, Loopback0
      6.0.0.0/24 is subnetted, 1 subnets
O E1     6.6.6.0 [110/50] via 23.1.1.2, 00:08:38, Ethernet0/1
      7.0.0.0/24 is subnetted, 1 subnets
O N2     7.7.7.0 [110/20] via 12.1.1.1, 00:04:32, Ethernet0/0
      12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        12.1.1.0/24 is directly connected, Ethernet0/0
L        12.1.1.2/32 is directly connected, Ethernet0/0
      23.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        23.1.1.0/24 is directly connected, Ethernet0/1
L        23.1.1.1/32 is directly connected, Ethernet0/1
      34.0.0.0/24 is subnetted, 1 subnets
O        34.1.1.0 [110/20] via 23.1.1.2, 00:08:38, Ethernet0/1
      45.0.0.0/24 is subnetted, 1 subnets
O IA     45.1.1.0 [110/30] via 23.1.1.2, 00:08:38, Ethernet0/1

# 在 R2 需要手動配置,爲其他設備添加默認路由信息:
Router2(config-router)#area 1 nssa default-information-originate

# 在 R1 查看路由,多了一條默認路由,注意下發的是 7 類默認路由
Router#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, 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
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is 12.1.1.2 to network 0.0.0.0

O*N2  0.0.0.0/0 [110/1] via 12.1.1.2, 00:00:18, Ethernet0/0
      1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        1.1.1.0/24 is directly connected, Loopback0
L        1.1.1.1/32 is directly connected, Loopback0
      7.0.0.0/24 is subnetted, 1 subnets
S        7.7.7.0 [1/0] via 16.1.1.6
      12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        12.1.1.0/24 is directly connected, Ethernet0/0
L        12.1.1.1/32 is directly connected, Ethernet0/0
      16.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        16.1.1.0/24 is directly connected, Ethernet0/1
L        16.1.1.1/32 is directly connected, Ethernet0/1
      23.0.0.0/24 is subnetted, 1 subnets
O IA     23.1.1.0 [110/20] via 12.1.1.2, 00:21:19, Ethernet0/0
      34.0.0.0/24 is subnetted, 1 subnets
O IA     34.1.1.0 [110/30] via 12.1.1.2, 00:21:19, Ethernet0/0

將 Area 區域配置爲完全 NSSA 區域, 不要區域外部路由,但允許本區域內配置外部路由 :

# 在 R2 開啓 
Router2(config-router)#area 1 nssa no-summary
# 在 R1 查看路由,發現區域間路由沒有了
Router1#show ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, 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
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is 12.1.1.2 to network 0.0.0.0

O*IA  0.0.0.0/0 [110/11] via 12.1.1.2, 00:00:09, Ethernet0/0
      1.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        1.1.1.0/24 is directly connected, Loopback0
L        1.1.1.1/32 is directly connected, Loopback0
      7.0.0.0/24 is subnetted, 1 subnets
S        7.7.7.0 [1/0] via 16.1.1.6
      12.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        12.1.1.0/24 is directly connected, Ethernet0/0
L        12.1.1.1/32 is directly connected, Ethernet0/0
      16.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C        16.1.1.0/24 is directly connected, Ethernet0/1
L        16.1.1.1/32 is directly connected, Ethernet0/1

注意此時默認路由變成了 OIA 原因在於,執行 no-summary 會產生一條3類LSA 0.0.0.0 的默認路由,會優先選擇該路由。

Router#show ip ospf database

            OSPF Router with ID (1.1.1.1) (Process ID 100)

                Router Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum Link count
1.1.1.1         1.1.1.1         198         0x80000014 0x00ECFA 1
2.2.2.2         2.2.2.2         15          0x80000019 0x00A731 1

                Net Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
12.1.1.2        2.2.2.2         525         0x80000004 0x00B15B

                Summary Net Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum
0.0.0.0         2.2.2.2         16          0x80000001 0x00FC31

                Type-7 AS External Link States (Area 1)

Link ID         ADV Router      Age         Seq#       Checksum Tag
0.0.0.0         2.2.2.2         1118        0x80000001 0x00D0D8 0
7.7.7.0         1.1.1.1         1616        0x80000001 0x00E38A 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章