1. 故事
按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。
序幕:溫習一下
第 1 步/共 11 步
一份直播進屋
上一個故事,我用 Multicast(多播)寄給群組 233.252.0.1,由互聯網到路路只需要一份。今晚電視要看頻道 1。
動畫文字版(全部步驟)
- 序幕:溫習一下
- 一份直播進屋 小比:上一個故事,我用 Multicast(多播)寄給群組
233.252.0.1,由互聯網到路路只需要一份。今晚電視要看頻道 1。 - 第一幕:全屋都塞車
- 八爪只好全部送 八爪:我的筆記簿只記「哪部裝置在哪個 Port」。群組
01:00:5E:7C:00:01永遠不會寄信給我,所以我永遠學不到它,只好送到每一個 Port。 - Wi-Fi 慢得像蝸牛 阿麥:我在書房用手機上網,突然變得很慢!Access Point 要把直播播到空氣中,而且 Wi-Fi 送 Multicast 通常用最慢、最穩妥的速度,無線時間都被佔去了。
- 第二幕:IGMP 報名
- 電視交報名表 路路:其實想看直播的裝置,要先向我報名。電視發出 IGMP(互聯網群組管理協定)的 Membership Report,俗稱 Join:「我想加入
233.252.0.1。」 - 路路只知道「有人」 路路:收到報名,我就知道這個 LAN 有人想看頻道 1,於是向互聯網取直播。可是我只需要知道「有人」,並不知道是哪一個 Port。分配的工作,要靠八爪。
- 第三幕:八爪學會監聽
- 偷看一眼報名表 八爪:開啟 IGMP Snooping(IGMP 監聽)後,報名表經過我身邊時,我會看一眼:「P3 想看
233.252.0.1!」記下來,再照樣交給路路。- 八爪也從路路發出的 Query 知道:路路在 P5,這是 Router Port。
- 只送到 P3 八爪:現在頻道 1 只送到 P3 的電視。阿麥、桌面電腦和 Access Point 都不再收到,Wi-Fi 也回復正常了!
- 桌面電腦也想看 阿麥:爸爸在桌面電腦也打開了同一個頻道。它同樣發出 Join,八爪把 P2 加進記錄。直播仍然只由路路送一份,八爪按記錄複製給 P2 和 P3。
- 第四幕:定期點名與離開
- 每 125 秒點名一次 路路:我是這個 LAN 的 IGMP Querier(查詢者),大約每 125 秒發出一次 General Query:「還有誰在看?」還在看的裝置會再報名,八爪的記錄就不會過期。
- 電視說再見 小比:電視關機前發出 Leave:「我不看了。」路路再問一次頻道 1 還有沒有人看。桌面電腦回答仍然在看,電視卻沒有回應。
- 只送給想看的人 八爪: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 怎樣運作?
- 找出 Router 在哪裡。 八爪看到 General Query 由 P5 進來,就把 P5 記為 Multicast Router Port(多播路由器連接埠),所有報名都要送到這裡。
- 監聽報名。 電視由 P3 發出 Membership Report,八爪記下「P3 想看
233.252.0.1」,然後照樣把報名轉交路路。 - 只送到有成員的 Port。 之後
233.252.0.1的直播只會送到 P3(以及 P5,給其他可能需要的 Router)。 - 定期確認。 路路每 125 秒發出 General Query,還在看的裝置會再報名一次,八爪就知道記錄仍然有效。
- 離開。 電視發出 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電視發出 Membership Report,報名加入 233.252.0.1
-
2Router 大約每 125 秒發出 General Query
-
3記下「P3 想看 233.252.0.1」
-
4電視關機前發出 Leave
-
5頻道 1 只送到有成員的 Port
-
6找出 Query 由哪個 Port 進來,記為 Router Port
全部分對了!IGMP 是裝置向 Router 報名的協定;IGMP Snooping 是 Switch 監聽這些報名,決定把直播送到哪些 Port。
6. 比喻的極限
- 接待姐姐只是「看一眼」,八爪其實看得很仔細。 Switch 本來只看 Frame(訊框)的 MAC Address,IGMP Snooping 卻要打開 Packet,讀取 Layer 3 的 IGMP 內容,所以它不是純粹的 Layer 2 功能。
- 「偷看」並不是保安漏洞。 IGMP 訊息本來就是寫給網絡設備看的,Switch 監聽它是正常做法。
- 報名表不會永遠有效。 真實網絡要靠 Query 定期確認,記錄過期就會被刪除,比喻中沒有這一步。
- 動畫中的時間縮短了。 真實的 General Query 大約每 125 秒一次,離開時的確認也要等一至兩秒。
7. 小測驗
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 地址,都會得到最近的一部回答。