網路管理 - mDNS(Multicast DNS)
在本篇文章中,我們將深入介紹什麼是 mDNS(Multicast DNS)、它的工作原理、使用場景,以及如何實作與除錯。這是一項對 IoT、智慧家庭、區網服務自動發現非常關鍵的技術。
簡介 - 什麼是 mDNS?
mDNS(Multicast DNS)是一種 不需要中央 DNS 伺服器就能進行名稱解析的協定,它讓區域網路(LAN)中的裝置可以透過名稱來互相發現彼此,而不需要手動輸入 IP 位址。
舉例來說,你可以直接在瀏覽器輸入:
1 | http://myprinter.local |
而不是:
1 | http://192.168.1.123 |
這裡的 .local 就是 mDNS 的預設網域。
為什麼需要 mDNS?
傳統 DNS 需要中央伺服器(如 8.8.8.8),對於小型或動態網路環境(例如家庭、辦公室、IoT 設備),設定成本太高。而 mDNS 讓裝置之間 自動廣播自己的名稱與服務,實現「即插即用」。
使用 mDNS 的好處包括:
- 不需額外安裝 DNS 伺服器
- 支援動態 IP(搭配 DHCP)
- 適合 IoT、智慧家庭、內網開發
mDNS 如何運作?
mDNS 使用 UDP 5353 埠口,在本地網路中進行 multicast 廣播。以下是其基本流程:
- 設備註冊名稱
- 裝置開機後,廣播訊息:「我叫 mydevice.local,IP 是 192.168.1.10」。
3.其他設備查詢名稱 - 某台電腦發送 multicast 尋找:「誰知道 mydevice.local 是誰?」
- 擁有名稱的設備回應
- 若名稱吻合,目標裝置回傳 IP,完成名稱解析。
哪些技術或產品用到 mDNS?
範例 | 描述 |
---|---|
Apple Bonjour | mDNS 的典型實作,可讓 macOS / iOS 設備自動發現AirPrint、AirPlay 裝置。 |
Chromecast | 使用 mDNS 廣播,讓手機快速找到要投放的裝置。 |
ESP32 | / IoT 裝置 常透過 ESPmDNS 函式庫註冊名稱,提供 HTTP 介面給使用者 |
Zero-configuration networking (Zeroconf) | 結合 mDNS、AutoIP、DNS-SD 實現無需設定即可自動建立網路的目標。 |
實作範例
1 | from zeroconf import ServiceInfo, Zeroconf |
除錯與實用工具
- avahi-browse (Linux) 掃描網路上的 mDNS 服務
- dns-sd (macOS) 查詢與註冊 mDNS 名稱
- bonjour browser GUI 工具,方便探索區網服務
- mdns-scan (Linux) 快速顯示所有 mDNS 名稱與服務
注意事項
- 防火牆要開放 UDP 5353 埠口
- 名稱衝突時會自動加入編號後綴(如 mydevice-2.local)
- 部分網路(如企業 Wi-Fi)可能封鎖 multicast,導致 mDNS 無法使用
總結
mDNS 是一項低門檻、高實用性的技術,能大幅簡化區網裝置的互連與管理。無論是 IoT 開發、內部服務部署、還是打造智慧家庭系統,mDNS 都值得你學習與掌握!