單元 04A 單播、多播、廣播與 LAN 服務探索
學習目標與先備關係
先讀 04 的交換表及 VLAN。4A.1 至 4A.4 處理鏈路與多播;4A.5 在讀 05 的 DNS 後回讀,IPv6 細節與 11 互相參照。完成後應能追蹤不同交付方式、區分 FDB 與 MDB、解釋 IGMP/MLD 與 snooping,並定位「能以 IP 連線卻找不到印表機」的問題。
本文以「多播」稱 multicast,其他資料也常稱群播或組播。問題:交換器看到多播訊框,是否一定送到所有主機?
4A.1 先分交付語義,再看實際出口
| 類型 | 目的與範圍 | 交換器簡化行為 |
|---|---|---|
| 已知單播 | 一個鏈路目的 MAC | FDB 命中時送目的埠 |
| 未知單播 | 目的仍是單播 MAC | FDB 未命中時,同 VLAN 泛洪 |
| 廣播 | ff:ff:ff:ff:ff:ff | 同 VLAN 可轉送埠,排除入口 |
| 多播 | 一個群組,可能零/一/多個接收者 | 依成員、router port 及裝置政策決定 |
上表假設無埠隔離、ACL、鏡像及特殊控制訊框規則。泛洪是交換器的轉送動作,不會把單播目的改成廣播。接收端收到鏈路副本,也不表示 IP/socket 或應用一定接受。
IPv4 有限廣播 255.255.255.255 限制在本鏈路;子網導向廣播如 192.0.2.255/24 的語義不同,路由器預設不應轉送這類導向廣播。不要為了跨網段探索直接開啟廣播轉送。IPv6 沒有 broadcast 位址,以不同 scope 的 multicast 等機制完成相關功能。
ARP 請求通常用 Ethernet 廣播;但 ARP 本身不是 IP 資料報(EtherType 0x0806),既不是 IPv4 廣播也不是 IPv4 多播。NDP 是 ICMPv6,鄰居解析常送 solicited-node multicast;IGMP/MLD 管理接收成員,不能替 ARP/NDP 找單播鄰居。
4A.2 IP 群組與鏈路 MAC 不是一對一
IPv4 多播範圍 224.0.0.0/4;224.0.0.0/24 供本地網路控制,239.0.0.0/8 供管理範圍,實際邊界仍需路由與管理政策。IPv6 群組位址由 ff00::/8 開始,含 scope 欄位;ff02 是 link-local scope,不能只看它是 IPv6 就當作全球可路由。
Ethernet 上的 IPv4 多播 MAC 使用 01:00:5e 加上群組 IP 的低 23 bits,所以 32 個 IPv4 群組可以對映到同一 MAC。239.192.0.42 與 224.64.0.42 皆對映到 01:00:5e:40:00:2a;若設備只按 MAC 過濾,可能多送副本,IP 層仍需按群組過濾。IPv6 通常對映到 33:33 加目的位址低 32 bits,也可能別名。
多播發送者不必先加入接收群組;接收者透過 socket 加入指定介面的群組。群組不是可直接建立普通 TCP 連線的單一伺服器。多播資料常用 UDP,但管理封包 IGMP 或 ICMPv6 本身不使用 UDP 埠;不能將「多播只有 UDP」當成分層定義。
4A.3 成員管理、snooping 與路由三種工作

