我有一个 Arduino Yun 作为客户端连接到我的 LAN,这不是我的 dns 服务器。我可以使用它的主机名访问它:http://arduino.local
如果没有 DNS 记录,我如何访问它?
我向 Arduino 社区询问,他们谈到了 mDNS 解析,然后我尝试使用“Bonjour 浏览器”(https://hobbyistsoftware.com/bonjourbrowser)获取这些记录,我还尝试了 chrome 扩展。但是我没有从那个IP地址找到任何记录!
然后我尝试了nslookup
但失败了,因为 DNS 服务器没有该记录。然后我尝试了nblookup
,因为我知道 NetBios 有另一个解决方案。但它没有得到任何记录。我查看了主机文件,它是空的。
我试过了ping arduino.local
,分辨率很好!
我清除了 DNS 缓存,再次 ping 了 arduino.local,然后我打印了ipconfig /displaydns
但我没有找到关于该名称的任何记录。
Bonjour Browser 实际上是一个 DNS-SD 浏览器,而不是 mDNS 浏览器。不要混淆他们:
mDNS 是在 LAN 上运行的低级协议,就像常规 DNS 系统一样,它允许发布任何记录类型 - A/AAAA、TXT、SRV 等。
DNS-SD(又名 DNS 服务发现)是使用 mDNS 的一种特定方式——它是一种更高级别的功能,允许使用 SRV 和 PTR 记录发布“服务”。
所以 Bonjour 浏览器只会看到根据 DNS-SD 格式发布的记录,但本地主机名解析实际上并不使用这个系统。解析
arduino.local
到 IP 地址只使用基本的 mDNS,因此没有服务查找,只有简单的 A/AAAA 记录查询。您的 Windows 系统也有可能实际上不使用 mDNS,而是使用它自己的 LLMNR。早期的 Windows 版本根本不支持 mDNS(尽管它可能与 iTunes 捆绑在一起),最新的 Windows 10 仍然需要手动启用它。
在 Windows 10 中,每当您使用类似
arduino
或arduino.local
的名称时,操作系统都会尝试所有本地名称解析协议:LLMNR、mDNS(如果启用)和 NetBIOS(如果启用 SMBv1)。因此,除非您实际查看收到的数据包,否则您不会知道该名称是如何找到的。