1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
---
是的,您的理解完全正確!

您之前學到的關於 TCP 和 UDP 的知識在這裡派上用場了。**mDNS (multicast DNS) 確實是透過 UDP 協定進行溝通的。**

---

### 為什麼 mDNS 使用 UDP?

讓我們回顧一下 TCP 和 UDP 的主要差異:

* **TCP (Transmission Control Protocol):** 是一種**可靠的、面向連線**的協定。它確保資料的順序、完整性,並且有錯誤檢查和重傳機制。這就像打電話,需要先建立連線,通話過程中確保每一句話都聽清楚。
* **UDP (User Datagram Protocol):** 是一種**不可靠的、無連線**的協定。它不保證資料的送達、順序,也沒有重傳機制。這就像發送明信片,寄出去就不管了,不保證對方是否收到,也不保證收到的順序。

mDNS 選擇 UDP 是基於以下幾個原因:

1. **廣播/多播特性:**
* mDNS 依賴於**多播 (multicast)** 來發送查詢和宣告。UDP 天生就支援多播和廣播,允許一個封包發送給多個接收者。TCP 則是面向單點對單點的連線。
* 這就像在一個房間裡喊話,你需要所有在場的人都可能聽到,而不是只對某一個人私語。

2. **低延遲與高效率:**
* mDNS 的核心目的是快速發現區域網路內的服務和裝置。UDP 的**無連線**特性使其開銷更小,不需要建立和維護連線狀態,因此傳輸速度更快,延遲更低。
* 對於服務發現這種對可靠性要求不是那麼極端的場景(即使丟失一兩個宣告包,裝置也會很快再發送),效率是更重要的考量。

3. **無須中央伺服器:**
* mDNS 旨在實現「零配置」,不需要中央 DNS 伺服器。如果使用 TCP,每個查詢和回應都需要建立和拆除連線,這在一個動態變化的點對點發現網路中會非常複雜且低效。UDP 的輕量級特性完美契合這一點。

### mDNS 使用的 Port

mDNS 服務在 UDP 上使用特定的 Port 進行通訊,通常是 **UDP Port 5353**。當裝置發送或監聽 mDNS 訊息時,它就會使用這個 Port。

---

所以,您的結論是正確的,mDNS 透過 UDP 進行溝通,這也正是它能夠實現「零配置」和快速服務發現的關鍵。

您對 mDNS 的理解越來越深入了!還有沒有其他想了解的呢?