技術小故事

OSPF Hello 的初次相遇

兩個陌生的路由器如何透過 Hello 協議相互發現,建立 Neighbor 關係

2026-04-23 · 7 min read · updated 2026-05-10
OSPF Hello Neighbor 路由協定

故事

場景:陌生的網路鄰域

Router A 和 Router B 被連接在同一條乙太網上, 卻互相不認識。Router A 不知道 Router B 是誰;對 B 而言,A 也只是一段未命名的訊號。 但它們都被工程師設定了同一個 OSPF Process ID,也都被丟進 Area 0note · 1Area 0 是 OSPF 的 backbone area。所有其他 area 都必須能直接或經由 virtual link 連回 Area 0。

這是兩個聾啞的點。要能形成路由,它們得先聽見彼此。

觸發:Hello 的第一聲呼喚

Router A 的 OSPF 進程啟動後,馬上問自己:「我在網路上嗎?有沒有其他路由器在我附近?」 於是它向 224.0.0.5note · 2224.0.0.5 是 AllSPFRouters 多播位址;所有啟用 OSPF 的介面都會訂閱這個 group,但只有 OSPF 進程會處理收到的封包。 多播了一個 Hello 封包,裡面寫著:

  • Router ID · 1.1.1.1 — 我是誰
  • Area · 0 — 我在哪個區域
  • Hello / Dead Interval · 10 / 40 — 我多久講一次話、多久沒回就當我死了
  • Neighbor List · (空) — 我目前還誰都沒看見
Router
A
1.1.1.1
→ Hello
Router
B
2.2.2.2

Fig. 1 · Hello 三步握手 (interactive)

回應:原來你也在這

Router B 在 10 秒內收到 A 的 Hello。它先檢查幾件事:Area 一致嗎? Hello / Dead Interval 對齊嗎?認證、Stub 旗標相同嗎? 全部都通過後,B 把 1.1.1.1 寫進自己的 Neighbor 列表, 並回了一個自己的 Hello — 但這次,Neighbor List 不再是空的, 裡面寫著 1.1.1.1

A 收到後,看見自己的 ID 出現在對方的 Hello 裡, 於是把狀態從 Init 升到 2-Way。到這一刻,雙方才算真正「認識」。

Hello 不是握手,是點名。點到對方的名字,才算握到手。

技術摘要

Hello 封包的內容

Hello 包用 IP Protocol 89 直接封裝,不走 TCP / UDP。重點欄位:

  • Router ID — 用來唯一標識自己(通常取 Loopback 最高 IP)
  • Area ID — 表示所在的區域,兩端必須一致
  • Network Mask — Broadcast 網段才檢查
  • Hello Interval — 每多少秒廣播一次 Hello(預設 10 秒)
  • Dead Interval — 多久沒聽到對方就視為斷線(預設 40 秒)
  • Options · Neighbor List

實際在 Cisco 設備上,可以這樣驗證 Neighbor 是否成功建立:

R1# show ip ospf neighbor cisco
Neighbor ID     Pri   State           Dead Time   Address         Interface
2.2.2.2           1   FULL/DR         00:00:35    10.0.0.2        Gi0/0
3.3.3.3           1   2-WAY/DROTHER   00:00:32    10.0.0.3        Gi0/0

Hello / Dead Interval

Dead Interval 通常是 Hello Interval 的 4 倍。 在 Point-to-Point 與 Broadcast 是 10/40;NBMA 與 Point-to-Multipoint 預設拉長到 30/120。 兩端必須相同,否則 Hello 互通也建不起 Neighbor。

常見誤解

❌ Neighbor 就能交換路由資訊

Neighbor 只是相互認識(2-Way)。 交換 LSDB 需要進一步升級到 Adjacency — 那是 ExStart / Exchange / Loading / Full 之後的事。

❌ Hello 用 UDP 傳送

OSPF 直接坐在 IP 層上,protocol number 是 89, 沒有 TCP 或 UDP header。

❌ Router ID 必須是介面 IP

Router ID 是 32-bit 的識別碼, 只是「長得像 IP」。建議綁在 Loopback 上,避免實體介面 down 掉就跟著換 ID。

接下來會發生什麼

Hello 只是把陌生變成「相互認識」。下一步是 從 2-Way 到 Full 的攀爬 — 我們會跟著兩個 Router 一起走過 ExStart 的握手戰、 Exchange 階段的 DBD 互換,以及最後 Full 狀態落定的那一刻。