網絡小故事 13 · 進階

路路們的情報交換Dynamic Routing(動態路由)與 OSPF(開放最短路徑優先)

城市裡有一百部 Router,誰來更新每一張地圖?

主角:路路、阿帕教授、小比閱讀時間約 10 分鐘

建議先讀:小故事 12「Routing Table」

1. 故事

按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。

序幕:溫習一下

第 1 步/共 11 步

Static Route 的煩惱

上次,網絡管理員人手在我的地圖加了一條 Static Route(靜態路由),我就知道工作室怎樣去。可是網線一斷,Static Route 不會自己更新,小比就被送進死胡同。

動畫文字版(全部步驟)
  1. 序幕:溫習一下
  2. Static Route 的煩惱 路路:上次,網絡管理員人手在我的地圖加了一條 Static Route(靜態路由),我就知道工作室怎樣去。可是網線一斷,Static Route 不會自己更新,小比就被送進死胡同。
  3. 第一幕:三部 Router 的三角形
  4. 多了店舖 Router 路路:網線修好了。隔壁的店舖也有一部 Router,我們三部兩兩相連,成為一個三角形。這樣去工作室就有兩條路:直接去,或者經店舖繞過去。
    • 每條連線都有一個 Cost(成本):代表「距離」,通常線越快,Cost 越低
    • 這個故事中,三條線的 Cost 都設為 10
  5. 阿帕教授:兩種交換情報的方法 阿帕教授:在很久很久以前……Router 之間已經懂得自動交換情報,這叫 Dynamic Routing(動態路由)。早期的 RIP 只告訴鄰居「我去那裡要經過多少部 Router」;1989 年出現的 OSPF 更聰明:讓每部 Router 都擁有整張地圖。
    • Distance Vector(距離向量):只聽鄰居說「還有幾遠」,例如 RIP
    • Link State(鏈路狀態):每部 Router 都有完整地圖,自己計算,例如 OSPF
    • OSPF 全名:Open Shortest Path First(開放最短路徑優先)
  6. 第一步:Hello,鄰居! 路路:開機後,我們每部 Router 定時向鄰居發出 Hello 訊息:「我在這裡!」互相收到 Hello,就成為鄰居。之後大約每 10 秒再打一次招呼,確認大家還在。
    • Dead Interval(失效時間):40 秒收不到 Hello,就當鄰居已經失去聯絡
  7. 第二步:交換情報 LSA 小比:接著,每部 Router 把自己的情況寫成 LSA(鏈路狀態通告):「我連著哪些網絡、哪些鄰居,每條線 Cost 多少。」LSA 會傳遍所有 Router。
    • 家中路路的 LSA:「我連著 192.168.1.0/24;鄰居:工作室(Cost 10)、店舖(Cost 10)」
  8. 第三步:同一張地圖 路路:所有 LSA 拼起來,就是一張完整的地圖,叫 LSDB(鏈路狀態資料庫)。我們三部 Router 手上的 LSDB 一模一樣。
  9. 第四步:計算最短的路 路路:每部 Router 用 SPF(最短路徑優先) 演算法計算。我去工作室:直接去 Cost 10;經店舖 Cost 20。直接去較近,於是寫進我的 Routing Table(路由表)。
    • 家中 → 工作室:10 ← 最低
    • 家中 → 店舖 → 工作室:10 + 10 = 20
    • SPF 又叫 Dijkstra 演算法,1956 年由 Edsger Dijkstra 想出
  10. 第二幕:網線又斷了
  11. 發現問題 路路:家中和工作室之間的網線又斷了!我和工作室 Router 立即發現 Port 失去訊號。如果是對方靜靜當機,我們就要等 40 秒收不到 Hello 才會知道。
  12. 發出新的 LSA 小比:路路立即發出新的 LSA:「我和工作室之間的連線沒有了!」工作室 Router 也一樣。店舖 Router 收到後,大家更新 LSDB,重新計算 SPF。
  13. 自動改道 路路:新的計算結果:去工作室要經店舖,Cost 20。我自動更新 Routing Table,小比改走新路線。整個過程,沒有人需要動手!
    • 新路線:家中 → 店舖 → 工作室(Cost 20)
    • 網線修好後,又會自動改回 Cost 10 的直接路線
  14. 總結:路路們的情報網 阿帕教授:OSPF 四部曲:Hello 認識鄰居、LSA 交換情報、拼出同一個 LSDB、用 SPF 各自計算最短路線。公司內部多用 OSPF;互聯網上不同 ISP 之間,則用另一套叫 BGP(邊界閘道協定)的協定。

