1. 故事
按「下一步」一步一步看。每一步都有一位角色出場,解釋自己正在做什麼。
序幕:溫習一下
第 1 步/共 10 步
Unicast:一對一
平日我的背包寫明一個收件人,例如電視。這叫 Unicast(單播),一對一。
動畫文字版(全部步驟)
- 序幕:溫習一下
- Unicast:一對一 小比:平日我的背包寫明一個收件人,例如電視。這叫 Unicast(單播),一對一。
- Broadcast:一對全部 八爪:有時阿麥要問全屋一個問題,例如 ARP 的「誰是 192.168.1.1?」。收件人是
FF:FF:FF:FF:FF:FF,我就複製送到所有 Port。這叫 Broadcast(廣播),一對全部。 - 第一幕:大家都想看直播
- 兩部裝置,同一場波 阿麥:今晚有足球直播。電視和桌面電腦都想看,我就要安靜做功課,不想收到直播。
- 方法一:Unicast,逐份寄 路路:用 Unicast,每部想看的裝置都要一份。2 部看,由互聯網到我這裡就要運 2 份一模一樣的直播;100 部看就要 100 份!
- 方法二:Broadcast,全屋都收 路路:用 Broadcast 只送一份,但連不想看的阿麥也要收。更大的問題是:Broadcast 過不了 Router,互聯網上的直播根本送不進來。
- 第二幕:一對一班
- 寄給一個群組 小比:新方法:Multicast(多播)!我的收件人不是一部裝置,而是一個群組
233.252.0.1,就好像「足球興趣班」。由互聯網到路路,只需要運一份。 - 群組也有 MAC Address 八爪:在 LAN 裡,小比的收件人 MAC Address 變成
01:00:5E:7C:00:01,由群組地址計算出來。可是我不知道誰加入了這個群組,只好像 Broadcast 一樣,每個 Port 都送一份。01:00:5E+233.252.0.1的最後 23 位元 =01:00:5E:7C:00:01
- 想看的收下,不想看的丟棄 阿麥:我的網絡卡有一份「收信名單」,上面沒有
01:00:5E:7C:00:01,所以直接丟棄,我完全不受打擾。電視和桌面電腦加入了群組,就收下來播放。 - 還差一步 八爪:不過阿麥那條網線,仍然白白運了一份直播。如果直播有好幾個頻道,網線和 Wi-Fi 都會被塞滿。怎樣讓我知道誰想看?下一個故事揭曉!
- 尾聲:還有一種寄法
- Anycast:一對最近的一個 路路:還有一種寄法叫 Anycast(任播):幾部伺服器在世界不同地方共用同一個地址,例如
192.0.2.53。我只要把小比送到最近的那一部就可以了。故事 23 會詳細講。
2. 問題在哪裡
到現在為止,小比只有兩種寄信方法:
- Unicast(單播):一封信寫明一個收件人,一對一。
- Broadcast(廣播):一封信寄給同一個 LAN(區域網絡)內的所有裝置,一對全部。
某個晚上,客廳的電視和桌面電腦都想看同一場足球直播;阿麥卻只想安靜地做功課。直播由 IPTV(網絡電視)服務送來,畫面每秒都有一大堆 Packet(封包)。
- 用 Unicast:有 2 部裝置看,就要送 2 份一模一樣的資料。100 部看,就要送 100 份。
- 用 Broadcast:只送 1 份,但連不想看的阿麥也要收,而且 Broadcast 過不了 Router(路由器),直播根本送不進屋。
有沒有一種方法,只送一份,又只給想看的裝置?
3. 網絡怎樣解決
想像學校有一個足球興趣班。老師不用把通告逐個寄給 30 位同學,也不用在全校廣播;他只要把通告貼在「足球班」的壁報板,想參加的同學自己去看。
Multicast(多播)就是這個「興趣班」寄法:一封信寫給一個 Multicast Group(多播群組),而不是一部裝置。資料只送一份,沿途有需要才複製;想收的裝置加入群組,就會收下;沒有加入的裝置會直接丟棄。
4. 看深一點
四種寄信方法
| 方法 | 關係 | 收件人是誰? | IPv4 例子 | 日常例子 |
|---|---|---|---|---|
| Unicast(單播) | 一對一 | 一部指定的裝置 | 192.168.1.10 |
打開 example.com 網頁 |
| Broadcast(廣播) | 一對全部 | 同一個 LAN 內所有裝置 | 255.255.255.255 |
ARP(位址解析協定)問「誰是 192.168.1.1?」 |
| Multicast(多播) | 一對一班 | 加入了某個群組的裝置 | 233.252.0.1 |
IPTV 直播、OSPF(開放最短路徑優先)的 Hello |
| Anycast(任播) | 一對「最近的一個」 | 幾部共用同一個地址的伺服器之中,最近的一部 | 192.0.2.53 |
DNS Root Server(根伺服器) |
Anycast 的地址本身和 Unicast 一模一樣,分別在於「同一個地址放在幾個地方」,由 Router 把 Packet 送到最近的一個。故事 23 會詳細講解。
Multicast 的 IP Address
IPv4 預留了一整段地址給 Multicast:224.0.0.0 至 239.255.255.255,即 224.0.0.0/4。這段地址只可以做「收件人」,不可以給任何裝置當自己的地址。
| 範圍 | 用途 |
|---|---|
224.0.0.0/24 |
只在同一個 LAN 內使用,Router 不會轉發,例如 224.0.0.1(所有主機)、224.0.0.2(所有 Router)、224.0.0.5(OSPF) |
232.0.0.0/8 |
SSM(指定來源多播),接收者可以指定只要哪一個來源 |
233.252.0.0/24 |
保留給文件及教材做例子,本網站就用這一段 |
239.0.0.0/8 |
機構內部自行使用,有點像 Private IP(私人位址) |
IPv6 完全沒有 Broadcast,本來由 Broadcast 做的工作全部改用 Multicast,例如 ff02::1 代表同一個 LAN 內所有裝置。
Multicast 的 MAC Address
Frame(訊框)在 LAN 內要寫上 MAC Address(硬體位址)。一個群組沒有網絡卡,哪來的 MAC Address?答案是按規則「計算」出來:
Multicast MAC Address = 01:00:5E + IP Address 最後 23 位元
233.252.0.1
最後 23 位元:252 去掉最高的 1 個位元 → 124(7C),0(00),1(01)
→ 01:00:5E:7C:00:01
- 第一個位元組
01的最低位元是 1,表示「這是一個群組」。Broadcast 的FF也是這樣,所以 Switch(交換器)一看就知道這不是寄給單一裝置。 - IPv4 地址有 28 位元可以變化,MAC Address 只放得下 23 位元,所以每 32 個 Multicast IP Address 會共用同一個 MAC Address。例如
239.124.0.1也對應01:00:5E:7C:00:01。網絡卡收下後,電腦還要再看一次 IP Address,才知道是不是自己想要的。
誰收下,誰丟棄?
每部電腦的網絡卡都有一份「收信名單」:自己的 MAC Address、Broadcast,以及自己加入了的 Multicast 群組。電視加入了 233.252.0.1,名單上就多了 01:00:5E:7C:00:01;阿麥沒有加入,網絡卡一看不在名單上,就在硬件層面直接丟棄,連 CPU 都不用打擾。
還未解決的問題
LAN 內的 Switch 預設不知道誰加入了哪個群組,所以會把 Multicast 當作 Broadcast,送到每一個 Port(連接埠)。阿麥雖然會丟棄,但他那條網線仍然要運一份直播。下一個故事,八爪會學會怎樣分辨誰想看。
至於跨越 Router 的 Multicast,要靠 PIM(協定獨立多播)等協定建立「分發樹」,本故事暫不深入。家用 Router 通常用 IGMP Proxy(IGMP 代理)向 ISP 報名,把直播接進屋內。
5. 動手試試
任務:看看你的電腦加入了哪些群組
你的電腦其實每天都在用 Multicast。打開終端機或命令提示字元,輸入:
| 系統 | 指令 |
|---|---|
| Windows | netsh interface ipv4 show joins |
| macOS | netstat -g |
| Linux | ip maddr |
你很可能會看到 224.0.0.1(所有主機)和 224.0.0.251。後者是 mDNS(多播網域名稱系統),打印機、智能喇叭等裝置用它在 LAN 內互相找到對方。
小互動
這是哪一種寄法?
把每張卡分到正確的寄信方法。
-
1阿麥打開 example.com 的網頁
-
2ARP 問「誰是 192.168.1.1?」
-
3兩部電視同時看同一個 IPTV 頻道
-
4OSPF 的 Hello 寄到 224.0.0.5
-
5查詢 DNS Root Server,由最近的一部回答
-
6收件人 MAC Address 是 FF:FF:FF:FF:FF:FF
-
7收件人 MAC Address 是 01:00:5E:7C:00:01
-
8電視把相片傳給桌面電腦
全部分對了!Unicast 一對一、Broadcast 一對全部、Multicast 一對一班、Anycast 一對最近的一個。
6. 比喻的極限
- 興趣班的壁報板是固定的,Multicast 卻沒有「一個地方」放信。 Multicast 是由網絡設備在路上複製,送到有需要的方向,並不是把信放在某處讓人去取。
- 同學看壁報要自己走過去,電腦卻不用主動去拿。 電腦只是「登記」加入群組,資料會自己送到。
- Multicast 不保證送到。 直播大多用 UDP(用戶資料包協定),掉了一些 Packet 也不會重寄,畫面可能短暫出現格仔。
- 動畫裡阿麥「丟棄」小比,是網絡卡在硬件層面做的。 阿麥的應用程式完全不會察覺。
7. 小測驗
8. 重點筆記
- 四種寄法:Unicast 一對一、Broadcast 一對全部、Multicast 一對一班、Anycast 一對最近的一個。
- Multicast 只送一份資料,由網絡設備在需要時複製,最適合直播這類「很多人同時看同一樣東西」的情況。
- IPv4 Multicast 地址是
224.0.0.0/4;本網站的例子用文件專用的233.252.0.0/24。 - Multicast MAC Address =
01:00:5E+ IP Address 最後 23 位元;沒有加入群組的網絡卡會直接丟棄。 - IPv6 沒有 Broadcast,全部改用 Multicast。
延伸閱讀
Multicast 解決了「寄幾多份」的問題,但八爪仍然不知道誰想看,只好把直播送到每個 Port。下一個故事,八爪會學會監聽 IGMP(互聯網群組管理協定)的報名訊息:。