不妨也了解一下普通DNS的完整流程
如果想知道互联网上普通域名解析成IP地址的完整过程,可以参考DNS查询过程完全解析一文。
与智能家居协议的关系
Zigbee、Z-Wave等智能家居设备使用的其他无线协议,可以参考智能家居网络协议完全解析一文进一步了解。
一次完整的发现过程
以手机寻找无线打印机为例:手机向多播地址发出一条查询,询问“谁提供打印服务”。局域网内的打印机收到后,返回自己的服务名称、端口以及主机名,同时附带它的IP地址。手机把结果显示在打印机列表中,并缓存一段时间,下次就不必重新查询。如果打印机关机,它通常会发出一条“告别”消息,让别的设备尽快把它从列表中移除。整个过程不需要手动输入IP地址,也不依赖任何中心服务器。
排查mDNS故障的思路
如果设备在列表里找不到,可以按以下顺序检查:首先确认两台设备在同一个网段、连接的是同一个Wi-Fi;其次检查路由器是否开启了AP隔离(客户端隔离)或限制多播,这两项是最常见的原因;再次查看电脑或设备上的防火墙是否放行了UDP 5353端口;最后可以尝试重启设备上的mDNS服务,例如Windows上的Bonjour服务或Linux上的avahi-daemon。许多路由器还有“IGMP侦听”之类的多播优化选项,配置不当也可能让mDNS时断时续。
与普通DNS并存
mDNS并不是用来取代DNS的。访问互联网上的网站依然靠普通DNS,mDNS只负责局域网内以.local结尾的名字。操作系统会根据名称后缀自动选择走哪条路径。需要注意的是,如果企业内部网络把.local用作内部域名,可能会和mDNS发生冲突,这也是现在不推荐用.local命名内网域名的原因。
常见问题
mDNS无法正常工作会怎样?
设备将无法再按名称自动被发现,可能需要在App或设置界面里手动输入IP地址来添加打印机或智能电视。路由器的多播相关设置,或者AP隔离(客户端隔离)功能,经常是阻断mDNS流量的原因,值得优先排查。
mDNS在没有互联网连接的情况下也能用吗?
可以。mDNS只在同一个局域网内工作,即使断开了互联网连接,只要设备连接在同一个Wi-Fi或路由器下,彼此依然能够互相发现。
mDNS和Bonjour是什么关系?
mDNS是一项公开的标准,Bonjour是苹果对mDNS和DNS-SD等零配置技术的实现和品牌名称。Linux上的Avahi等软件实现的是同样的标准,因此不同品牌的设备通常可以互相发现。
为什么我的手机找不到另一个网段里的设备?
因为mDNS的多播包不会被路由器转发到其他网段。需要把设备放在同一网段,或者在路由器上启用mDNS中继功能。
mDNS会不会泄露我的信息?
它会向同一网络中的所有设备公布设备名称和提供的服务,所以在公共Wi-Fi上,别人可能看到你的设备名称。建议不要把真实姓名放在设备名里,在不信任的网络上也可以关闭相关共享功能。