2. 問題在哪裡

上一個故事,網絡管理員在路路這部 Router(路由器)的 Routing Table(路由表)人手加了一條 Static Route(靜態路由),小比才去得到工作室。

可是 Static Route 有兩個大問題:

  • 網線斷了,不會自己改道。 就算還有另一條路,路路也不知道要改走那條,小比只會被送進死胡同。
  • 網絡一大,人手寫不完。 三部 Router 還可以應付;如果有一百部 Router、幾百個網絡,每加一個網絡,就要登入很多部 Router 逐條修改,很容易出錯。

3. 網絡怎樣解決

與其每張地圖都由人手畫,不如讓 Router 們自己交換情報,再各自畫出地圖。

Router 之間自動交換路線資料、自動更新 Routing Table,叫 Dynamic Routing(動態路由)。

OSPF(開放最短路徑優先)是最常用的一種。它好像一班郵差:先互相打招呼,再把「我身邊有什麼路」寫成情報傳給所有同伴。每位郵差收齊情報,就擁有同一張完整地圖,然後自己計算最短的路。

4. 看深一點

兩種交換情報的方法

方法 做法 例子
Distance Vector(距離向量) 只聽鄰居說「我去那裡要經過多少站、有幾遠」,不知道整張地圖 RIP(路由資訊協定)
Link State(鏈路狀態) 每部 Router 都有完整地圖,自己計算最短路線 OSPF

RIP 只數經過多少部 Router,最多 15 部,而且改道較慢。OSPF 在 1989 年出現,全名是 Open Shortest Path First。「Open」表示它是公開標準,任何廠商都可以使用。

Cost(成本):每條路的「距離」

OSPF 為每條連線設定一個 Cost。Cost 代表「距離」,通常線越快,Cost 越低。有些設備預設用「參考頻寬 ÷ 線路頻寬」自動計算,網絡管理員也可以人手設定。

這個故事有三部 Router,兩兩相連成一個三角形,三條線的 Cost 都設為 10。

OSPF 四部曲

第一步:Hello,認識鄰居

每部 Router 定時向直接相連的 Router 發出 Hello 訊息:「我在這裡!」互相收到 Hello,而且雙方的基本設定一致,就成為 Neighbor(鄰居)。

之後大約每 10 秒打一次招呼。如果 40 秒收不到 Hello,就當鄰居已經失去聯絡,這段時間叫 Dead Interval(失效時間)。

第二步:交換 LSA(鏈路狀態通告)

每部 Router 把自己的情況寫成 LSA,例如家中路路的 LSA:

我是:家中路路
我連著:192.168.1.0/24
鄰居:工作室 Router(Cost 10)、店舖 Router(Cost 10)

LSA 會一站一站轉交,傳遍所有 Router。

第三步:拼出 LSDB(鏈路狀態資料庫)

所有 LSA 拼起來,就是一張完整的地圖,叫 LSDB。三部 Router 手上的 LSDB 一模一樣。

第四步:用 SPF(最短路徑優先)計算最短路線

每部 Router 以自己為起點,用 SPF 演算法計算去每個網絡的總 Cost。SPF 又叫 Dijkstra 演算法,由電腦科學家 Edsger Dijkstra 在 1956 年想出。

家中路路去工作室的計算:

路線 總 Cost
家中 → 工作室 10 ← 最低,勝出
家中 → 店舖 → 工作室 10 + 10 = 20

計算結果寫進 Routing Table。在 Routing Table 上,這類 Route 的代號是 O,表示由 OSPF 學回來。