| 機制 | 知道什麼 | 負責什麼 |
|---|---|---|
| FDB 來源學習 | VLAN、來源 MAC、入口埠 | 單播鏈路轉送 |
| IGMP/MLD | 某鏈路有接收者對哪些群組/來源有興趣 | 主機向相鄰多播路由器報告 |
| IGMP/MLD snooping、MDB | 群組對應成員埠,另記 router port | 交換器限制 LAN 內多播副本 |
| 多播路由/PIM 等 | 跨鏈路的樹、上游與下游 | 路由器跨子網轉送多播 |
IGMPv3 用於 IPv4,MLDv2 用於 IPv6 且屬 ICMPv6,兩者都支援來源篩選。ASM(any-source multicast)以群組 G 識別服務,接收送往 G 的任意來源,可再排除部分來源;SSM(source-specific multicast)以 (S,G) 識別通道,只接收指定來源 S 送往 G 的流量。來源篩選是協定能力,不等同 ASM/SSM 的定義本身。group membership 不提供密碼學身分驗證,也不代替防火牆。
現行規範 RFC 9776/9777 於 2025 年分別取代 3376/3810,協定仍是 IGMPv3/MLDv2。部署可能使用較早版本,snooping 支援也需看設備;不要因 RFC 號更新就宣稱所有交換器已支援新版功能。
一次成員生命週期
- B 的應用在指定介面加入群組 G;OS 更新接收狀態,依協定發送成員報告。
- snooping 交換器從控制訊息更新 B 所在埠的 MDB 狀態;router port 另由協定觀察或靜態設定取得。
- A 送 G 的資料;已知群組通常送成員埠與相關 router port,排除入口,不查普通單播 FDB 來找全部成員。
- Querier 發 Query,接收者回報仍需哪些流量;表項會依時間與規則更新。
- 應用 leave 或停止回報,不一定瞬間刪掉整個埠:埠後方可能還有其他接收者,需查詢/逾時或明確追蹤。Fast leave 只適合符合拓樸假設的部署。
沒有 querier 時,某些 snooping 環境會在老化後丟失成員狀態,呈現「剛開始正常,幾分鐘後不穩」。不同設備可能退回泛洪或丟棄;不能把症狀當唯一診斷。查 Query、Report、MDB、router port 與計時器才有證據。
未知多播是否泛洪取決於設備與政策;router port、控制群組及版本相容性也會影響轉送。IPv4 的 224.0.0.x 非 IGMP 資料在 RFC 4541 建議下應送所有相關埠,不能一律按普通群組的 MDB 裁切。因此「開 snooping 後 mDNS 只到已加入者」不是通用保證。
4A.4 多播跨 VLAN 需要另一層設計
同 VLAN 的橋接不減少 IP TTL/Hop Limit;路由轉送則要處理跳數與 scope。snooping 不建立跨 VLAN 多播路徑。若目標是跨子網送同一資料流,需合適的多播路由、接收成員、來源路由、RPF 檢查及安全政策;PIM 是常見控制協定家族,不等於所有多播部署都必須用 PIM。
許多服務探索採本鏈路 scope;即使網路支援一般多播路由,也不代表能直接轉送這些探索訊息。AP 的多播轉單播、用戶端隔離、無線省電/速率策略會改變鏈路現象。先描述自己的 VLAN 與 AP 模式,再解讀擷取。
完整轉送例題
A、B、C、R 在 VLAN 10 的埠 1、2、3、4;D 在 VLAN 20 的埠 5。G=239.192.0.42,MDB 已知 B 與 C 是成員,R 是 router port;無其他過濾。
| A 傳入埠 1 的訊框 | 出口 | 判斷 |
|---|---|---|
| 已知單播 B | 2 | FDB 命中 |
| 未知單播 X | 2、3、4 | 同 VLAN 泛洪,目的仍單播 |
| 廣播 | 2、3、4 | 不送 VLAN 20 |
| 已知 G 多播 | 2、3、4 | 成員埠加 router port |
| C 離開後的 G,假設成員移除已確認 | 2、4 | 不再送 3,仍送 router port |
| mDNS 224.0.0.251 | 本例 2、3、4 | link-local 控制範圍採泛洪政策 |
這是明示政策的紙上模型,並非所有交換器的逐條保證。IGMP 控制訊息有自己的轉送規則,不以此資料訊框表替代規範。
4A.5 mDNS 與 DNS-SD:發現不等於連得上
mDNS 將本鏈路名稱查詢/回覆送到 224.0.0.251 或 ff02::fb 的 UDP 5353;.local 是重要的本地名稱空間。協定也包含可要求單播回覆等情況,所以看到單播 UDP 5353 不必立即判定異常。RFC 6762 §11 建議 mDNS 回應(含單播回應)以 IP TTL/Hop Limit 255 發送,以相容早期實作。對送往本鏈路目的位址的查詢,查詢端須只接受本鏈路回應:送至 224.0.0.251/ff02::fb 的回應視為來自本鏈路;單播回應另檢查來源是否屬於本地子網/on-link 前綴。本鏈路限制不靠把 TTL 設成 1。IP TTL/Hop Limit 與 DNS record TTL 是不同欄位,前者管封包跳數/協定檢查,後者管記錄快取。
DNS-SD 描述如何用 DNS 記錄尋找服務:PTR 列出服務實例,SRV 給主機與埠,TXT 提供屬性,A/AAAA 得到位址。它可使用 mDNS,也可用普通單播 DNS;不能把 DNS-SD 與 mDNS 當同義詞。
例:查詢 _ipp._tcp,PTR 得到「Lab Printer」實例,SRV 指向 printer.local:631,TXT 描述能力,再查 A/AAAA 並連線。探索訊息使用多播,不表示列印資料也用多播;後續連線可能是單播 TCP,且仍需路由、ACL 與服務端接受。
| 現象 | 優先蒐集的證據 |
|---|---|
| 手動 IP 可連但列表沒有印表機 | VLAN、5353 收送、AP 隔離、服務廣告與快取 |
| 列表有實例但連線失敗 | SRV 埠、A/AAAA 可達、服務、防火牆與名稱驗證 |
| 跨 VLAN 突然能發現大量裝置 | reflector/gateway 的範圍、允許服務與信任邊界 |
| VPN 開啟後本地探索消失 | 群組出口介面、5353 政策、scope、路由與應用支援 |
跨 VLAN 可評估 mDNS reflector 或具政策的 discovery gateway,或改用單播 DNS-SD;它們有不同快取、可見範圍與實作限制。只把 LAN 單播路由排除出 VPN,不能保證探索也正常。HTTP CONNECT/普通 SOCKS CONNECT 不會自動搬運二層廣播或多播;TAP、TUN、WireGuard 等也要依其轉送單位、路由與實作能力另外分析,不能僅靠名稱保證。
不要將看見服務廣告視為端點可信;完成連線後的名稱/憑證驗證與存取控制仍是獨立工作。
實驗、習題與檢核
做 L16,改變 MDB、成員老化、router port、VLAN 與未知多播政策,先預測再執行。讀 05 後完成 DNS-SD 資料表;Linux bridge 觀察是延伸,未列為本機實測。
- 未知單播送到多埠,為何仍不是廣播?
- 239.192.0.42 與 224.64.0.42 為何可能共用 MAC?它們是否因此是同一群組?
- snooping、querier 與 PIM 各解決哪個問題?
- B 離開群組時,為何不能立即刪除整個共享埠?
- 印表機跨 VLAN 可 ping 卻未顯示列表,提出兩個可區分假設及證據。
- 已發現 printer.local:631 但 HTTPS 名稱驗證失敗,發現成功能否取代身分驗證?
檢核:能分開記錄目的 IP/MAC、VLAN、FDB、MDB、router port、應用實例與實際連線;知道本模型未實作 IGMP 封包。解答見 answers/lan-solutions.md。
來源(查閱 2026-10-06):RFC 1112、RFC 2464、RFC 4291、RFC 2365、RFC 2644、RFC 9776 IGMPv3、RFC 9777 MLDv2、RFC 4541 snooping、RFC 4607 SSM、RFC 6762 mDNS、RFC 6763 DNS-SD、Linux bridge。RFC 4541 為 Informational 建議,不代替每款交換器的規格。