網絡小故事 21 · 入門

Unicast, Broadcast, Multicast & Anycast

兩部電視想看同一場直播,要寄兩份,還是寄一份給全屋?

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

建議先讀:第 3 課、第 4 課、小故事 1「Switch 入門」

1. 故事

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

序幕:溫習一下

第 1 步/共 10 步

Unicast:一對一

平日我的背包寫明一個收件人,例如電視。這叫 Unicast(單播),一對一。

動畫文字版(全部步驟)
  1. 序幕:溫習一下
  2. Unicast:一對一 小比:平日我的背包寫明一個收件人,例如電視。這叫 Unicast(單播),一對一。
  3. Broadcast:一對全部 八爪:有時阿麥要問全屋一個問題,例如 ARP 的「誰是 192.168.1.1?」。收件人是 FF:FF:FF:FF:FF:FF,我就複製送到所有 Port。這叫 Broadcast(廣播),一對全部。
  4. 第一幕:大家都想看直播
  5. 兩部裝置,同一場波 阿麥:今晚有足球直播。電視和桌面電腦都想看,我就要安靜做功課,不想收到直播。
  6. 方法一:Unicast,逐份寄 路路:用 Unicast,每部想看的裝置都要一份。2 部看,由互聯網到我這裡就要運 2 份一模一樣的直播;100 部看就要 100 份!
  7. 方法二:Broadcast,全屋都收 路路:用 Broadcast 只送一份,但連不想看的阿麥也要收。更大的問題是:Broadcast 過不了 Router,互聯網上的直播根本送不進來。
  8. 第二幕:一對一班
  9. 寄給一個群組 小比:新方法:Multicast(多播)!我的收件人不是一部裝置,而是一個群組 233.252.0.1,就好像「足球興趣班」。由互聯網到路路,只需要運一份。
  10. 群組也有 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
  11. 想看的收下,不想看的丟棄 阿麥:我的網絡卡有一份「收信名單」,上面沒有 01:00:5E:7C:00:01,所以直接丟棄,我完全不受打擾。電視和桌面電腦加入了群組,就收下來播放。
  12. 還差一步 八爪:不過阿麥那條網線,仍然白白運了一份直播。如果直播有好幾個頻道,網線和 Wi-Fi 都會被塞滿。怎樣讓我知道誰想看?下一個故事揭曉!
  13. 尾聲:還有一種寄法
  14. 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. 1阿麥打開 example.com 的網頁

  2. 2ARP 問「誰是 192.168.1.1?」

  3. 3兩部電視同時看同一個 IPTV 頻道

  4. 4OSPF 的 Hello 寄到 224.0.0.5

  5. 5查詢 DNS Root Server,由最近的一部回答

  6. 6收件人 MAC Address 是 FF:FF:FF:FF:FF:FF

  7. 7收件人 MAC Address 是 01:00:5E:7C:00:01

  8. 8電視把相片傳給桌面電腦

6. 比喻的極限

  • 興趣班的壁報板是固定的,Multicast 卻沒有「一個地方」放信。 Multicast 是由網絡設備在路上複製,送到有需要的方向,並不是把信放在某處讓人去取。
  • 同學看壁報要自己走過去,電腦卻不用主動去拿。 電腦只是「登記」加入群組,資料會自己送到。
  • Multicast 不保證送到。 直播大多用 UDP(用戶資料包協定),掉了一些 Packet 也不會重寄,畫面可能短暫出現格仔。
  • 動畫裡阿麥「丟棄」小比,是網絡卡在硬件層面做的。 阿麥的應用程式完全不會察覺。

7. 小測驗

第 1 題,共 3 題以下哪一個是 IPv4 Multicast 地址?
第 2 題,共 3 題233.252.0.1 對應的 Multicast MAC Address 是什麼?
第 3 題,共 3 題Anycast 的意思是什麼?

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(互聯網群組管理協定)的報名訊息:。