天天看點

簡述ospf的工作原理_OSPF 一文詳解

動态路由

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

發現遠端網絡

路由器可以直接獲得直連路由,這是由路由器的接口 IP 位址得到。動态路由能夠自動學習遠端目的路由條目。

維護和更新路由資訊

路由資訊儲存在路由器的路由表中。但路由的情況有時會發生變動。動态路由支援自動更新這些變化

在多個到達目的網絡的路徑之中選擇最優路徑

有時,路由協定會計算出到達同一目的網絡的多條可用路徑,路由協定需要有辦法在多條路徑之中選出最優的一條用于轉發資料。

在目前路徑不可用時發現一條新的可行路徑的能力

我們給這種過程(網絡發生變化後,路由協定重新對路由進行計算并與其它路由器交換路由資訊)起了一個名字,叫收斂。收斂的最終結果是網絡重新回到一個穩定的正确的工作狀态。收斂的速度越快越好,是展現路由協定性能的重要名額。

鍊路狀态路由協定

在介紹具體 OSPF 協定前,先來比較一下鍊路狀态路由協定和距離矢量路由協定的差別:

  • 鍊路協定具有更好的擴充性,比如 RIP 隻能最多有 15 台路由器,而 OSPF 沒有這個限制。
  • 每個路由器都有一張完整的拓撲結構(LSDB)
  • 周期的觸發更新(LSA,後面會提到)
  • 在在拓撲有更新時,鍊路狀态的反應速度會更快
  • 路由器之間可以交流更多的資訊。

鍊路狀态協定的資料結構:

簡述ospf的工作原理_OSPF 一文詳解

這裡簡單說一下過程,假設上面四台路由器中都遵從鍊路狀态協定,在每台路由器啟動後,會将 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 的最短路徑算法計算出到達每個網絡的最短路徑(就是路由表中的内容)。

工作過程

鍊路狀态路由協定的主要工作原理是:

簡述ospf的工作原理_OSPF 一文詳解

通過讓拓撲中的每台路由器都在整個拓撲的範圍内泛洪自己的鍊路狀态通告(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)(隻有一個接口位于骨幹區域)
簡述ospf的工作原理_OSPF 一文詳解

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

OSPF 封包類型

  1. Hello 封包,用于 OSPF 鄰居動态發現,鄰居參數協商,鄰居關系維護。
  2. DBD 封包,資料庫描述。
  3. 用于傳遞 LSDB 摘要資訊,實際上是 LSDB 中 所有 LSA 的頭部資訊。OSPF 路由器通過交換 DBD 封包,來統計自己缺少的 LSA 并向對端發送 LSR 封包進行請求
  4. 用于主從路由器的選舉
  5. LSR 封包,用于向鄰居請求自己 LSDB 中沒有的 LSA
  6. LSU 封包,LSU 用于給鄰居發送它們請求的 LSA,隻有 LSU 封包中會包含完整的 LSA
  7. 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。
  2. 原則是先比較 Hello 封包中的優先級(0 - 255),其次 Router ID。
  3. 稱為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 值。
  2. 如果管理者沒有顯式配置 Router-ID,路由器擷取自身最大的環回接口 IP 位址作為自己的 Router-ID
  3. 如果沒有配置環回接口,則擷取最大實體接口 IP 位址作為自己的 Router-ID。推薦對 Router-ID 進行手工配置。
  4. Hello Interval&Dead Interval,Hello 計時器和死亡計時器。預設在高速鍊路上,為10秒 40秒。當 Hello 計時器逾時,路由器将發送Hello 封包,當死亡計時器逾時,路由器将會斷掉與該鄰居的鄰居關系。而每次從鄰居收到 Hello 封包将重置死亡計時器。建立鄰居關系的路由器要求擁有完全一緻的 Hello 和 Dead Interval。
  5. Active Neighbors,活躍鄰居,一個發送 Hello 封包路由器的鄰居清單。
  6. Area ID,區域号,代表該接口屬于哪個 OSPF 區域。建立鄰居關系的兩個路由器(兩個接口)必須屬于同一個區域。
  7. Router Priority: 接口的優先級,影響 DR,BDR 選舉。越大越好,預設為 1,最大為 255,當優先級為 0 時,代表不參與 DR,BDR 選舉。
  8. DR 指定路由器,BDR 備份指定路由器。在每個鍊路上通過選舉産生,路由器優先級越大越好,當優先級都相等時,選舉 Router-ID 最大的路由器。
  9. Authentication Type&Date,認證類型與認證資料,認證類型訓示鄰居關系使用什麼方式進行認證(空:不認證,明文認證,MD5 摘要認證),預設使用空認證且不攜帶認證資料。認證類型或認證資料不一緻都會導緻 OSPF 鄰居建立失敗。
  10. Stub Area Flag 末節區域标記,建立鄰居的路由器必須擁有完全一緻的末節區域标記。

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

簡述ospf的工作原理_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 狀态遷移。
建立鄰接關系:
簡述ospf的工作原理_OSPF 一文詳解
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 通信過程

