Day 09 整理到:
Hello
↓
Neighbor
↓
Adjacency
↓
交換資訊
↓
算出 Route
但其實我只是把「交換資訊」四個字寫下來而已。
真正的問題還沒回答:
OSPF Router 到底交換了什麼?
假設網路長這樣:
192.168.10.0/24
|
R1
|
R2
/ \
R3 R4
| |
網路 A 網路 B
R1 直接連到的只有 R2。
它沒有直接接觸 R3,也沒有直接接觸 R4。
那 R1 最後為什麼會知道:
R3 後面有哪些網路?
R4 後面有哪些網路?
到那些網路要走哪一條路?
這篇就繼續沿著 Day 09 的問題往下拆。
兩台 Router 透過 Hello 發現彼此,建立 Neighbor Relationship,符合條件後再建立 Adjacency。
所以:
R1 -------- R2
R1 至少知道:
我旁邊有一台 R2。
可是只知道「隔壁是誰」還不夠。
真正做 Routing 時,Router 還需要知道:
整個網路大概長什麼樣子?
例如 R2 可能知道:
我連著 R1
我也連著 R3
我還連著 R4
如果這些資訊只留在 R2 自己身上,R1 還是看不到更遠的網路。
所以 OSPF 還需要把 Link-State 資訊交換出去。
這就碰到今天第一個縮寫:
LSA
LSA 全名是:
Link-State Advertisement
第一次看到 Advertisement,我會很自然想到廣告。
但放在 OSPF 裡,我現在會把它想成:
Router 發布出去的一份「Link-State 公告」。
例如概念上,R2 可以描述:
我是 R2
我有哪些 Link
我跟哪些 Router / Network 相連
這些 Link 的 Cost 是多少
這些描述網路狀態的資訊,就是 OSPF 建立拓撲時的重要材料。
所以 Link-State 裡面的 State,不是在講 Router 心情好不好,而是在描述:
我的連線現在是什麼狀態?
我連到哪裡?
這條路的 Cost 是多少?
這裡是我覺得很容易混掉的地方。
如果只知道「Dynamic Routing 會交換資訊」,很容易腦補成:
R2 把自己的 Routing Table 傳給 R1
但 OSPF 不是這樣運作。
比較接近:
R1:
這是我看到的 Link-State。
R2:
這是我看到的 Link-State。
R3:
這是我看到的 Link-State。
大家把拓撲相關資訊交換出去。
然後每一台 Router 再根據這些資料,自己建立對網路的理解、自己計算最佳路徑。
所以:
LSA ≠ Routing Table
我會先把它們分成:
LSA
↓
建立地圖的原始資料
Routing Table
↓
算完之後真正拿來轉送封包的結果
假設網路是:
R1 ---- R2 ---- R3 ---- R4
R4 後面新增一個網路:
10.4.0.0/24
如果 R4 只把資訊告訴 R3:
R4 → R3
那 R1、R2 還是不知道。
所以 Link-State 資訊還需要繼續被傳遞。
概念上像:
R4
↓
R3
↓
R2
↓
R1
這種把 Link-State 資訊散布出去的機制,會看到一個詞:
Flooding
前面學 Switch 時也碰過 Flooding,但不要把兩件事混成同一個機制。
Switch 的 Flooding 比較像:
不知道 Destination MAC 在哪
→ 往其他 Port 送 Frame
OSPF 這裡的 Flooding 則是在:
散布 Link-State 資訊
→ 讓其他 OSPF Router 得到拓撲資訊
只是兩邊剛好都用了 Flooding 這個字。
假設 Router 陸續拿到:
R1 的 Link-State 資訊
R2 的 Link-State 資訊
R3 的 Link-State 資訊
R4 的 Link-State 資訊
總不能全部散在腦袋裡。
OSPF 會把這些 Link-State 資訊整理成一個資料庫:
LSDB
全名:
Link-State Database
這個名字其實比 LSA 好懂很多。
可以先把它想成:
LSDB
├── R1 的 Link-State 資訊
├── R2 的 Link-State 資訊
├── R3 的 Link-State 資訊
└── R4 的 Link-State 資訊
當同一個 OSPF Area 裡的拓撲資訊同步之後,Router 就能根據這些資料建立出對該 Area 的拓撲理解。
例如:
R3
/
R1 -- R2
\
R4
所以我現在會把 LSDB 想成:
OSPF 用來保存拓撲資訊的地圖資料庫。
現在假設 R1 的 LSDB 裡已經有拓撲:
R2
/ \
R3 R4
\ /
R5
R1 想到 R5。
可能有兩條路:
R1 → R2 → R3 → R5
也可能:
R1 → R2 → R4 → R5
有地圖,只代表知道:
有哪些路可以走。
還沒有回答:
哪一條最好?
這就接回 Day 08 的 Cost。
假設其中一條總 Cost:
10 + 10 + 10 = 30
另一條:
10 + 20 + 10 = 40
OSPF 要從這些拓撲資訊裡計算最短、也就是總 Cost 較低的路徑。
這時就輪到下一個縮寫:
SPF
SPF 全名:
Shortest Path First
OSPF 會使用 SPF Algorithm,也常會看到:
Dijkstra Algorithm
目前我不打算把它變成演算法課。
先抓用途就好:
Router 拿 LSDB 裡的拓撲資訊,以自己為起點,計算到各個目的網路的最佳路徑。
例如拓撲是:
R3
/
R1 -- R2
\
R4
站在 R1 的角度,會以 R1 為起點計算:
到 R2 怎麼走?
到 R3 怎麼走?
到 R4 怎麼走?
如果換成 R3:
起點就變成 R3
所以大家雖然可以擁有一致的拓撲資訊,但每台 Router 都是站在「自己」的位置算路。
這點我覺得很重要。
同一張地圖,不同出發點,最佳路徑當然也不一定一樣。
到這裡,Day 08、Day 09、Day 10 的東西終於能連起來:
Hello
↓
Neighbor
↓
Adjacency
↓
交換 Link-State 資訊
↓
LSA
↓
Flooding
↓
LSDB
↓
SPF
↓
算出最佳路徑
↓
Routing Table
↓
Forwarding
這張圖對我來說,比單獨背:
LSA
LSDB
SPF
有用很多。
因為至少知道每一個東西為什麼會出現在下一步。
我現在會先這樣分:
Link-State Advertisement
Router 對外交換的 Link-State 資訊。
可以想成:
建立地圖的原始材料。
Link-State Database
收集、保存拓撲資訊的資料庫。
可以想成:
地圖本身。
Shortest Path First
利用拓撲和 Cost 計算最佳路徑。
可以想成:
拿地圖來算路。
最後選出的 Route 會進到 Router 的 Routing Table,供實際轉送封包時查詢。
可以想成:
算完之後留下來的可用路線。
所以整體就是:
LSA
↓
LSDB
↓
SPF
↓
Routing Table
假設原本:
R1 ---- R2 ---- R3
|
R4
某一刻:
R2 X R3
R2 到 R3 的 Link 發生變化。
那原本的拓撲資訊就不再正確。
OSPF 不能繼續拿舊地圖算路。
概念上就要重新走一段:
Topology Change
↓
新的 Link-State 資訊
↓
LSA 被散布
↓
更新 LSDB
↓
重新執行 SPF
↓
重新計算 Route
↓
更新 Routing Table
這時候再回頭看前面學過的:
Convergence
就比較有畫面了。
所謂 Dynamic Routing 會「自己更新」,背後其實不是一句魔法。
而是一連串:
發現變化 → 散布資訊 → 更新拓撲 → 重算路徑。
今天有三個指令可以把不同階段對起來。
show ip ospf neighbor
回答:
我跟哪些 OSPF Router 建立了 Neighbor / Adjacency?
show ip ospf database
回答:
OSPF 現在掌握了哪些 Link-State 資訊?
show ip route ospf
回答:
經過 OSPF 計算後,最後有哪些 Route 被放進 Routing Table?
這三個指令放在一起看,層次就很明顯:
show ip ospf neighbor
↓
鄰居關係
show ip ospf database
↓
拓撲資訊
show ip route ospf
↓
最後的路由結果
Static Route 比較像:
管理員:
去 10.10.0.0/16
就走 192.168.1.2
Router 不需要知道整個網路長怎樣。
照設定走就好。
OSPF 則比較像:
Router 彼此交換 Link-State 資訊
↓
建立拓撲
↓
自己計算路徑
小型網路裡,Static Route 很直接。
但 Router、Link、備援路徑一多:
R1 -- R2
| |
| |
R3 -- R4
如果全部靠人工維護,管理成本就會快速上升。
這也就是為什麼我們前面會從:
Static Routing
一路走到:
Dynamic Routing
如果今天只留一句話:
OSPF Router 透過 LSA 分享 Link-State,整理成 LSDB,再用 SPF 從自己的角度計算最佳路徑。
最核心的流程:
Hello
↓
Neighbor
↓
Adjacency
↓
LSA
↓
LSDB
↓
SPF
↓
Routing Table
Day 08 我只知道:
OSPF 可以根據 Cost 選路
Day 09 補上:
Router 要先用 Hello 找到 Neighbor
Day 10 才真正回答:
Neighbor 建好之後交換什麼?
交換完放哪裡?
最後又怎麼變成 Route?
原來 OSPF 並不是單純:
你把你的路由告訴我。
而比較像:
大家把自己知道的道路狀況拼成一張地圖,再各自從自己的位置算路。
這個畫面建立起來之後,LSA、LSDB、SPF 三個縮寫就不再只是三個要背的名詞。
Link-State Advertisement
OSPF 用來描述、交換 Link-State 資訊的重要單位。
Link-State Database
Router 收集 Link-State 資訊後,用來保存 OSPF 拓撲資訊的資料庫。
Shortest Path First
Router 以自己為起點,根據 LSDB 與 Cost 計算最佳路徑。
不一樣。
LSA 是建立拓撲的資訊;Routing Table 是計算、選路之後真正供封包轉送使用的結果。
OSPF 會散布新的 Link-State 資訊、更新 LSDB,必要時重新跑 SPF,再更新 Route。
LSA 是情報,LSDB 是地圖,SPF 是算路,Routing Table 是最後留下來可以走的答案。
下一個問題也跟著冒出來:
假設不是一條 Point-to-Point Link,而是一個 Ethernet 網段上同時有很多台 OSPF Router:
R1
|
Switch -- R2
|
R3
|
R4
難道每一台 Router 都要跟每一台 Router 重複交換一堆資訊嗎?
OSPF 還有一套機制專門處理這種情況。
那就是接下來會碰到的:
DR
BDR