- OSPF 基本配置指令
-
- 進入 OSPF 程序配置模式:Router(config)#router ospf <程序号>
- 在 OSPF 程序中宣告接口:Router(config-router)#network <接口 IP 位址> 0.0.0.0 area <區域号>
- 0.0.0.0 為反掩碼,用于比對一部分接口,能夠被最短反掩碼比對到的接口優先宣告。
- 在接口配置模式中直接宣告接口(優先級高于程序宣告):Router(config-if)#ip ospf <程序号> area <區域号>
- Show 指令
- 檢視 OSPF 配置:Router#show running-config | section ospf
- 檢視哪些接口被宣告進 OSPF 程序中:Router#show ip ospf interface brief
- 檢視 OSPF 鄰居:Router#show ip ospf neighbor
- 檢視 OSPF 路由表:Router#show ip route ospf
- 檢視 LSDB 報頭:Router#show ip ospf database
- 重置 OSPF 程序: Router#clear ip ospf process
- OSPF 運作于 IP 協定之上, 協定号 為 89 。
- OSPF 的 ToS 字段為 IP 優先級 6 。
- ToS 字段的前 3 bit 為 110。
- OSPF 封包隻支援 單點傳播 或 多點傳播 發送。
-
-
- OSPF 是基于 鍊路狀态 的路由協定,同一區域内的路由器之間不互動路由表(而是互動 LSA )。
- OSPF 支援無限的跳數。
- OSPF 既支援 觸發更新 ,也支援 周期性更新 (預設每 30min 泛洪一次 LSA)。
- OSPF 的 程序号 隻具有 本地意義 。
- 如果一個接口同時被多個程序宣告,那麼隻有 第一個 宣告它的程序有效。
-
- OSPF 是一種 階層化 的路由協定
- 它可将整個網絡 基于接口 分為 衆多區域 (不同的接口可宣告進不同區域)。
- 一個區域可以看作是一個 AS 的子集 。
- 小型網絡設計多區域的意義不大。
- 如果某個區域内的某台路由器某個宣告進 OSPF 的 接口不停地 Up/Down ,将會導緻該區域内所有路由器的 LSDB 不停地變動 。在這種情況下,劃分多區域可以減小由于接口不停地 Up/Down 造成的影響範圍。
- 在多區域 OSPF 網絡中,必須指定一個編号為 0( Area 0 )的 骨幹區域 (也叫 傳輸區域 )。
- 在 同個區域 内 絕對不可能出現路由環路 。
- 區域中的每台路由器都知道區域中其它所有路由器是怎麼連接配接的。
- 非骨幹區域都必須和骨幹區域有連接配接 。
- 強制 形成星型拓撲 ,防止環路産生。
- 由于 區域間無法傳遞拓撲資訊 ,是以 隻有區域或 AS 間才可進行路由彙總或聚合 。
- 區域間的路由 使用 距離矢量 協定的算法來計算。
- 非骨幹區域的類型
- 正常區域
- Hello 封包中的 Flag 字段: E=1 ( 允許 5 類 LSA 存在), N=0 (不是 NSSA 區域)。
- Stub 區域 :末節區域
- 不允許 ASBR ( 4、5 類 LSA )存在。
- ABR 不會讓 4、5 類 LSA 進入 Stub 區域。
- Hello 封包中的 Flag 字段: E=0 ( 不允許 5 類 LSA 存在 ), N=0 ( 不是 NSSA 區域 )。
- Stub 區域内的 ABR 會下放路徑成本為 1 的 預設路由 ( 3 類 LSA )到該 Stub 區域内。
- 區域内 所有路由器均要配置 。
- 配置 Stub 區域 可減少 LSA 的數目及路由表條目 。适用于 沒有多餘選路需求 (要 通路區域外的網段隻能通過 ABR )的區域。
- Stub 區域中 不允許存在 Virtual Link 。
- Area 不允許配置成 Stub 區域 。
- 配置指令
- Router(config-router)#area <區域号> stub
- Totally Stub 區域 :完全末節區域
- 在 Stub 區域的基礎上 , 不允許 3 類 LSA (ABR 生成預設路由對應的 LSA 除外)存在。
- 在 Totally Stub 區域中, 隻允許 一條 由 ABR 産生的預設路由對應的 3 類 LSA 存在。
- 隻需在 ABR 上配置 Stub 區域指令的後面加上 no-summary 就可以了。
- NSSA (No-so-Stubby) 區域 :不那麼末節區域
- Hello 封包中的 Flag 字段: E=0 ( 不允許 5 類 LSA 存在), N=1 ( NSSA 區域 )。
- 在 Stub 區域的基礎上 支援 ASBR 。
- NSSA 區域内的 ABR 以及 ASBR 不會主動下放預設路由 。
- ASBR 重分發進 OSPF 的路由條目以 7 類 LSA (特殊的 5 類 LSA)的方式發送。
- 7 類 LSA 在擴散到其他區域之前必須 由該區域内路由器 ID 最高的 ABR 轉換為 5 類 LSA ,且 轉換者對其他區域來說才是 ASBR (前提是轉換後的 5 類 LSA 不帶FA)。
- 在新版的 IOS 中,也可強制指定轉換者。
- 強制指定轉換者的指令:Router(config-router)#area <區域号> nssa translate type7 always
- 區域内 所有路由器均要配置 。
- NSSA 區域中 不允許存在 Virtual Link 。
- Area 不允許配置成 NSSA 區域 。
- 如果 NSSA 區域中 存在僞 ABR ,而恰巧該 僞 ABR 的路由器 ID 是 NSSA 區域中最大的 ,則會導緻 轉換後的 5 類 LSA 不能發往 NSSA 區域外 。
- 應盡量確定 NSSA 區域内隻包含一台 ABR ,否則可能會出現 非對稱路由 、 次優路徑 或 環路 。
- 非對稱路由可能會出現的環境:非轉換者 ABR 下放的預設路由的路徑成本比轉換者 ABR 下放的預設路由的路徑成本小,這就導緻了 NSSA 區域内主機通路區域外網絡時去包走的是非轉換者 ABR,而回包走的卻是轉換者 ABR(因為隻有轉換者 ABR 才能向 NSSA 區域外通告 5 類 LSA,這導緻了 NSSA 區域外的主機通路 NSSA 區域内的網絡隻能走轉換者 ABR)。
- 配置指令
- Router(config-router)#area <區域号> nssa [default-information-originate] [no-redistribution]
- default-information-originate 表示 以 7 類 LSA 的方式向該區域内下放預設路由 (如果是 ASBR ,則路由表中 必須要有預設路由 才能生效)。
- no-redistribution 表示不要将重分發進 OSPF 的路由條目下放到 NSSA 區域中。如果路由器在 NSSA 區域中既是 ABR 也是 ASBR,且還是 NSSA 區域的出口的話,可以添加這個關鍵字。
- Totally NSSA 區域 :完全 NSSA 區域
- 在 NSSA 區域的基礎上 , 不允許 3 類 LSA (ABR 生成預設路由對應的 LSA 除外)存在。
- 在 Totally NSSA 區域中, 隻允許 一條 由 ABR 産生的預設路由對應的 3 類 LSA 存在。
- 該區域内的 ASBR 不能是整網的出口 (ASBR 不能有預設路由)。
- 因為該區域内 ABR 下放的預設路由 ( O IA ) 的優先級要比 ASBR 下放的預設路由 ( O N1/2 ) 的優先級高 。
- 比較少用。
- 隻需在 ABR 上配置 NSSA 區域指令的後面加上 no-summary 就可以了。
- 正常區域
- 路由器類型
- 普通路由器
- ABR ( 區域邊界 路由器)
- ASBR ( 自治系統邊界 路由器)
- 檢視 ABR 和 ASBR 的指令:Router#show ip ospf border-routers
- ABR 一定要 和 Area 0 挂靠 ,否則 不能産生 3 類 LSA 。
- 僞 ABR :在 Area 0 中 沒有 Full 鄰居 。
- 不遵循 3 類 LSA 防環原則。
- 例如:一台路由器隻有環回口宣告進了 Area 0。
- 真 ABR :在 Area 0 中 有 Full 鄰居 。
- 遵循 3 類 LSA 防環原則 。
- 僞 ABR :在 Area 0 中 沒有 Full 鄰居 。
- ASBR 可以放在任意區域中(Stub 以及 Totally Stub 區域除外)。
- Area 0 不允許過濾 LSA (必須包含 全路由 )。
- 它可将整個網絡 基于接口 分為 衆多區域 (不同的接口可宣告進不同區域)。
- 目前 OSPF 一般使用 iSPF 以及 PRC 算法計算同一區域内的路由。
- 每台路由器都以自身為根,計算從自身去往每一個網絡的路徑,再結合 LSA 中的網絡資訊生成路由條目。
- OSPF 是一種 階層化 的路由協定
-
- 運作 OSPF 的路由器 必須有一個路由器 ID 。
- 如果不指定路由器 ID,OSPF 預設使用 環回口中最大的 IP 位址 作為路由器 ID。如果 沒有設定環回口 則使用 接口中最大的 IP 位址 作為路由器 ID。
- 如果在已經有 OSPF 鄰居的情況下修改了路由器 ID,那麼必須 重置 OSPF 程序 才能讓設定生效。
- 指定路由器 ID 的指令:Router(config-router)#router-id <路由器 ID>
- OSPF 的 網絡類型 (不同網絡類型的 OSPF 的運作方式有所不同)
- Loopback :環回
- 環回口 預設的網絡類型。
- 不發送 Hello 。
- 不建立鄰居 。
- 隻能通告 /32 路由 。
- 可能會 影響 MPLS 标簽分發 。
- 僅限環回口 使用。
- Broadcast :廣播
- 以太網 預設的網絡類型。
- 10s 發送一次 Hello 。
- 支援多點傳播發送 OSPF 封包 。
- 選舉 DR/BDR 。
- 所有節點邏輯直連
- 通告路由條目的 下一跳為生成這條路由條目的路由器接口的 IP 位址 。
- Non-Broadcast (MBMA):非廣播
- 幀中繼 (含 多點子接口 )預設的網絡類型。
- 30s 發送一次 Hello 。
- 不支援多點傳播發送 OSPF 封包 。
- 需要 手動指定 OSPF 鄰居 (思科隻需要單向指定)。
- 選舉 DR/BDR 。
- 在幀中繼環境中,必須 讓 Hub 節點當 DR 。然後讓 所有 Spoke 節點當 DROthers 就好了(當 BDR 沒有任何意義,因為如果 Hub Down 了的話整個網絡就都不可用了)。
- 所有節點邏輯直連
- 通告路由條目的 下一跳為生成這條路由條目的路由器接口的 IP 位址 。
- Point-to-Point :點對點
- PPP 、 HDLC 、 幀中繼點對點子接口 、 BRI 等預設的網絡類型。
- 10s 發送一次 Hello 。
- 支援多點傳播發送 OSPF 封包 。
- 隻能建立一個鄰居 。
- 如果用在 MA 網絡中且鄰居不止一個的話會造成鄰居頻繁 Up/Down。
- 不選舉 DR/BDR 。
- Point-to-MultiPoint :點對多點
- 無預設對應接口類型 (需要通過指令才能使用)。
- 30s 發送一次 Hello 。
- 支援多點傳播發送 OSPF 封包 。
- 不選舉 DR/BDR 。
- 鄰居一旦建立完畢,會把 自身接口的 IP 位址以 /32 形式的路由 通告給對方。
- 所有節點不邏輯直連
- 通告路由條目的 下一跳為發出這條路由條目的路由器接口的 IP 位址 。
- 幀中繼的完美解決方案(不用在 Spoke 節點做額外的 DLCI 映射)。
- Point-to-MultiPoint Non-Broadcast :點對多點非廣播
- 跟 Point-to-MultiPoint 基本相同,隻是 不支援多點傳播 ,需要手動指定鄰居而已。
- Loopback :環回
- 如果幀中繼中 Hub 節點用 Point-to-MultiPoint , Spoke 節點用 Point-to-Point 的話,預設是無法建立鄰居的(因為 Hello 周期不一緻 )。
- Point-to-Point 可以和 Broadcast 建鄰居 ,但 無法傳遞路由 (因為 1 類 LSA 中鍊路的類型不一緻 )。
- 環回口隻能使用 Loopback、Point-to-Point 網絡類型
- 使用 Point-to-Point 時可以通告 非 /32 路由。
- 修改網絡類型的指令:Router(config-if)#ip ospf network <網絡類型>
-
- OSPF 使用的 多點傳播組位址
- 224.0.0.5 : 所有 OSPF 路由器都監聽 。
- 224.0.0.6 : MA 網絡中的 DR、BDR 監聽 。
- OSPF 的 封包
- Hello
- 用于 鄰居建立 及 鄰接關系維護 。
- 發送周期和網絡類型有關 。
- 鄰居建立之後,如果在 4 倍 Hello 周期 ( Dead 時間 ) 内都沒有收到回應則 Down 鄰居 。
- 強制指定 Hello 周期的指令:Router(config-if)#ip ospf hello-interval <秒數>
- 設定 Hello 周期為最小值(50 毫秒)的指令:Router(config-if)#ip ospf dead-interval minimal hello-multiplier 20
- 指定 Hello 周期的同時 Dead 時間也會被修改 (前提是 沒有指定 Dead 時間 )。
- 強制指定 Dead 時間的指令:Router(config-if)#ip ospf dead-interval <秒數>
- 路由器之間如果 隻互動過 Hello 封包 ,則 隻能将鄰接關系建立到 2-way 狀态機 。
- DBD (資料庫描述)
- 包含 LSA 報頭 ( LSA 的名字 ( LSID )、 通告的路由器 ( Adv Router )、 校驗和 、 序列号 )。
- 包含 Flags 字段 ( Init 位 、 More 位 、 M/S 位 )。
- 在 2-way 鄰接狀态機之後 發送。
- 支援 顯式确認 和 隐式确認 。
- LSR (鍊路狀态請求)
- 包含 LSA 三元組 ( LSA 的名字 ( LSID )、 通告的路由器 ( Adv Router )、 LSA 的類型 )。
- LSU (鍊路狀态更新)
- 包含 完整 LSA 。
- 一個 LSU 封包 中可包含 多個 LSA 。
- LSAck (鍊路狀态确認)
- 針對 LSU 中的 LSA 進行确認 。
- 包含 LSA 報頭 ( LSA 的名字 ( LSID )、 通告的路由器 ( Adv Router )、 校驗和 、 序列号 )。
- Hello
- 隐式确認與顯式确認
- 顯式确認 :使用 獨立、具有确認功能的其它類型封包 ( LSU 、 LSAck )作确認。
- LSR 、 LSU 使用 顯式确認 ( LSR 使用 LSU 作為确認, LSU 使用 LSAck 作為确認)。
- 隐式确認 :使用 相同類型的回應封包 作确認。
- 隻用于 DBD 互動 。
- 鄰居路由器可使用 相同序列号的 DBD 既做确認又做回應 。
- 隻用于 DBD 互動 。
- 顯式确認 :使用 獨立、具有确認功能的其它類型封包 ( LSU 、 LSAck )作确認。
- 隐式确認的 序列号誰說了算?
- 需要在鄰接狀态機為 Exstart 時選舉出 Master/Slave 路由器。
- 路由器 ID 大 者做 Master 。
- 序列号由 Master 說了算 。
- 需要在鄰接狀态機為 Exstart 時選舉出 Master/Slave 路由器。
- OSPF 使用的 多點傳播組位址
-
- OSPF 鄰居的分類
- Neighbor (鄰居): 隻互動過 Hello 封包 (狀态機為 2-way )。
- Adjacency (鄰接): 互動過全部類型的 OSPF 封包、LSDB 已經同步完成 (狀态機為 Full )。
- DR (指定路由器)、 BDR (備份指定路由器)
- DR、BDR 指的是 路由器的某些接口 。
- 選舉一般隻在 某些網絡類型的 MA 網絡 中進行。
- 用來解決 MA 網絡中鄰接關系過于複雜的問題 。
- MA 網絡中 每添加一台路由器 ,整網鄰居數量将 呈幾何倍數 增長。
- 通過 網絡類型 來決定 是否進行選舉 。
- 用來解決 MA 網絡中鄰接關系過于複雜的問題 。
- 到達 2-way 狀态機之後再進行選舉。
- 選舉最多花費 4 倍 Hello 周期 。
- 不是 DR、BDR 的路由器稱為 DROthers 。
- DROthers 之間不需要互動 DBD。
- DR/BDR 選舉規則
- 先比較優先級 , 優先級相同再比較路由器 ID 。優先級或路由器 ID 最高者當選 DR , 次高者當選 BDR , 其他路由器做 DROthers 。
- 優先級為 的接口 隻能做 DROthers ,即 沒資格參選 。
- 設定接口優先級的指令:Router(config-if)#ip ospf priority <優先級>
- 先比較優先級 , 優先級相同再比較路由器 ID 。優先級或路由器 ID 最高者當選 DR , 次高者當選 BDR , 其他路由器做 DROthers 。
- 如果 DR 挂了 , BDR 将會 接替 DR 的角色 ,同時 選舉出另一個 BDR 。
- DR/BDR 在 正常情況下不能被搶占 ,如需搶占隻能 重置 OSPF 程序 。
- Hello 封包 中會包含 目前網絡已認可的 DR、BDR 。
- 需要選舉 DR/BDR 的網絡中 可以沒有 BDR ,但 一定要有 DR 。
- DR/BDR 的選舉要求 接口位址在同一個子網段内 。
- 如果一個 MA 網絡中有 不同網段 的鄰居,那麼選舉會 分網段 進行。
- 所有路由器 需要 與 DR、BDR 建立 Full 鄰居 。 DROthers 之間 隻需要 建立到 2-way 鄰居 即可。
- 所有路由器隻需要把 自身的 LSA 發送給 DR、BDR ( 目的 IP 為 224.0.0.6 ),由 DR 整理之後再統一通告 ( BDR 隻會整理不會通告 ) 給所有路由器 ( 目的 IP 為 224.0.0.5 )。
- OSPF 鄰居的分類
-
- OSPF 鄰接狀态機
- Down
- 剛剛在接口上啟用 OSPF,還 沒有收發過 OSPF 流量 。
- Attempt(可選)
- MBMA 網絡 、 點到多點網絡 手動指定鄰居之後 嘗試與鄰居建立連接配接的過程 。
- Init
- 收到鄰居的 Hello、但鄰居沒有收到我的 Hello ( 鄰居發送的 Hello 封包中沒有包含我的路由器 ID )。
- 2-way
- 鄰居已經收到我的 Hello ( 鄰居發送的 Hello 封包中已經包含我的路由器 ID )。
- 2-way 之後開始選舉 DR/BDR 。
- 到達該狀态機需要滿足的條件
- OSPF 版本号一緻 。
- 不能沖突的路由器 ID 。
- 區域一緻 。
- Hello 周期、Dead 時間一緻 。
- E、N 位一緻 。
- 認證資訊一緻 。
- 接口在同一子網中 ( Point-to-Point 網絡類型 除外 )。
- Exstart
- 鄰居雙方互動它們的 第一個 DBD , Flags 位中的 Init=1 , More=1 , M/S=1 ,用于 選舉 Master ( 序列号為随機 )。
- 選舉出 Master 之後, Slave 将進行第一次隐式确認 ( Flags 位中的 Init=0 , More=1 , M/S=0 , 序列号為 Master 指定的序列号 )。
- 包含鍊路的 MTU 資訊 。
- 在思科路由器上如果 鍊路兩端的 MTU 不一緻 ,會 卡在這個狀态機 。
- 這兩個 DBD 均不包含 LSA 資訊 。
- Exchange
- 互動 DBD (當兩台路由器的 DBD 大小不一緻時将使用顯式确認 )。
- Loading
- 互動 LSR 、 LSU 。
- Full
- 兩台路由器的 LSDB 已經同步 。
- Down
- OSPF 可以 在鄰接關系建立的過程中生成路由條目 。
- 被動接口
- 将某個接口 設定為被動接口之後 ,該接口 不能發送 Hello 封包 。
- 也就 沒法建立鄰居 , 沒法收發路由條目
- 設定某個接口為被動接口的指令:Router(config-router)#passive-interface <接口名>
- 将某個接口 設定為被動接口之後 ,該接口 不能發送 Hello 封包 。
- OSPF 鄰接狀态機
-
- OSPF 的 LSA
- 1 類 : 路由器 LSA (常用)
- 産生的路由器:所有路由器。
- 擴散範圍:該區域内所有路由器。
- 主要包含資訊:宣告進 OSPF 的接口的詳細資訊以及路徑成本。
- 以 鍊路的形式來描述各個接口資訊 。
- 鍊路類型
- Point-to-Point
- 不用選 DR/BDR (例如 Point-to-Point 網絡類型的接口)。
- 須 配合 Stub 類型的鍊路才可生成路由條目 。
- Link ID : 鄰居的路由器 ID 。
- 包含的資料 : 該鍊路本地接口的 IP 位址 。
- Transit
- 需要選 DR/BDR (例如 Broadcast 網絡類型的接口)。
- 須 配合 2 類 LSA 才可生成路由條目 。
- Link ID : DR 連接配接該 MA 網絡接口的 IP 位址 。
- 包含的資料 : 該鍊路本地接口的 IP 位址 。
- Stub
- 連接配接 主機 的鍊路( 末節鍊路 )。
- 配合 Point-to-Point 類型的鍊路可生成路由條目 。
- Link ID : 該鍊路本地接口的字首 。
- 包含的資料 : 該鍊路本地接口的掩碼 。
- Virtual
- 虛鍊路 專用。
- Link ID : 虛鍊路對端路由器的路由器 ID 。
- 包含的資料 : 去往對端路由器的本地始發位址 。
- 作用:讓路由器知道 該區域内的網絡是如何分布的 ,并 畫出該區域的拓撲圖 (如果該路由器 存在需要選舉 DR/BDR 的網絡 ,那麼 還需要 2 類 LSA 輔助 )。
- 一些特征
- LSID : 通告路由器的 ID 。
- Adv Router : 與 LSID 相同 。
- Type 字段
- 無 : 普通路由器 。
- B : ABR 。
- E : ASBR 。
- 每台路由器 關于它所屬的每個區域隻會産生一條 1 類 LSA 。
- 字首抑制
- 在 1 類 LSA 中隻通告環回(類型)接口以及被動接口的資訊。
- 啟用字首抑制的指令:Router(config-router)#prefix-suppression
- 如果不想通告被動接口的資訊,也可在接口配置模式下執行指令:Router(config-if)#ip ospf prefix-suppression
- 檢視 1 類 LSA 的指令:Router#show ip ospf database router
- 2 類 : 網絡 LSA (常用)
- 産生的路由器 : MA 網絡中的 DR 。
- 擴散範圍 : 該區域内所有路由器 。
- 主要包含資訊 : 該 MA 網絡中所有路由器的 ID 及子網路遮罩 。
- 作用:作為 一類 LSA 的補充 。
- 一些特征
- LSID : DR 連接配接 MA 網絡接口的 IP 位址 。
- Adv Router : DR 的路由器 ID 。
- 網絡中 有多少個 DR 就有多少條 2 類 LSA 。
- 檢視 2 類 LSA 的指令:Router#show ip ospf database network
- 3 類 : 彙總 LSA (常用)
- 産生的路由器 : ABR 。
- 擴散範圍 : 整個 AS 。
- 主要包含資訊 : 區域中的路由條目 ( 不包含拓撲資訊 ,可 彙總/聚合 ,一個路由條目對應一個 LSA)。
- 不含拓撲資訊也能防環的原因:去往同一區域中的 ABR 的路徑是無環的(因為能夠得知拓撲資訊),ABR 去往其他區域的路徑也是無環的(因為 OSPF 強制各個區域連成星型拓撲)。把這兩段鍊路連接配接在一起,隻要保證拓撲是無環的,整條路徑就是無環的。
- 作用:在 區域間傳遞路由條目 。
- 一些特征
- LSID : 區域間路由的字首 。
- Adv Router : ABR 的路由器 ID 。
- 當一條 3 類 LSA 跨越 ABR 時會修改 Adv Router 為目前被跨越 ABR 自身的路由器 ID (相應的 路徑成本也會被修改 )。
- 防環原則
- 當 真 ABR 從非骨幹區域收到 3 類 LSA 時,不會進行路由計算 。
- 非骨幹區域形成的 3 類 LSA 在傳遞給另一個非骨幹區域時必須經過骨幹區域中轉。
- 在 MPLS 中的防環機制
- 當綁定到 VRF 的 OSPF 程序在收到鄰居發送的三類 LSA 時不會計算路由。
- 關閉該防環機制的指令:Router(config-router)#capability vrf-lite
- 檢視 3 類 LSA 的指令:Router#show ip ospf database summary
- 4 類 : 彙總邊界路由器 LSA (常用)
- 産生的路由器 : ASBR 所在區域内的 ABR 。
- 擴散範圍 : 除了 ASBR 所在區域外的其它區域 。
- 主要包含資訊 : ASBR 路由器的 ID 、 該 ABR 到達 ASBR 的路徑成本 。
- 作用: 告訴其它區域内的路由器通過該 ABR 可到達 ASBR 及該 ABR 到達 ASBR 的路徑成本 。
- 一些特征
- LSID : ASBR 所在區域内 ABR 的路由器 ID 。
- Adv Router : 與 LSID 相同 。
- 當一條 4 類 LSA 跨越 ABR 時會修改 Adv Router 為目前被跨越 ABR 自身的路由器 ID (相應的 路徑成本也會被修改 )。
- 檢視 4 類 LSA 的指令:Router#show ip ospf database asbr-summary
- 5 類 : AS 外部 LSA (常用)
- 産生的路由器 : ASBR 。
- 擴散範圍 : 整個 AS 。
- 主要包含資訊 : 重分發進 OSPF 的路由條目 ( 不包含拓撲資訊 ,可 彙總/聚合 ,一個路由條目對應一個 LSA)。
- 作用:向 AS 内通告 重分發的路由條目 。
- 一些特征
- LSID : 外部路由的字首 。
- Adv Router : ASBR 的路由器 ID 。
- 當一條 5 類 LSA 跨越 ABR 時 Adv Router 不會被修改 ( 需要 4 類 LSA 或 Forward Address 輔助 才能計算路由)。
- 如果路由器 隻收到 5 類 LSA ,那麼它隻能加入到 LSDB 中但并 不能計算路由 (包含 Forward Address 的除外)。
- 支援使用 tag 進行路由标記。
- tag 的預設值為 0。
- 檢視 5 類 LSA 的指令:Router#show ip ospf database external
- 6 類:多點傳播 LSA
- MOSPF 專用。
- 僅通過 6 類 LSA 不能産生多點傳播分發樹。
- 7 類 : NSSA LSA (常用)
- 産生的路由器 : NSSA 區域中的 ASBR 。
- 擴散範圍 : 該 NSSA 區域内的所有路由器 。
- 一些特征
- 特殊的 5 類 LSA 。
- 隻存在于 NSSA 區域中 。
- 擴散出 NSSA 區域時必須由 ABR 轉換為 5 類 LSA 。
- 檢視 7 類 LSA 的指令:Router#show ip ospf database nssa-external
- 1 類 : 路由器 LSA (常用)
- LSA 的 三元組 ( 唯一辨別一個 LSA ):LSA 的名字( LSID )、通告的路由器( Adv Router )、 LSA 的類型 。
- 1、2 類 LSA 包含拓撲資訊。
- 包含 路由器 ID 、 運作 OSPF 的接口及網絡 、 接口連接配接了哪些鄰居 、 接口的位址 等。
- LSA 存放在路由器的 LSDB (俗稱 拓撲表 )中。
- OSPF 收斂完成 的标志: 每台路由器 ( 同一區域 内) 的 LSDB 都一緻 。
- 隻有路由器在 相同區域 中,LSDB 才能保持一緻。
- LSA 有 老化計時器 ,預設為 60min , 正向計時 。計時器 逾時之後 LSA 将自動被删除 。
- LSA 可 原封不動地發送多跳 ( 擴散泛洪傳遞 )。
- 僅限 同一區域 。
- 距離矢量協定中 的路由條目 每傳遞一跳都會改變 。
- LSA 的 防環機制
- 當一台路由器收到 LSA 之後,若 LSDB 中沒有 ,則 接收并回複 LSAck ,然後 泛洪給其它鄰居 ;
- 若 LSDB 中有 ,則 比較 LSA 的新舊程度 。
- 先比序列号,大的新;再比老化計時器,小的新,相差小于 15min 視為一緻;最後比校驗和,大的新)。
- 若 本地的 LSA 比接收到的 LSA 舊 ,則 接收并回複 LSAck ,然後 泛洪給其它鄰居 ;
- 若 本地的 LSA 與接收到的 LSA 新舊程度相同 ,則 丢棄收到的 LSA ;
- 若 本地的 LSA 比接收到的 LSA 新 ,則 丢棄收到的 LSA ,然後 反向通告本地的 LSA 。
- LSA 的 序列号
- 線性 空間: 0x80000001 (負數) ~0x7FFFFFFF (正數)
- 每 新生成一個 LSA 序列号 +1 。
- 當 LSA 的 序列号達到最大值 時, 新的 LSA 的序列号将會被重置 。這就導緻了 新的 LSA 的序列号比舊的 LSA 小 ,鄰居不接收反而會 反向通告舊的 LSA 。這時就需要等到 最大序列号的LSA 的老化計時器逾時 之後才能恢複正常。
- 解決方案:當 LSA 的序列号 接近最大值時 ,LSA 的 老化計時器将會縮短 ,以便及時重置全部 LSA 的序列号。
- LSDB 過載保護
- 思科專有。
- 可限制接收 LSA 的數目,超過之後自動 Down 鄰居。當 Down 鄰居超過一定次數後,不再自動建立鄰居。
- 可防止低性能路由器在 OSPF 上消耗過多資源。
- 路由器自身産生的 LSA 不耗費資源。
- 基本配置指令
- Router(config-router)#max-lsa <最大 LSA 數目>
- OSPF 路徑成本
- 路徑成本 = 參考帶寬 (bps) / 接口帶寬 (bps)
- 預設參考帶寬為 100,000,000 bps ( 100 Mbps )
- 取 控制層面路由流向的所有入接口 的帶寬。
- 修改接口的帶寬 不會影響 從該接口 發出路由條目的帶寬 。
- 整條鍊路的路徑成本 等于 每條鍊路的路徑成本之和 ( 分段 計算)。
- 由 DR 去往 同一網段中其他路由器 的路徑成本為 。
- 修改參考帶寬的指令
- Router(config-router)#auto-cost reference-bandwidth <帶寬值(Mbps)>
- 參考帶寬不一緻不會影響鄰居的建立。
- Router(config-router)#auto-cost reference-bandwidth <帶寬值(Mbps)>
- 修改接口帶寬的指令
- Router(config-if)#bandwidth <帶寬值(Kbps)>
- 直接修改接口路徑成本的指令
- Router(config-if)#ip ospf cost <路徑成本>
- 路徑成本 = 參考帶寬 (bps) / 接口帶寬 (bps)
- OSPF 的 LSA
-
- SPF 矢量圖
- 包含元素
- 樹幹 / 樹枝 :基于 1 (Point-to-Point、Transit、Virtual、Stub 鍊路) 、2 類 LSA 形成。
- 樹葉 :基于 3、4、5、7 類 LSA 形成。
- 基本元素畫法
- 包含元素
- SPF 矢量圖
-
- SPF 矢量圖畫法原則
- 先畫 Point-to-Point、Transit、Virtual 鍊路,再畫 Stub 鍊路,最後挂上相應的路由條目。
- Point-to-Point、Transit、Virtual 鍊路先畫路徑成本小的那節。
- 每台路由器 隻會畫單向路徑 。
- 3、5 類 LSA 産生的路由條目挂在本區域的 ABR 上。
- OSPF 的 路由類型
- O : 區域内路由 (通過 1、2 類 LSA 擷取)。
- O IA : 區域間路由 (通過 3 類 LSA 擷取)。
- O E1 : 重分發進 OSPF 的路由 (通過 4、5 類 LSA 擷取),且 路徑成本在路由條目傳遞過程中會累加 。
- 如果同時收到多條相同目的地的 O E1 路由,直接 比較路徑成本 ,誰小誰加表。
- 如果 既關注内部開銷 , 又關注外部開銷 ,那麼在重分發時可以使用這類路由。
- O E2 : 重分發進 OSPF 的路由 (通過 4、5 類 LSA 擷取),且 路徑成本在路由條目傳遞過程中保持不變 。
- 如果同時收到多條相同目的地的 O E2 路由, 先比較外部路徑成本 ( Seed Metric ), 再比較内部路徑成本 (本地 去往 ASBR 的路徑成本 )。誰小誰加表。
- 如果 隻關注外部開銷 ,那麼在重分發時可以使用這類路由。
- O N1 : NSSA 區域中重分發進 OSPF 的路由 (通過 7 類 LSA 擷取)。其他特性 同 O E1 。
- O N2 : NSSA 區域中重分發進 OSPF 的路由 (通過 7 類 LSA 擷取)。其他特性 同 O E2 。
- 各路由類型的優先級: O > O IA > O E1 = O N1 > O E2 = O N2
- OSPF 預設所有類型的路由 管理距離 均為 110 。
- 修改 OSPF 管理距離的指令
- Router(config-router)#distance ospf inter-area <區域間路由管理距離> intra-area <區域内路由管理距離> external <外部路由管理距離>
- 修改 OSPF 管理距離的指令
- OSPF 支援修改 某條内部或外部路由 的管理距離,也支援修改 由某台路由器産生 的所有路由條目的管理距離。
- SPF 矢量圖畫法原則
-
- OSPF 路由 重分發
- 重分發進 OSPF 的路由(包含通告的預設路由)可設定一個 預設路徑成本 ( Seed Metric )。
- BGP 重分發進 OSPF 的 Seed Metric 為 1 , 其它路由協定 為 20 。
- 設定 Seed Metric 的指令
- Router(config-router)#area <區域号> default-cost <路徑成本>
- 預設路由 在 無法重分發 進 OSPF。
- 重分發指令
- 标準重分發:Router(config-router)#redistribute <路由協定> [路由協定的參數] [metric-type 1|2] [subnets] [nssa-only] [metric <路徑成本>]
- metric-type 用于指定路徑成本的計算方式(見上面的 O E1、O E2 路由類型)。
- subnets 用于開啟子網路由宣告(OSPF 預設 隻重分發主類路由 )。
- nssa-only 用于 NSSA 區域的 ABR 上,隻把重分發的路由下放到 NSSA 區域中。
- metric 用于指定該路由條目的 Seed Metric。
- 以 5 類 LSA 通告路由器為預設網關:Router(config-router)#default-information originate [always]
- 後面加 always 可以在路由器 沒有配置預設網關 的情況下通告。但需要注意的是,加了 always 之後路由器 将不會把别人通告 (從 OSPF) 的預設路由加入到路由表 中。
- 也可使用 route-map 工具為通告的預設路由添加某些參數。
- 标準重分發:Router(config-router)#redistribute <路由協定> [路由協定的參數] [metric-type 1|2] [subnets] [nssa-only] [metric <路徑成本>]
- OSPF 重分發進其它路由協定 預設 不會重分發外部路由 。如果需要重分發外部路由的話可以在重分發指令後面加上 match internal external。
- Forward Address ( FA )
- 5、7 類 LSA 特有的字段。
- 用來 強行指定外部路由下一跳的方向 ,可 防止非對稱路由 、 次優路徑 或 路由環路 。
- 當 5 類 LSA 中包含 FA 時 不用 4 類 LSA 就可計算路由。
- 5 類 LSA 的 FA 為 重分發進 OSPF 的路由條目本身 的 下一跳位址 。
- 7 類 LSA 一定有 FA 。
- 5 類 LSA 需要滿足以下條件才能産生 FA。
- ASBR 宣告重分發進 OSPF 的路由條目的下一跳接口進入 OSPF ,且該接口 不能是被動接口 。
- ASBR 對于該重分發進 OSPF 的路由條目的下一跳接口不能是 Point-to-Point、Point-to-MultiPoint 類型 。
- 7 類 LSA 的 FA 為 NSSA 中的 ASBR 的最大環回口位址 ( 沒有環回口 位址則為 最大接口位址 )。
- 當 7 類 LSA 轉換為 5 類 LSA 之後, FA 預設保持不變 。
- 7 類 LSA 轉 5 類 LSA 時不保留 FA 的指令(隻能在轉換者 ABR 上執行)
- Router(config-router)#area <區域号> nssa translate type7 suppress-fa
- 7 類 LSA 轉 5 類 LSA 時如果 不保留 FA ,那麼當 7 類 LSA 所對應的路由條目是 O N1 類型的話,轉換後的 O E1 類型的路由條目 NSSA 區域内的那段内部路徑成本 将設為 。
- FA 必須通過 OSPF 路由可達 ( 1、2、3 類 LSA ),否則該外部路由将隻會被加入 LSDB。
- 去往 FA 的 靜态路由可以覆寫 OSPF 路由 ,這會導緻 FA 不是通過 OSPF 可達的。
- OSPF 路由 重分發
-
- Virtual Link 是在 一個區域内 的 虛拟點到點 鍊路。
- Virtual Link 的用途
- 分離的 Area 0 相連接配接 (例如 Area 0 <--> Area 1 <--> Area 0)
- 遠離 Area 0 的區域連接配接 (例如 Area 0 <--> Area 1 <--> Area 2)
- 沒有 Area 0 的區域連接配接 (隻是 ABR 的環回口宣告進 Area 0(僞 ABR),例如 Area 1 <--> Area 2 <--> Area 3)
- 隻有在 相同區域 内的兩台路由器才能使用 Virtual Link。
- Virtual Link 會造成 OSPF 的星型拓撲被破壞 , 大大增加出現環路的可能性 。是以 不應該長時間使用 。
- Virtual Link 做 區域間彙總 可能會出現 環路 。
- 通過 Virtual Link 傳遞的路由條目的出接口 為 去往 Virtual Link 對端位址的樹形結構出接口 ( 實體接口 )。
- 思科在 Virtual Link 上面預設 不會發送 Hello 。
- 該特性稱為 Hello 抑制 。
- 思科通過 Virtual Link 擷取的 LSA 永不過期 (不用定時泛洪)。
- 該特性稱為 DNA 。
- 該特性可以減少 LSA 泛洪的數量。
- 配置指令
- Router(config-router)#area <區域号> virtual-link <目的路由器 ID>
- <目的路由器 ID> 需要兩台路由器 互指 。
- Router(config-router)#area <區域号> virtual-link <目的路由器 ID>
- 檢視 Virtual Link 狀态的指令
- Router#show ip ospf virtual-links
- OSPF 路由 彙總/聚合
- 區域間 路由彙總/聚合
- 做完彙總之後,路由器會先 抑制所有明細路由 ,再 産生彙總路由發送給其他區域 。
- 如果在彙總指令後面加上了 not-advertise 關鍵字,則既抑制明細路由,又不發送彙總路由(等于做了路由過濾)。
- 使用 filter-list 工具調用字首清單可進行區域間的路由過濾。
- 彙總路由的路徑成本 取 所有明細路由的最小路徑成本 。
- 配置指令
- Router(config-router)#area <區域号> range <彙總網段> <子網路遮罩>
- 外部 路由彙總/聚合
- 由 ASBR 進行。
- 配置指令
- Router(config-router)#summary-address <彙總網段> <子網路遮罩>
- 如果在彙總指令後面加上了 not-advertise 關鍵字,則既抑制明細路由,又不發送彙總路由(等于做了路由過濾)。
- 區域間 路由彙總/聚合
-
- OSPF 認證級别
- 0 級: 不認證
- 1 級: 明文認證
- 2 級: HMAC 密文認證
- HMAC 值 = MD5(封包 + 密碼)
- OSPF 認證範圍
- 接口級認證
- 先設定認證密碼,再設定認證方式。
- 配置指令
- 設定密文認證密碼:Router(config-if)#ip ospf message-digest-key <密碼 ID> md5 <密碼>
- 設定明文認證密碼:Router(config-if)#ip ospf authentication-key <密碼>
- 設定密文認證方式:Router(config-if)#ip ospf authentication message-digest
- 設定明文認證方式:Router(config-if)#ip ospf authentication
- 密文認證鄰居兩邊的 <密碼 ID> 和 <密碼> 必須 一緻 。
- 區域級認證 (隻支援 HMAC 密文認證)
- 依舊要在 每個接口上設定認證密碼 。
- 配置指令
- Router(config-router)#area <區域号> authentication message-digest
- Virtual Link 認證
- 配置指令
- 密文認證:Router(config-router)#area <區域号> virtual-link <目的路由器 ID> authentication message-digest message-digest-key <密碼 ID> md5 <密碼>
- 明文認證:Router(config-router)#area <區域号> virtual-link <目的路由器 ID> authentication authentication-key <密碼>
- 在思科路由器上由于存在 Hello 抑制 特性,在 已經建立完成的 Virtual Link 上配置認證需要重置 OSPF 程序才能生效 。
- 配置指令
- 接口級認證
- 由 1、2 類 LSA 生成的路由條目 隻能做 本地抑制 。
- OSPF 調用字首清單進行路由過濾的指令
- Router(config-router)#area <區域号> filter-list prefix <字首清單名稱> in|out
- OSPF 認證級别
-
- 目前 用于 IPv4 路由的 OSPF 版本為 v2 。
- OSPFv2 最大的缺陷就是 将某些重要 LSA 中的路由資訊和拓撲資訊綁定起來 ,這導緻了 OSPFv2 根本無法支援 IPv6。不過後來的 OSPFv3 也有這種缺陷,導緻最初的 OSPFv3 也隻支援 IPv6。後來思科改進了 OSPFv3(稱為 二代 OSPFv3 ),把 LSA 中的拓撲資訊和路由資訊剝離開來(LSA 類型可自定義),才解決了這個問題(增加了協定的可擴充性)。但改進後的 OSPFv3 依然不能和OSPFv2 互操作。
- 思科路由器通過 OSPFv3 來為 IPv4 做路由的指令
- Router(config)#ipv6 unicast-routing % 開啟 IPv6 路由功能
- Router(config)#router ospfv3 <程序号>
- Router(config-router)#address-family ipv4 unicast % 進入 IPv4 單點傳播位址簇配置模式
- Router(config)#interface <接口名>
- Router(config-if)#ipv6 enable % 開啟接口的 IPv6 功能
- Router(config-if)#ospfv3 <程序号> ipv4 area <區域号>
-
- 思科路由器通過 OSPFv3 來為 IPv6 做路由的指令
- Router(config)#ipv6 unicast-routing % 開啟 IPv6 路由功能
- Router(config)#router ospfv3 <程序号>
- Router(config-router)#address-family ipv6 unicast % 進入 IPv6 單點傳播位址簇配置模式
- Router(config-router-af)#router-id <路由器 ID> % 如果路由器沒有 IPv4 位址,必須手動指定一個路由器 ID
- Router(config)#interface <接口名>
- Router(config-if)#ospfv3 <程序号> ipv6 area <區域号>
- OSPFv3 的 LSA 簡介
- 1、2 類 LSA
- 和 OSPFv2 的 1、2 類 LSA 相比 少了與網絡相關的參數 。
- 沒有 接口 IP、掩碼、路徑成本等 形成路由條目的必備參數 。
- 隻能形成拓撲 , 不能形成路由 。
- 8 類 LSA : 鍊路 LSA
- 隻能 在本地鍊路中發送 。
- 配合 1、2 類 LSA 可形成直連網絡 Link Local 位址的路由條目 。
- 9 類 LSA : 區域内字首 LSA
- 攜帶 AGUA 位址及掩碼 。
- 在為 IPv4 做路由時将攜帶 IPv4 位址及掩碼。
- 配合 1、2 類 LSA 可形成 AGUA 位址的路由條目 。
- 在為 IPv4 做路由時可配合 1、2 類 LSA 形成 IPv4 路由條目。
- 攜帶 AGUA 位址及掩碼 。
- 1、2 類 LSA
- OSPFv3 先形成拓撲 , 後計算路由 。
- 思科路由器通過 OSPFv3 來為 IPv6 做路由的指令