簡述ospf的工作原理_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 狀态:
簡述ospf的工作原理_OSPF 一文詳解

可以看到這時發送的 Hello 包發往 224.0.0.5 多點傳播位址。并且封包裡,沒有記錄活躍的鄰居。

init 到 2-way 狀态:
簡述ospf的工作原理_OSPF 一文詳解

這時 R1 收到了 R2 的 Hello 封包,并告訴對方我的鄰居是你,這時就可以成為 2-Way 狀态了。對應就是 Active Neighbor 字段,這裡是 23.1.1.1 是因為 R2 的 router-id 沒有指定,也沒有 loopback 接口,是以用的是實體接口。

2-way到 exstart狀态:
簡述ospf的工作原理_OSPF 一文詳解

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

Exchange狀态到 Full 狀态:
簡述ospf的工作原理_OSPF 一文詳解

R1 發送 LSR 封包,擷取缺少的鍊路狀态。R2 回複 LSU 封包。之後發送 LSU 到多點傳播,然後對方進行 Ls Ack 進行确認。

OSPF 基本 Header

簡述ospf的工作原理_OSPF 一文詳解
  • 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 封包

簡述ospf的工作原理_OSPF 一文詳解
  • 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 用于選舉:

簡述ospf的工作原理_OSPF 一文詳解

正常 DBD 用于同步狀态:

簡述ospf的工作原理_OSPF 一文詳解
  • 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 封包

簡述ospf的工作原理_OSPF 一文詳解
  • LS Type: LSA 種類
  • Link State ID:根據 LS Type 而變化
  • Advertising Router: 始發這條 LSA 的路由器的 Router Id.

LSU 封包

簡述ospf的工作原理_OSPF 一文詳解
  • number of LSAs: 包含 LSA 的數量
  • LSA :具體的 LSA 資訊

LS ACK 封包

簡述ospf的工作原理_OSPF 一文詳解

OSPF 網絡類型

簡述ospf的工作原理_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 還原拓撲結構

簡述ospf的工作原理_OSPF 一文詳解

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 所在網絡中的網絡資訊和拓撲資訊

簡述ospf的工作原理_OSPF 一文詳解

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.

簡述ospf的工作原理_OSPF 一文詳解
  • 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 上檢視引入的路由(區域間的路由,不是本區域的路由):

簡述ospf的工作原理_OSPF 一文詳解

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 的更新:

簡述ospf的工作原理_OSPF 一文詳解
  • 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 一樣。

簡述ospf的工作原理_OSPF 一文詳解

AS External Link States - 7 類 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 之間連接配接的虛鍊路,讓非骨幹區域連接配接到骨幹區域:

簡述ospf的工作原理_OSPF 一文詳解

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

簡述ospf的工作原理_OSPF 一文詳解

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

  • 在兩端裝置同時配置,并且處于同一區域。
  • 傳輸區域不能是特殊區域。
  • 其中一台裝置必須連接配接骨幹區域。
  • 如果骨幹區域配置認證,虛鍊路也需要配置認證。

配置

按照第一個圖正常配置 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 算法

簡述ospf的工作原理_OSPF 一文詳解
簡述ospf的工作原理_OSPF 一文詳解

cost = 10^8 / 10mbps = 10

cost = 10^8 / 100mbps = 1

cost = 10^8 / 1000mbps = 0.1

但由于隻能是整數,是以千兆鍊路也是 1 是以無法區分百兆和千兆鍊路。這裡可以采用修改标準比如将 十兆帶寬的标準修改為 10^9 ,但需要注意的是,在所有的鍊路都要修改

排錯

  1. 檢查直連連通性
  1. 檢視鄰居表是否正常建立
  2. router-id 唯一(

    show ip protocols

  3. 鍊路兩端 Area 号不一緻(

    show run | s router ospf

    ,

    show run interface x

  4. 認證方式是否比對
  5. Hello 封包 Dead 計時器設定不一緻
    1. Broadcast,P2P: Hello 10s, Dead 20s;
    2. NBMA,P2MP,P2MP-NB: Hello 30s, Dead:120s
  6. 廣播型網絡,接口掩碼是否一緻
  7. DBD mtu 設定不一緻(卡到 ExStart 狀态)
    1. 配置相同 MTU
    2. 在小的 MTU 端配置,忽略 MTU(ip ospf mtu-ignore)
  8. Hello包:特殊區域辨別位不一緻
  9. Hello 包: 優先級相同(都為 0 無法建立連接配接)
  1. 檢視是否有路由
    1. 對應網絡是否通告
    2. 是否配置路由過濾

OSPF 配置

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

在 R1 和 R5 配置去往 6.6.6.6 / 24 的預設路由,但在 R6 是通過重分布引入 OSPF,開銷計算為 Type1.

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

簡述ospf的工作原理_OSPF 一文詳解

在 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.
           
簡述ospf的工作原理_OSPF 一文詳解

将 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 辨別,導緻無法連接配接鄰居。
簡述ospf的工作原理_OSPF 一文詳解

并且在 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