mDNS原理的簡單理解——每個進入局域網的主機,如果開啟了mDNS服務的話,都會向局域網內的所有主機組播一個消息,我是誰,和我的IP地址是多少。然后其他也有該服務的主機就會響應,也會告訴你,它是誰,它的IP地址是多少


MDNS協議介紹

mDNS multicast DNS , 使用5353端口,組播地址 224.0.0.251。在一個沒有常規DNS服務器的小型網絡內,可以使用mDNS來實現類似DNS的編程接口、包格式和操作語義。MDNS協議的報文與DNS的報文結構相同,但有些字段對於MDNS來說有新的含義。

每個進入局域網的主機,如果開啟了mDNS服務的話,都會向局域網內的所有主機組播一個消息,我是誰,和我的IP地址是多少。然后其他也有該服務的主機就會響應,也會告訴你,它是誰,它的IP地址是多少。mDNS的域名與普通DNS的域名是通過后綴.local區分開來的。如果一台終端需要訪問一個mDNS域名,他就會向局域網內發送組播,詢問該域名的IP是多少。

例如: 

一個設備接入網絡,首先查詢名稱是否沖突,並通告當前服務器信息

沖突檢測結束后,發送MDNS通告,通知其它設備更新DNS緩存

其它設備對該域名訪問時,會發起MDNS查詢

 

mDNS原理的簡單理解

在局域網內,你要通過一台主機和其他主機進行通信,你需要知道對方的 ip 地址,但是有些時候,你並不知道對方的 ip 地址,因為一般使用 DHCP 動態分配 ip 地址的局域網內,各個主機的 IP 地址是由 DHCP 服務器來幫你分配 IP 地址的。所以在很多情況下,你要知道對方的 IP 地址是比較麻煩的。

鑒於發現這篇文章最近的瀏覽量比較多,晚上也有不少轉載,特別聲明一下,文章水平可能不大夠,只是我當時的一些理解,所以希望大家以批判的角度來看,然后又什么問題歡迎討論。真心不希望誤導大家^_^

mDNS 的工作原理

首先,在 IP 協議里規定了一些保留地址,其中有一個是 224.0.0.251,對應的 IPv6 地址是 [FF02::FB]。

mDNS 協議規定了一個端口,5353。

mDNS 基於 UDP 協議。

每個進入局域網的主機,如果開啟了mDNS服務的話,都會向局域網內的所有主機組播一個消息,我是誰,和我的IP地址是多少。然后其他也有該服務的主機就會響應,也會告訴你,它是誰,它的IP地址是多少。當然,具體實現要比這個復雜點。

比如,A主機進入局域網,開啟了 mDNS 服務,並向 mDNS 服務注冊以下信息:我提供 FTP 服務,我的IP是 192.168.1.101,端口是 21。當B主機進入局域網,並向 B 主機的 mDNS 服務請求,我要找局域網內 FTP 服務器,B主機的 mDNS 就會去局域網內向其他的 mDNS 詢問,並且最終告訴你,有一個IP地址為 192.168.1.101,端口號是 21 的主機,也就是 A 主機提供 FTP 服務,所以 B 主機就知道了 A 主機的 IP 地址和端口號了。

大概的原理就是這樣子,mDNS提供的服務要遠遠多於這個,當然服務多但並不復雜。

在Apple 的設備上(電腦,筆記本,iphone,ipad等設備)都提供了這個服務。很多Linux設備也提供這個服務。Windows的設備可能沒有提供,但是如果安裝了iTunes之類的軟件的話,也提供了這個服務。

這樣就可以利用這個服務開發一些局域網內的自動發現,然后提供一些局域網內交互的應用了。

jmDNS 是一個 JAVA 平台的,提供 mDNS 服務的第三方庫。在這個 jar 包引入到 Android 項目里,就可以獲得 mDNS 服務了。Android 在 3.x 還是 4.x 之后已經提供局域網內自動發現的 API 了,所以不需要使用 jmDNS 第三方庫就能實現了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM