- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
首先,一些背景知识:avahid 在我的嵌入式 Linux 设备上给我带来了问题(它有一些崩溃的错误,看起来不会很快得到修复),而且我只需要最少的 mDNS 功能(即足以让 Mac 或 PC 上的人可以执行“ping6 mydevicename.local”并将该主机名解析到我的设备),所以我编写了自己的极简 mDNS 服务器(用 C 语言),它基本上只是监听多播 DNS 数据包并用必要的 mDNS 记录响应它们。
这基本上是有效的 - 特别是,从 Mac 进行上述 ping6 测试可以立即解决并且效果很好。
然而,我注意到,如果我从 Linux 机器上执行 ping6,它只能起到一定的作用。特别是:
[…]
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-resolver?)出现四秒的延迟?
响应上述 mDNS 请求的适当方法是什么?我查看了 mDNS 和 DNS 规范,但找不到任何明确的要求。我尝试让它使用常用信息(主机名、IP 地址等)进行响应,但这并没有消除延迟。
我还有什么可能做错的地方吗? (除了尝试建立自己的 mDNS 服务器 - 但相信我,如果我觉得有更好的替代方案,我不会这样做;avahid 只是没有削减芥末)
最佳答案
通过使用 nTap 设备和 WireShark 捕获由 Avahid 和我自己的程序生成的 mDNS 流量,我终于能够找出问题所在。由于 avahid 没有生成此问题,因此可能 avahid 生成的响应就是 Linux 正在寻找的响应。我更新了程序以生成类似的响应,从而消除了 5 秒的延迟。
特别是,avahid 生成的反向 mDNS 响应仅包含 0 个查询和 1 个答案(主机名类型),如所附的wireshark 屏幕截图所示。
关于linux - mDNS 服务器应如何处理反向 mDNS 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23165071/
我是一名优秀的程序员,十分优秀!