網線斷了,會發生什麼事?

  1. 發現問題:家中和工作室之間的網線斷了。兩部 Router 的 Port(連接埠)立即失去訊號,馬上知道;如果是對方靜靜當機、Port 仍然亮燈,就要等 Dead Interval(40 秒)過去才會發現。
  2. 發出新的 LSA:兩部 Router 各自發出新的 LSA:「我們之間的連線沒有了!」店舖 Router 收到後繼續轉交。
  3. 重新計算:大家更新 LSDB,重新計算 SPF。
  4. 自動改道:家中去工作室的新路線是經店舖,Cost 20。路路自動更新 Routing Table,小比改走新路線。

所有 Router 重新得出一致、正確的路線,這個過程叫 Convergence(收斂)。網線修好後,Router 會再交換 LSA,自動改回 Cost 10 的直接路線。

平時網絡沒有變化,Router 之間只靠 Hello 保持聯絡;有變化時才發出新的 LSA(另外每 30 分鐘會重新整理一次),所以不會佔用太多頻寬。

OSPF 用在哪裡?

公司、學校和 ISP(互聯網服務供應商)的內部網絡,多用 OSPF。互聯網上不同 ISP、不同機構之間,則用另一套協定,叫 BGP(邊界閘道協定)。

5. 動手試試

任務:動手計算 SPF

  1. 在紙上畫出三部 Router 的三角形:家中、工作室、店舖。
  2. 把「家中—工作室」的 Cost 改成 30,另外兩條保持 10。
  3. 計算家中去工作室的兩條路線的總 Cost。這次路路會選哪一條?(答案:經店舖,總 Cost 20,比直接去的 30 低。)

小互動

OSPF 的正確次序

三部 Router 剛剛開機。把 OSPF 的五個步驟排好次序。

  1. 所有 LSA 拼成一模一樣的 LSDB
  2. 把計算結果寫進 Routing Table
  3. 發送 Hello,認識鄰居
  4. 用 SPF 計算總 Cost 最低的路線
  5. 交換 LSA,說明自己的連線和 Cost

6. 比喻的極限

  • Router 不會真的「寫信」。 Hello 和 LSA 都是 Router 之間傳送的小封包,由軟件自動處理,速度以毫秒計算。
  • 地圖不一定包括全世界。 大型網絡會把 Router 分成幾個 Area(區域),每個 Area 內的 LSDB 一樣,Area 之間只交換摘要,令地圖不會太大。
  • Cost 不是真正的距離。 Cost 是網絡管理員可以更改的數字,通常反映線路速度,和兩部 Router 相隔幾遠沒有直接關係。
  • 自動不等於不用設定。 網絡管理員仍然要決定在哪些 Port 啟用 OSPF、每條線的 Cost 等等;只是之後的變化由 Router 自動處理。
  • 改道不是瞬間完成。 由發現問題到所有 Router 收斂,需要一點時間;在這段時間內,少量小比仍可能被送錯或丟失。

7. 小測驗

第 1 題,共 3 題OSPF 的 Router 用什麼訊息認識鄰居,並確認對方仍然在線?
第 2 題,共 3 題OSPF 怎樣選擇去某個網絡的路線?
第 3 題,共 3 題以下哪一項不是 Dynamic Routing 相比 Static Route 的好處?

8. 重點筆記

  • Dynamic Routing(動態路由)讓 Router 自動交換情報、自動更新 Routing Table,網線斷了也會自己改道。
  • OSPF 是 Link State(鏈路狀態)協定:每部 Router 都擁有同一張完整地圖,再各自計算。
  • OSPF 四部曲:Hello 認識鄰居 → 交換 LSA → 拼出同一個 LSDB → 用 SPF 計算總 Cost 最低的路線。
  • Hello 大約每 10 秒一次;40 秒(Dead Interval)收不到,就當鄰居失去聯絡。
  • 公司內部多用 OSPF;互聯網上不同 ISP 之間用 BGP(邊界閘道協定)。

延伸閱讀

現在路路們懂得自動找路,家中、工作室和店舖都連起來了。可是家中裝置用的是 Private IP(私人位址),出了互聯網就沒有人認得。下一個故事,路路變身大廈管理處,介紹 NAT(網絡位址轉換)與 Port Forwarding(連接埠轉發)。