網絡小故事 22 · 進階

IGMP Snooping

客廳的電視在看直播,為什麼書房的手機上網慢了?

主角:八爪、路路、小比、阿麥閱讀時間約 10 分鐘

建議先讀:小故事 21「Multicast」、小故事 4「Wi-Fi 與 Access Point」

1. 故事

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

序幕:溫習一下

第 1 步/共 11 步

一份直播進屋

上一個故事,我用 Multicast(多播)寄給群組 233.252.0.1,由互聯網到路路只需要一份。今晚電視要看頻道 1。

動畫文字版(全部步驟)
  1. 序幕:溫習一下
  2. 一份直播進屋 小比:上一個故事,我用 Multicast(多播)寄給群組 233.252.0.1,由互聯網到路路只需要一份。今晚電視要看頻道 1。
  3. 第一幕:全屋都塞車
  4. 八爪只好全部送 八爪:我的筆記簿只記「哪部裝置在哪個 Port」。群組 01:00:5E:7C:00:01 永遠不會寄信給我,所以我永遠學不到它,只好送到每一個 Port。
  5. Wi-Fi 慢得像蝸牛 阿麥:我在書房用手機上網,突然變得很慢!Access Point 要把直播播到空氣中,而且 Wi-Fi 送 Multicast 通常用最慢、最穩妥的速度,無線時間都被佔去了。
  6. 第二幕:IGMP 報名
  7. 電視交報名表 路路:其實想看直播的裝置,要先向我報名。電視發出 IGMP(互聯網群組管理協定)的 Membership Report,俗稱 Join:「我想加入 233.252.0.1。」
  8. 路路只知道「有人」 路路:收到報名,我就知道這個 LAN 有人想看頻道 1,於是向互聯網取直播。可是我只需要知道「有人」,並不知道是哪一個 Port。分配的工作,要靠八爪。
  9. 第三幕:八爪學會監聽
  10. 偷看一眼報名表 八爪:開啟 IGMP Snooping(IGMP 監聽)後,報名表經過我身邊時,我會看一眼:「P3 想看 233.252.0.1!」記下來,再照樣交給路路。
    • 八爪也從路路發出的 Query 知道:路路在 P5,這是 Router Port。
  11. 只送到 P3 八爪:現在頻道 1 只送到 P3 的電視。阿麥、桌面電腦和 Access Point 都不再收到,Wi-Fi 也回復正常了!
  12. 桌面電腦也想看 阿麥:爸爸在桌面電腦也打開了同一個頻道。它同樣發出 Join,八爪把 P2 加進記錄。直播仍然只由路路送一份,八爪按記錄複製給 P2 和 P3。
  13. 第四幕:定期點名與離開
  14. 每 125 秒點名一次 路路:我是這個 LAN 的 IGMP Querier(查詢者),大約每 125 秒發出一次 General Query:「還有誰在看?」還在看的裝置會再報名,八爪的記錄就不會過期。
  15. 電視說再見 小比:電視關機前發出 Leave:「我不看了。」路路再問一次頻道 1 還有沒有人看。桌面電腦回答仍然在看,電視卻沒有回應。
  16. 只送給想看的人 八爪:P3 沒有回應,我就把它從記錄中刪除。現在頻道 1 只送到 P2。這就是 IGMP Snooping:只送給想看的人!

2. 問題在哪裡

上一個故事,直播用 Multicast(多播)送進屋,由互聯網到路路只需要一份。可是到了八爪,即 Switch(交換器),問題又出現了:

八爪的 MAC Address Table(MAC 位址表)只記錄「哪部裝置在哪個 Port(連接埠)」。Multicast 的收件人 01:00:5E:7C:00:01 是一個群組,永遠不會出現在「寄件人」一欄,所以八爪永遠學不到它。結果,八爪只好把直播當作 Broadcast(廣播),送到同一個 VLAN(虛擬區域網絡)的每一個 Port:

  • 阿麥的網線、桌面電腦的網線,全部白白運一份直播。
  • Access Point(無線基地台)也收到一份,還要播到空氣中。Wi-Fi(無線網絡)送 Multicast 時,通常用最慢、最穩妥的速度,而且沒有人回覆確認,一條高清頻道就可以佔去大量無線時間,手機上網因此變慢。
  • 如果同時有幾個頻道在播,情況更差。

3. 網絡怎樣解決

想像社區中心的興趣班報名:學員把報名表交給職員,報名表會經過大堂的接待處。接待處的姐姐很聰明,順手看一眼報名表,記下「302 室的人報了足球班」。以後足球班的通告,她就只送去 302 室。

IGMP(互聯網群組管理協定)就是裝置向 Router(路由器)報名加入 Multicast 群組的協定。IGMP Snooping(IGMP 監聽)就是 Switch 那位聰明的接待姐姐:它在報名訊息經過時「偷看」一眼,記下哪個 Port 有人想看哪個群組,之後只把該群組的資料送到那些 Port。

4. 看深一點

IGMP 的三種主要訊息

訊息 誰發出? 寄到哪裡? 意思
Membership Report(成員報告),俗稱 Join 想看的裝置 該群組,例如 233.252.0.1(IGMPv3 則寄到 224.0.0.22) 「我想加入這個群組。」
General Query(一般查詢) Router,即 IGMP Querier(查詢者) 224.0.0.1(所有主機) 「還有誰想看什麼?」預設每 125 秒一次
Leave Group(離開群組) 不想再看的裝置(IGMPv2) 224.0.0.2(所有 Router) 「我不看了。」

IGMP 訊息直接放在 IP Packet(封包)裡,協定號碼是 2,TTL(存活時間)設為 1,所以永遠不會離開這個 LAN(區域網絡)。

