iT邦幫忙

2026 iThome 鐵人賽

DAY 10
0
IT Operation

網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來系列 第 10 篇

Day 10|OSPF 到底交換了什麼?LSA、LSDB、SPF 怎麼把整張網路拼起來?

  • 分享至 

  • xImage
  •  

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 的問題往下拆。


Neighbor 只是第一步

兩台 Router 透過 Hello 發現彼此,建立 Neighbor Relationship,符合條件後再建立 Adjacency。

所以:

R1 -------- R2

R1 至少知道:

我旁邊有一台 R2。

可是只知道「隔壁是誰」還不夠。

真正做 Routing 時,Router 還需要知道:

整個網路大概長什麼樣子?

例如 R2 可能知道:

我連著 R1
我也連著 R3
我還連著 R4

如果這些資訊只留在 R2 自己身上,R1 還是看不到更遠的網路。

所以 OSPF 還需要把 Link-State 資訊交換出去。

這就碰到今天第一個縮寫:

LSA

LSA:Router 發出去的「網路狀態公告」

LSA 全名是:

Link-State Advertisement

第一次看到 Advertisement,我會很自然想到廣告。

但放在 OSPF 裡,我現在會把它想成:

Router 發布出去的一份「Link-State 公告」。

例如概念上,R2 可以描述:

我是 R2

我有哪些 Link
我跟哪些 Router / Network 相連
這些 Link 的 Cost 是多少

這些描述網路狀態的資訊,就是 OSPF 建立拓撲時的重要材料。

所以 Link-State 裡面的 State,不是在講 Router 心情好不好,而是在描述:

我的連線現在是什麼狀態?
我連到哪裡?
這條路的 Cost 是多少?

LSA 不是 Routing Table

這裡是我覺得很容易混掉的地方。

如果只知道「Dynamic Routing 會交換資訊」,很容易腦補成:

R2 把自己的 Routing Table 傳給 R1

但 OSPF 不是這樣運作。

比較接近:

R1:
這是我看到的 Link-State。

R2:
這是我看到的 Link-State。

R3:
這是我看到的 Link-State。

大家把拓撲相關資訊交換出去。

然後每一台 Router 再根據這些資料,自己建立對網路的理解、自己計算最佳路徑。

所以:

LSA ≠ Routing Table

我會先把它們分成:

LSA
↓
建立地圖的原始資料

Routing Table
↓
算完之後真正拿來轉送封包的結果

Flooding:資訊不能只停在隔壁

假設網路是:

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 這個字。


收到很多 LSA 之後放哪裡?

假設 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:拿 LSDB 來算最佳路徑

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

有用很多。

因為至少知道每一個東西為什麼會出現在下一步。


LSA、LSDB、SPF、Routing Table 不要混在一起

我現在會先這樣分:

LSA

Link-State Advertisement

Router 對外交換的 Link-State 資訊。

可以想成:

建立地圖的原始材料。

LSDB

Link-State Database

收集、保存拓撲資訊的資料庫。

可以想成:

地圖本身。

SPF

Shortest Path First

利用拓撲和 Cost 計算最佳路徑。

可以想成:

拿地圖來算路。

Routing Table

最後選出的 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 會「自己更新」,背後其實不是一句魔法。

而是一連串:

發現變化 → 散布資訊 → 更新拓撲 → 重算路徑。


可以用哪些 Cisco 指令看?

今天有三個指令可以把不同階段對起來。

看 Neighbor

show ip ospf neighbor

回答:

我跟哪些 OSPF Router 建立了 Neighbor / Adjacency?

看 LSDB

show ip ospf database

回答:

OSPF 現在掌握了哪些 Link-State 資訊?

看 OSPF 學到的 Route

show ip route ospf

回答:

經過 OSPF 計算後,最後有哪些 Route 被放進 Routing Table?

這三個指令放在一起看,層次就很明顯:

show ip ospf neighbor
        ↓
鄰居關係

show ip ospf database
        ↓
拓撲資訊

show ip route ospf
        ↓
最後的路由結果

Static 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 三個縮寫就不再只是三個要背的名詞。


Day 10 過關標準

LSA 是什麼?

Link-State Advertisement

OSPF 用來描述、交換 Link-State 資訊的重要單位。

LSDB 是什麼?

Link-State Database

Router 收集 Link-State 資訊後,用來保存 OSPF 拓撲資訊的資料庫。

SPF 是什麼?

Shortest Path First

Router 以自己為起點,根據 LSDB 與 Cost 計算最佳路徑。

LSA 跟 Routing Table 一樣嗎?

不一樣。

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

上一篇
Day 09|OSPF Router 是怎麼認識彼此的?Hello、Neighbor、Adjacency
下一篇
Day 11|同一個網段很多台 OSPF Router,為什麼需要 DR / BDR?
系列文
網路為什麼筆記本:從一個封包開始,把 Router、Switch 與 Routing 串起來 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言