Windows 10如何ping计算机名之mDNS

mDNS(参见RFC 6762)是一种用于本地主机名查询的方式,通过组播地址224.0.0.251(或ff02::fb)上的UDP端口5353运行,可以用于解析.local结尾的域名。mDNS的工作方式与普通DNS类似,但其不依赖一个单独的DNS服务器,而是依靠计算机名的拥有者自行回应该mDNS的请求。Windows 10 1703版本添加了对mDNS的支持(参见:mDNS in the Enterprise),可以通过mDNS的方式获取被ping的计算机名的IP地址。

在Windows 10上(1703以上版本),试图ping一个计算机名,或是.local结尾的域名时,系统会分别使用IPv4和IPv6的mDNS协议请求域名“计算机名.local”的A记录和AAAA记录,之后该名称的拥有者会同样通过该组播地址发送对该请求的响应。注意,包含IPv6地址的响应可能通过IPv4的mDNS查询得到,整个过程的Wireshark抓包结果如下图所示。

通过mDNS方式获取到IP地址时的Wireshark结果

之后,系统会对回答中的IPv4或IPv6地址发起ICMP Echo或ICMPv6 Echo请求。如果IP地址是通过mDNS方式获得的,在ping程序的输出中会显示“正在 Ping xxx.local”字样,如下图所示。

正在 Ping NAS32D613.local ****(IP地址已隐藏) 具有 32 字节的数据:
来自 ****(IP地址已隐藏) 的回复:时间=2ms
来自 ****(IP地址已隐藏) 的回复:时间=2ms
来自 ****(IP地址已隐藏) 的回复:时间=2ms
来自 ****(IP地址已隐藏) 的回复:时间=2ms
****(IP地址已隐藏) 的 Ping 统计信息:
数据包:已发送 = 4,已接收 = 4,丢失 = 0(0%
丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 2ms,最长 = 3ms,平均 = 2ms
通过mDNS方式获取到IP地址时的ping输出