留意:Router 只需要知道「這個 LAN 有沒有人想看」,不需要知道是哪一部裝置。所以 IGMP 本身不能幫 Switch 決定送去哪個 Port,這正是 IGMP Snooping 要做的事。

IGMP Snooping 怎樣運作?

  1. 找出 Router 在哪裡。 八爪看到 General Query 由 P5 進來,就把 P5 記為 Multicast Router Port(多播路由器連接埠),所有報名都要送到這裡。
  2. 監聽報名。 電視由 P3 發出 Membership Report,八爪記下「P3 想看 233.252.0.1」,然後照樣把報名轉交路路。
  3. 只送到有成員的 Port。 之後 233.252.0.1 的直播只會送到 P3(以及 P5,給其他可能需要的 Router)。
  4. 定期確認。 路路每 125 秒發出 General Query,還在看的裝置會再報名一次,八爪就知道記錄仍然有效。
  5. 離開。 電視發出 Leave,路路會對該群組再問一至兩次(Group-Specific Query,指定群組查詢)。沒有人回應,八爪就把 P3 從記錄中刪除。

八爪的 Multicast 筆記簿

VLAN 群組 有成員的 Port Router Port
10 233.252.0.1(頻道 1) P2、P3 P5
10 233.252.0.2(頻道 2) 沒有 P5

這份表和 MAC Address Table 是兩份不同的記錄。

容易忽略的細節

  • 一定要有 Querier。 裝置加入後,通常只會在收到 Query 時才再次報名。如果 LAN 裡沒有 Router 發出 Query,八爪的記錄過了大約 260 秒(2 × 125 秒 + 10 秒)就會過期,直播可能中斷。很多 Switch 因此有 IGMP Snooping Querier 功能,沒有 Router 時由 Switch 代為發問。
  • 224.0.0.x 不受限制。 這段是 LAN 內的控制訊息,例如 OSPF(開放最短路徑優先)的 Hello,IGMP Snooping 一律照樣送到所有 Port。
  • 沒有人報名的群組怎樣處理? 不同廠牌的預設做法不同,有些仍然送到所有 Port,有些只送到 Router Port。
  • Fast Leave(快速離開)。 如果一個 Port 只接著一部裝置,可以開啟 Fast Leave:一收到 Leave 就立即停止,不用等 Router 再查詢。
  • IPv6 版本。 IPv6 用 MLD(多播接收者探索)代替 IGMP,Switch 相應的功能叫 MLD Snooping。
  • Wi-Fi 的補救。 不少 Access Point 可以把 Multicast 轉為逐部手機的 Unicast(單播)再送出,令無線網絡更有效率。

5. 動手試試

任務:在家中 Router 找找看

登入家中 Router 的設定頁(通常在瀏覽器輸入 Default Gateway(預設閘道)的地址,例如 192.168.1.1),在「LAN」、「Multicast」或「IPTV」一類的頁面,找找有沒有以下選項:

  • IGMP Snooping
  • IGMP Proxy(IGMP 代理)
  • Multicast to Unicast(多播轉單播)

不確定的話只看不改,改錯設定可能令網絡電視無法播放。

小互動

IGMP 還是 IGMP Snooping?

把每張卡分到負責那件事的一方。

  1. 1電視發出 Membership Report,報名加入 233.252.0.1

  2. 2Router 大約每 125 秒發出 General Query

  3. 3記下「P3 想看 233.252.0.1」

  4. 4電視關機前發出 Leave

  5. 5頻道 1 只送到有成員的 Port

  6. 6找出 Query 由哪個 Port 進來,記為 Router Port

6. 比喻的極限

  • 接待姐姐只是「看一眼」,八爪其實看得很仔細。 Switch 本來只看 Frame(訊框)的 MAC Address,IGMP Snooping 卻要打開 Packet,讀取 Layer 3 的 IGMP 內容,所以它不是純粹的 Layer 2 功能。
  • 「偷看」並不是保安漏洞。 IGMP 訊息本來就是寫給網絡設備看的,Switch 監聽它是正常做法。
  • 報名表不會永遠有效。 真實網絡要靠 Query 定期確認,記錄過期就會被刪除,比喻中沒有這一步。
  • 動畫中的時間縮短了。 真實的 General Query 大約每 125 秒一次,離開時的確認也要等一至兩秒。

7. 小測驗

第 1 題,共 3 題沒有開啟 IGMP Snooping 的 Switch,收到 233.252.0.1 的直播時通常會怎樣做?
第 2 題,共 3 題開啟 IGMP Snooping 後,Switch 怎樣知道哪個 Port 想看哪個群組?
第 3 題,共 3 題LAN 裡沒有任何設備發出 IGMP Query,最可能發生什麼事?

8. 重點筆記

  • Switch 永遠學不到 Multicast MAC Address,沒有 IGMP Snooping 時會把 Multicast 送到所有 Port,浪費網線和 Wi-Fi。
  • IGMP 是裝置和 Router 之間的報名協定:Membership Report(Join)、General Query、Leave。
  • IGMP Snooping 是 Switch 的功能:監聽 IGMP,記下哪個 Port 有成員,只把群組資料送到那些 Port 和 Router Port。
  • 網絡中要有 IGMP Querier(通常是 Router),否則記錄會過期。
  • IPv6 的相應做法是 MLD 和 MLD Snooping。

延伸閱讀

到這裡,你已經認識了 Unicast、Broadcast 和 Multicast。最後一種寄法 Anycast(任播)不在 LAN 裡發生,要靠 Router 在互聯網上選路。故事 23 會由查查博士帶你去看:為什麼世界各地的人,查詢同一個 DNS Root Server 地址,都會得到最近的一部回答。