mDNS服务器应该如何处理反向mDNS请求?

时间:2014-04-19 02:25:21

标签: linux dns mdns

首先,一些背景:avahid导致我的嵌入式Linux设备出现问题(它有崩溃的错误,看起来不会很快修复)我只需要最小的mDNS功能(即只需要Mac或PC上的某个人可以执行" ping6 mydevicename.local。"并让该主机名解析为我的设备),所以我编写了自己的简约mDNS服务器(在C中),它基本上只是监听多播DNS数据包并使用必要的mDNS记录响应它们。

这主要是有效的 - 特别是,从Mac上执行前面提到的ping6测试会立即解决并且效果很好。

但是,我注意到,如果我从Linux机器上执行ping6,它只能起作用。特别是:

  • Linux客户端需要大约4秒才能解析主机名
  • 对于发送的每个ping数据包发生这个4秒延迟 ...即,而不是每秒发送一次ping,ping6程序最终每4秒发送一次ping。 (虽然确实得到了预期的乒乓球)
  • 当我在嵌入式Linux设备上运行avahid时没有出现此问题,所以我认为这种行为必定是由我的新mDNS服务器正在做的事情造成的。
  • 发生这种情况时,我的mDNS服务器从客户端获取反向mDNS数据包,如此调试输出中所示:

[...]

RECEIVED 90 IPv6 BYTES FROM [fe80::21c:abff:fe00:a60] on s6#2 (sock=6)
--- Received IPv6 Data (90 bytes): -------------------------------------
0000: .............3.2 [00 00 00 00 00 01 00 00 00 00 00 00 01 33 01 32]
0016: .6.4.2.0.e.f.f.f [01 36 01 34 01 32 01 30 01 65 01 66 01 66 01 66]
0032: .b.2.0.6.2.0.0.0 [01 62 01 32 01 30 01 36 01 32 01 30 01 30 01 30]
0048: .0.0.0.0.0.0.0.0 [01 30 01 30 01 30 01 30 01 30 01 30 01 30 01 30]
0064: .0.0.0.8.e.f.ip6 [01 30 01 30 01 30 01 38 01 65 01 66 03 69 70 36]
0080: .arpa.....       [04 61 72 70 61 00 00 0c 00 01]
HandlemDNSRequest:  transID=0 flags=0 numQuestions=1 numAnswers=0 numAuthorityRRs=0 numAdditionalRRs=0
Ooh, a reverse-mDNS request for [3.2.6.4.2.0.e.f.f.f.b.2.0.6.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa] scope=3

所以我的问题是:

  • 每次程序尝试使用我的mDNS服务器解析mDNS主机名时,什么会导致Linux mDNS主机名解析客户端软件(NSS解析器?)延迟四秒钟?

    < / LI>
  • 响应上述mDNS请求的适当方法是什么?我查看了mDNS和DNS规范,但无法找到任何明确的要求。我尝试用通常的信息(主机名,IP地址等)来回复,但这并没有使延迟消失。

  • 还有什么我可能做错了吗? (除了试图推出我自己的mDNS服务器之外 - 但是相信我,如果我觉得有更好的选择,我不会这样做; avahid只是没有切割芥末)

1 个答案:

答案 0 :(得分:0)

我终于能够通过使用nTap设备和WireShark来捕获由Avahid和我自己的程序生成的设备生成的mDNS流量。由于avahid没有产生这个问题,大概是由avahid生成的响应是Linux正在寻找的。我更新了我的程序以生成类似的响应,这使得5秒的延迟消失了。

特别是,avahid生成的反向mDNS响应仅包含0个查询和1个回答(类型为hostname),如附带的wireshark屏幕截图所示。

Wireshark screenshot of correct reverse-mDNS response generated by avahid