1. 程式人生 > 其它 >區域網內主機名解析

區域網內主機名解析

疑問

  • 我的電腦有一個主機名,為什麼區域網內的其他裝置可以通過主機名訪問我的電腦?
  • 我的電腦是如何通過一個主機名找到對應裝置的IP的?

答案

因為有mDNS和LLMNR協議。

LLMNR定義

在DNS 伺服器不可用時,DNS 客戶端計算機可以使用 本地鏈路多播名稱解析 (LLMNR—Link-Local Multicast Name Resolution)(也稱為多播 DNS 或 mDNS)來解析本地網段上的名稱。例如,如果路由器出現故障,從網路上的所有 DNS 伺服器切斷了子網,則支援 LLMNR 的子網上的客戶端可以繼續在對等基礎上解析名稱,直到網路連線還原為止。
除了在網路出現故障的情況下提供名稱解析以外,LLMNR 在建立臨時對等網路(例如,機場候機區域)方面也非常有用。
LLMNR為使用IPv4、IPv6或者同時使用這兩種地址的裝置提供了點對點名稱解析服務,可以讓同一子網中的IPv4和IPv6裝置不需要WINS或DNS伺服器就可以解析對方的名稱,而這個功能是WINS和DNS都無法完全提供的。雖然WINS可以為IPv4提供客戶端-伺服器以及點對點名稱解析服務,不過並不支援IPv6地址。至於DNS,雖然支援IPv4和IPv6地址,但必須通過專門的伺服器才能提供名稱解析服務。LLMNR通過在DNS名稱解析服務不可用時提供解析服務,彌補了DNS的不足。
LLMNR工作過程:

  1. 主機在自己的內部名稱快取中查詢名稱。如果在快取中沒有找到了名稱,那麼主機就會向自己配置的主DNS伺服器傳送查詢請求。如果主機沒有收到迴應或收到了錯誤資訊,主機還會嘗試搜尋配置的備用DNS伺服器。如果主機沒有配置DNS伺服器,或者如果在連線DNS伺服器的時候沒有遇到錯誤但失敗了,那麼名稱解析會失敗,並轉為使用LLMNR。
  2. 主機通過使用者資料報協議(UDP)傳送多播查詢,查詢主機名對應的IP地址,這個查詢會被限制在本地子網(也就是所謂的鏈路區域性)內。
  3. 鏈路區域性範圍內每臺支援LLMNR,並且被配置為響應傳入查詢的主機在收到這個查詢請求後,會將被查詢的名稱和自己的主機名進行比較。如果沒有找到匹配的主機名,那麼計算機就會丟棄這個查詢。如果找到了匹配的主機名,這臺計算機會傳輸一條包含了自己IP地址的單播資訊給請求該查詢的主機。

MDNS

mdns 即多播DNS(Multicast DNS),MDNS主要實現了在沒有傳統DNS伺服器的情況下使區域網內的主機實現相互發現和通訊,使用的埠為5353,遵從dns協議,使用現有的DNS資訊結構、名語法和資源記錄型別。並且沒有指定新的操作程式碼或響應程式碼。
在區域網中,裝置和裝置之前相互通訊需要知道對方的ip地址的,大多數情況,裝置的ip不是靜態ip地址,而是通過dhcp 協議動態分配的ip 地址,如何裝置發現呢,就是要mdns大顯身手,例如:現在物聯網裝置和app之間的通訊,要麼app通過廣播,要麼通過組播,發一些特定資訊,感興趣裝置應答,實現區域網裝置的發現,當然mdns 比這強大的多。

  1. mDNS 基於 UDP 協議,組播地址: 組播地址使用的是D類地址,地址範圍為:224.0.0.0—239.255.255.25。
  2. mdns 使用組播地址為: 224.0.0.251 (ipv6: FF02::FB) 埠為5353,mdns 是用於區域網內部的,並且主機的域名為.local 結尾,每個進入區域網的主機,如果開啟了mDNS服務的話,都會向區域網內的所有主機組播一個訊息,我是誰(域名),和我的IP地址是多少。然後其他有mdns服務的主機就會響應,也會告訴你,它是誰(域名),它的IP地址是多少。 當然裝置需要服務時,就是使用mdns 查詢域名對對應的ip地址,對應的裝置收到該報文後同樣通過組播方式應答,此時其他主機裝置也是可以收到該應答報文,其他主機也會記錄域名和ip 以及ttl 等,更新快取。比如,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提供的服務要遠遠多於這個,當然服務多但並不複雜。