使用 Windows 和 APIPA 调试名称解析

使用 Windows 和 APIPA 调试名称解析

对于实验室设备,我到处都使用默认设置,并且它们使用IP 自动配置(我认为 APIPA 又名 zeroconf);我把它们放在了一个私人交换机上。

我总是能够通过他们的主机名来寻址他们,我认为这可以通过 mDNS 来实现。

现在我用一个相同的设备替换了一个,突然它停止了工作:

C:\>ping FSW26-101414
Ping request could not find host FSW26-101414. Please check the name and try aga
in.

该仪器肯定已经启动,并且主机名肯定正确:

C:\>ping 169.254.27.85

Pinging 169.254.27.85 with 32 bytes of data:
Reply from 169.254.27.85: bytes=32 time<1ms TTL=128
Reply from 169.254.27.85: bytes=32 time<1ms TTL=128
Reply from 169.254.27.85: bytes=32 time<1ms TTL=128
Reply from 169.254.27.85: bytes=32 time<1ms TTL=128

Ping statistics for 169.254.27.85:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms

这可能是什么原因?问题出在“主机”还是“客户端”?我该如何调试?

答案1

本地名称解析可能使用多种协议。按客户端操作系统分组:

  • Windows 10(不确定是哪个版本,但是大约10.1803 或更高版本)支持 Apple移动DNS协议(UDP 多播到端口 5353)。名称查询发送到多播组 224.0.0.251 和 FF02::FB。这不依赖于 IP 配置(尽管它是 Zeroconf 套件的一部分,但它不使用也不暗示 APIPA,反之亦然)。它出现每当 LLMNR 处于活动状态时,它都处于活动状态。

    (如果你安装了 iTunes,无论 Windows 版本如何,它都会安装自己的 mDNS 客户端 - Apple Bonjour - 作为 Winsock LSP。Bonjour 仅解析具有.local,而内置客户端也接受单标签无 TLD 名称。)

  • Windows Vista 和 Server 2008 及更高版本支持法律硕士协议(UDP 多播至端口 5355)。名称查询将发送到多播组 224.0.0.252 和 FF02::1:3。这不依赖于 IP 配置;只要网络发现处于活动状态,它就会处于活动状态。

  • 所有 Windows 版本都支持NetBIOS 名称服务协议(UDP/IPv4 广播到端口 137,以及一些复杂的“主浏览器”选举)。据我所知,名称查询是广播的。这不依赖于 IP 配置,但需要安装和启用 SMBv1。

我不知道你使用什么“实验室设备”,但任何这些协议可能不受非 Windows 设备支持。(例如,在 Linux 上,mDNS 由 Avahi 或 mDNSResponder 实现;LLMNR 由 systemd-resolved 或 xllmnrd 实现;NBNS 由 Samba nmbd 实现。)许多设备都使用 mDNS。打印机往往使用这三种或更多种。

如何排除基于多播的协议故障:

  1. 安装数据包捕获工具
  2. 将其指向您的 LAN 接口。
  3. 尝试解析一个名称,看看您的计算机是否生成预期的 LLMNR 或 mDNS 查询数据包以及其他设备是否生成任何答复。
  4. 重新启动另一台设备(或者只是将其重新连接到网络),看看该设备是否会宣布自己的名称登记郵件。

nslookup注意不是通用名称查找工具。它是严格单播 DNS 客户端,对 mDNS/LLMNR/NBNS 根本没有帮助。

相关内容