什么是OSPF
OSPF(開放最短路徑優先)是由IETF開發的基于鏈路狀態的自治系統內部路由協議,用來代替存在一些問題的RIP協議。與距離矢量協議不同,鏈路狀態路由協議關心網絡中鏈路活接口的狀態(包括UP、DOWN、IP地址、掩碼、帶寬、利用率和延遲等),每個路由將其已知的鏈路狀態向該區域的其他路由器通告,通過這種方式,網絡上的每臺路由對網絡結構都會有相同的認識。隨后,路由器以其為依據,使用SPF算法計算和選擇路由。
OSPF協議在有組播發送能力的鏈路層上以組播地址發送協議包,即達到了節約資源的目的,又最大程度地減少了對其他網絡設備的干擾。
OSPF將協議包直接封裝在IP包中,協議號為89。由于IP協議本身是無連接的,所以OSFP傳輸的可靠性需要協議本身來保證。因此,OSPF協議定義了一些機制保證協議包安全可靠地傳輸。
OSPF工作過程
OSPF協議大致工作過程主要分為:尋找鄰居、建立鄰接關系、鏈路狀態信息傳遞、計算路由
OSPF工作原理
-
鏈路狀態收集
-
路由器通過發送 Hello 報文發現鄰居,交換鏈路狀態信息,涵蓋鏈路、接口狀態、網絡類型等。
-
鏈路狀態數據庫構建
路由器將收集的鏈路狀態信息存入本地鏈路狀態數據庫,數據庫完整呈現網絡拓撲結構。
-
最短路徑計算
路由器以自身為根節點,運用 Dijkstra 算法,依據鏈路狀態數據庫計算至其他網絡節點的最短路徑。
OSPF配置與實踐
實驗拓撲
實驗需求
- 按照拓撲圖示給設備命名以及配置 IP 地址
- 按照圖示分區域配置 OSPF ,實現全網互通
- 為了路由結構穩定,要求路由器使用環回口作為 Router-id,ABR 的環回口宣告進骨干區域
實驗步驟
-
配置環回口IP(設備命名和配置 IP 地址部分省略)
[R1]int lo0 [R1-LoopBack0]ip add 1.1.1.1 32
[R2]int lo0 [R2-LoopBack0]ip add 2.2.2.2 32
[R3]int lo0 [R3-LoopBack0]ip add 3.3.3.3 32
[R4]int lo0 [R4-LoopBack0]ip add 4.4.4.4 32
[R5]int lo0 [R5-LoopBack0]ip add 5.5.5.5 32
IP地址配置完成后,應如下圖所示
-
按照圖示分區域配置 OSPF ,實現全網互通
分析:實現全網互通,意味著每臺路由器都要宣告本地的所有直連網段,包括環回口所在的網段。要求 ABR 的環回口宣告進骨干區域,即區域 0,同時,每臺路由器手動配置各自環回口的 IP 地址作為 Router-id
步驟 1:在路由器上分別配置 OSPF,按區域宣告所有直連網段和環回口
[R1]ospf 1 router-id 1.1.1.1 [R1-ospf-1]area 0 [R1-ospf-1-area-0.0.0.0]network 10.1.12.0 0.0.0.255 [R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0 [R1-ospf-1-area-0.0.0.0]dis th #area 0.0.0.0network 1.1.1.1 0.0.0.0network 10.1.12.0 0.0.0.255 # return [R1-ospf-1-area-0.0.0.0]area 1 [R1-ospf-1-area-0.0.0.1]network 10.1.14.0 0.0.0.255 [R1-ospf-1-area-0.0.0.1]dis th #area 0.0.0.1network 10.1.14.0 0.0.0.255 # return
[R2]ospf 1 router-id 2.2.2.2 [R2-ospf-1]area 0 [R2-ospf-1-area-0.0.0.0]network 10.1.12.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]network 10.1.23.0 0.0.0.255 [R2-ospf-1-area-0.0.0.0]network 2.2.2.2 0.0.0.0 [R2-ospf-1-area-0.0.0.0]dis th #area 0.0.0.0network 2.2.2.2 0.0.0.0network 10.1.12.0 0.0.0.255network 10.1.23.0 0.0.0.255 # return
[R3]ospf 1 router-id 3.3.3.3 [R3-ospf-1]a 0 [R3-ospf-1-area-0.0.0.0]network 10.1.23.0 0.0.0.255 [R3-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0 [R3-ospf-1-area-0.0.0.0]dis th #area 0.0.0.0network 3.3.3.3 0.0.0.0network 10.1.23.0 0.0.0.255 # return [R3-ospf-1-area-0.0.0.0]a 2 [R3-ospf-1-area-0.0.0.2]network 10.1.35.0 0.0.0.255 [R3-ospf-1-area-0.0.0.2]dis th #area 0.0.0.2network 10.1.35.0 0.0.0.255 # return
[R4]ospf 1 router-id 4.4.4.4 [R4-ospf-1]a 1 [R4-ospf-1-area-0.0.0.1]network 10.1.14.0 0.0.0.255 [R4-ospf-1-area-0.0.0.1]network 4.4.4.4 0.0.0.0 [R4-ospf-1-area-0.0.0.1]dis th #area 0.0.0.1network 4.4.4.4 0.0.0.0network 10.1.14.0 0.0.0.255 # return
[R5]ospf 1 router-id 5.5.5.5 [R5-ospf-1]a 2 [R5-ospf-1-area-0.0.0.2]network 10.1.35.0 0.0.0.255 [R5-ospf-1-area-0.0.0.2]network 5.5.5.5 0.0.0.0 [R5-ospf-1-area-0.0.0.2]dis th #area 0.0.0.2network 5.5.5.5 0.0.0.0network 10.1.35.0 0.0.0.255 # return
-
檢查是否全網互通
分析:檢查 OSPF 是否全網互通,一個是檢查鄰居關系表,看鄰居關系是否正常;另一個是檢查路由表,看是否學習到全網路由 這里只展示 R1 的檢查結果
步驟 1:#display ospf peer 查看鄰居關系表[R1]dis ospf peer OSPF Process 1 with Router ID 1.1.1.1Neighbor Brief InformationArea: 0.0.0.0 Router ID Address Pri Dead-Time State Interface2.2.2.2 10.1.12.2 1 34 Full/BDR GE0/0Area: 0.0.0.1 Router ID Address Pri Dead-Time State Interface4.4.4.4 10.1.14.4 1 38 Full/BDR GE0/1
[R2]dis ospf peer OSPF Process 1 with Router ID 2.2.2.2Neighbor Brief InformationArea: 0.0.0.0 Router ID Address Pri Dead-Time State Interface1.1.1.1 10.1.12.1 1 37 Full/DR GE0/03.3.3.3 10.1.23.3 1 39 Full/BDR GE0/1
[R3]dis ospf peer OSPF Process 1 with Router ID 3.3.3.3Neighbor Brief InformationArea: 0.0.0.0 Router ID Address Pri Dead-Time State Interface2.2.2.2 10.1.23.2 1 34 Full/DR GE0/0Area: 0.0.0.2 Router ID Address Pri Dead-Time State Interface5.5.5.5 10.1.35.5 1 39 Full/BDR GE0/1
[R4]dis ospf peer OSPF Process 1 with Router ID 4.4.4.4Neighbor Brief InformationArea: 0.0.0.1 Router ID Address Pri Dead-Time State Interface1.1.1.1 10.1.14.1 1 36 Full/DR GE0/0
[R5]dis ospf peer OSPF Process 1 with Router ID 5.5.5.5Neighbor Brief InformationArea: 0.0.0.2 Router ID Address Pri Dead-Time State Interface3.3.3.3 10.1.35.3 1 35 Full/DR GE0/0
說明:狀態為FULL,說明鄰接關系已建立
步驟 2:查看路由表
[R1]dis ip routing-table Destinations : 20 Routes : 20Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 Direct 0 0 127.0.0.1 InLoop0
2.2.2.2/32 O_INTRA 10 1 10.1.12.2 GE0/0
3.3.3.3/32 O_INTRA 10 2 10.1.12.2 GE0/0
4.4.4.4/32 O_INTRA 10 1 10.1.14.4 GE0/1
5.5.5.5/32 O_INTER 10 3 10.1.12.2 GE0/0
10.1.12.0/24 Direct 0 0 10.1.12.1 GE0/0
10.1.12.1/32 Direct 0 0 127.0.0.1 InLoop0
10.1.12.255/32 Direct 0 0 10.1.12.1 GE0/0
10.1.14.0/24 Direct 0 0 10.1.14.1 GE0/1
10.1.14.1/32 Direct 0 0 127.0.0.1 InLoop0
10.1.14.255/32 Direct 0 0 10.1.14.1 GE0/1
10.1.23.0/24 O_INTRA 10 2 10.1.12.2 GE0/0
10.1.35.0/24 O_INTER 10 3 10.1.12.2 GE0/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[R2]dis ip routing-table Destinations : 20 Routes : 20Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTRA 10 1 10.1.12.1 GE0/0
2.2.2.2/32 Direct 0 0 127.0.0.1 InLoop0
3.3.3.3/32 O_INTRA 10 1 10.1.23.3 GE0/1
4.4.4.4/32 O_INTER 10 2 10.1.12.1 GE0/0
5.5.5.5/32 O_INTER 10 2 10.1.23.3 GE0/1
10.1.12.0/24 Direct 0 0 10.1.12.2 GE0/0
10.1.12.2/32 Direct 0 0 127.0.0.1 InLoop0
10.1.12.255/32 Direct 0 0 10.1.12.2 GE0/0
10.1.14.0/24 O_INTER 10 2 10.1.12.1 GE0/0
10.1.23.0/24 Direct 0 0 10.1.23.2 GE0/1
10.1.23.2/32 Direct 0 0 127.0.0.1 InLoop0
10.1.23.255/32 Direct 0 0 10.1.23.2 GE0/1
10.1.35.0/24 O_INTER 10 2 10.1.23.3 GE0/1
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[R3]dis ip routing-table Destinations : 20 Routes : 20Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTRA 10 2 10.1.23.2 GE0/0
2.2.2.2/32 O_INTRA 10 1 10.1.23.2 GE0/0
3.3.3.3/32 Direct 0 0 127.0.0.1 InLoop0
4.4.4.4/32 O_INTER 10 3 10.1.23.2 GE0/0
5.5.5.5/32 O_INTRA 10 1 10.1.35.5 GE0/1
10.1.12.0/24 O_INTRA 10 2 10.1.23.2 GE0/0
10.1.14.0/24 O_INTER 10 3 10.1.23.2 GE0/0
10.1.23.0/24 Direct 0 0 10.1.23.3 GE0/0
10.1.23.3/32 Direct 0 0 127.0.0.1 InLoop0
10.1.23.255/32 Direct 0 0 10.1.23.3 GE0/0
10.1.35.0/24 Direct 0 0 10.1.35.3 GE0/1
10.1.35.3/32 Direct 0 0 127.0.0.1 InLoop0
10.1.35.255/32 Direct 0 0 10.1.35.3 GE0/1
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[R4]dis ip routing-table Destinations : 18 Routes : 18Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTER 10 1 10.1.14.1 GE0/0
2.2.2.2/32 O_INTER 10 2 10.1.14.1 GE0/0
3.3.3.3/32 O_INTER 10 3 10.1.14.1 GE0/0
4.4.4.4/32 Direct 0 0 127.0.0.1 InLoop0
5.5.5.5/32 O_INTER 10 4 10.1.14.1 GE0/0
10.1.12.0/24 O_INTER 10 2 10.1.14.1 GE0/0
10.1.14.0/24 Direct 0 0 10.1.14.4 GE0/0
10.1.14.4/32 Direct 0 0 127.0.0.1 InLoop0
10.1.14.255/32 Direct 0 0 10.1.14.4 GE0/0
10.1.23.0/24 O_INTER 10 3 10.1.14.1 GE0/0
10.1.35.0/24 O_INTER 10 4 10.1.14.1 GE0/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
[R5]dis ip routing-table Destinations : 18 Routes : 18Destination/Mask Proto Pre Cost NextHop Interface
0.0.0.0/32 Direct 0 0 127.0.0.1 InLoop0
1.1.1.1/32 O_INTER 10 3 10.1.35.3 GE0/0
2.2.2.2/32 O_INTER 10 2 10.1.35.3 GE0/0
3.3.3.3/32 O_INTER 10 1 10.1.35.3 GE0/0
4.4.4.4/32 O_INTER 10 4 10.1.35.3 GE0/0
5.5.5.5/32 Direct 0 0 127.0.0.1 InLoop0
10.1.12.0/24 O_INTER 10 3 10.1.35.3 GE0/0
10.1.14.0/24 O_INTER 10 4 10.1.35.3 GE0/0
10.1.23.0/24 O_INTER 10 2 10.1.35.3 GE0/0
10.1.35.0/24 Direct 0 0 10.1.35.5 GE0/0
10.1.35.5/32 Direct 0 0 127.0.0.1 InLoop0
10.1.35.255/32 Direct 0 0 10.1.35.5 GE0/0
127.0.0.0/8 Direct 0 0 127.0.0.1 InLoop0
127.0.0.1/32 Direct 0 0 127.0.0.1 InLoop0
127.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
224.0.0.0/4 Direct 0 0 0.0.0.0 NULL0
224.0.0.0/24 Direct 0 0 0.0.0.0 NULL0
255.255.255.255/32 Direct 0 0 127.0.0.1 InLoop0
說明:可以看到,分別已經學習到了全網所有網段的路由信息
-
測試在R4上ping R5
[R4]ping 10.1.35.5 Ping 10.1.35.5 (10.1.35.5): 56 data bytes, press CTRL+C to break 56 bytes from 10.1.35.5: icmp_seq=0 ttl=252 time=1.758 ms 56 bytes from 10.1.35.5: icmp_seq=1 ttl=252 time=1.174 ms 56 bytes from 10.1.35.5: icmp_seq=2 ttl=252 time=1.067 ms 56 bytes from 10.1.35.5: icmp_seq=3 ttl=252 time=1.087 ms 56 bytes from 10.1.35.5: icmp_seq=4 ttl=252 time=1.761 ms--- Ping statistics for 10.1.35.5 --- 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss round-trip min/avg/max/std-dev = 1.067/1.369/1.761/0.321 ms [R4]%Mar 19 16:27:11:744 2025 R4 PING/6/PING_STATISTICS: Ping statistics for 10.1.35.5: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 1.067/1.369/1.761/0.321 ms.
[R4]ping 5.5.5.5
Ping 5.5.5.5 (5.5.5.5): 56 data bytes, press CTRL+C to break
56 bytes from 5.5.5.5: icmp_seq=0 ttl=252 time=1.471 ms
56 bytes from 5.5.5.5: icmp_seq=1 ttl=252 time=0.854 ms
56 bytes from 5.5.5.5: icmp_seq=2 ttl=252 time=1.449 ms
56 bytes from 5.5.5.5: icmp_seq=3 ttl=252 time=1.697 ms
56 bytes from 5.5.5.5: icmp_seq=4 ttl=252 time=1.818 ms--- Ping statistics for 5.5.5.5 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.854/1.458/1.818/0.332 ms
[R4]%Mar 19 16:26:22:237 2025 R4 PING/6/PING_STATISTICS: Ping statistics for 5.5.5.5: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 0.854/1.458/1.818/0.332 ms.
OSPF知識點
OSPF 區域
(1)區域概念
區域從邏輯上劃分網絡,各區域擁有獨立鏈路狀態數據庫與路由計算,能減少鏈路狀態信息傳播范圍,減輕路由器負擔,提升網絡可管理性與穩定性。
(2)骨干區域與非骨干區域
骨干區域(Area 0)至關重要,連接非骨干區域,非骨干區域間路由信息需經骨干區域中轉。
(3)區域間路由匯總
區域邊界路由器進行路由匯總,將多個具體路由條目合并為一條,減少區域間傳遞的路由信息數量,提升路由效率。
OSPF 路由器角色
(1)DR 和 BDR
在廣播型或 NBMA 網絡中,DR(指定路由器)負責與其他路由器交換鏈路狀態信息,BDR(備份指定路由器)在 DR 故障時接替工作,減少鏈路狀態信息泛洪及鄰接關系數量。
(2)內部路由器、區域邊界路由器和自治系統邊界路由器
內部路由器負責所在區域內路由;區域邊界路由器連接不同區域,傳遞區域間路由信息;自治系統邊界路由器連接 OSPF 自治系統與其他自治系統,引入外部路由。
OSPF 報文
(1)Hello 報文
作用為發現鄰居、建立與維護鄰居關系、選舉 DR 和 BDR。報文中包含路由器 ID、區域 ID、Hello 間隔、死亡間隔等字段。
(2)其他報文類型
數據庫描述(DBD)報文、鏈路狀態請求(LSR)報文、鏈路狀態更新(LSU)報文和鏈路狀態確認(LSAck)報文等,各自承擔特定功能,相互協作實現 OSPF 各項功能。
區域(Area):區域是從邏輯上將路由器劃分為不同的組,每個組用區域號(Area ID)來標識。區域的邊界是路由器,而不是鏈路。其中,Area 0 通常被稱為骨干區域,負責區域之間的路由,非骨干區域之間的路由信息必須通過骨干區域來轉發。
路由器 ID(Router ID):唯一標識一個 OSPF 路由器,通常使用環回接口的 IP 地址。如果沒有配置環回接口,則選取物理接口中 IP 地址最大的接口地址作為 Router ID。
鏈路狀態通告(LSA):用于在 OSPF 路由器之間傳遞鏈路狀態信息,描述了網絡中的鏈路、路由器以及它們之間的連接關系等。
鄰居(Neighbor):兩臺 OSPF 路由器之間建立鄰接關系,就互為鄰居。它們通過交換 Hello 報文來發現和維護鄰居關系。
鄰接(Adjacency):兩臺 OSPF 路由器之間建立完全鄰接關系后,會同步鏈路狀態數據庫,以便擁有相同的網絡拓撲信息。
指定路由器(DR)和備份指定路由器(BDR):在廣播型網絡和非廣播多路訪問網絡(NBMA)中,為了減少網絡中鏈路狀態信息的泛洪和路由器之間的鄰接關系數量,會選舉出 DR 和 BDR。DR 負責與其他路由器交換鏈路狀態信息,BDR 在 DR 出現故障時接替其工作。
開銷(Cost):OSPF 協議采用鏈路開銷作為度量值,用于衡量到達目標網絡的路徑代價。鏈路開銷與鏈路帶寬成反比,即帶寬越高,開銷越小,選路主要基于帶寬因素。
OSPF 報文類型:包括 Hello 報文、數據庫描述(DBD)報文、鏈路狀態請求(LSR)報文、鏈路狀態更新(LSU)報文和鏈路狀態確認(LSAck)報文等。Hello 報文用于發現和維護鄰居關系;DBD 報文用于描述鏈路狀態數據庫的內容;LSR 報文用于請求特定的鏈路狀態信息;LSU 報文用于發送鏈路狀態更新信息;LSAck 報文用于對收到的 LSU 報文進行確認。
Dijkstra 算法: