【发布时间】:2012-08-03 20:48:16
【问题描述】:
一旦通过 DNS-SD 发现服务,该主机的地址究竟如何得到解析,是否需要更多的时间/开销?
另外,如果我使用 JmDNS 或 Bonjour,serviceFound 和 serviceResolved 都会有回调。如果我只是对发布某个服务的设备的 IP 地址感兴趣,有没有比通过serviceFound 和serviceResolved 更快/更有效的方法来获取地址?
谢谢
【问题讨论】:
一旦通过 DNS-SD 发现服务,该主机的地址究竟如何得到解析,是否需要更多的时间/开销?
另外,如果我使用 JmDNS 或 Bonjour,serviceFound 和 serviceResolved 都会有回调。如果我只是对发布某个服务的设备的 IP 地址感兴趣,有没有比通过serviceFound 和serviceResolved 更快/更有效的方法来获取地址?
谢谢
【问题讨论】:
DNS-SD 使用多播 DNS (MDNS),其工作原理是通过 UDP 将 DNS 数据包发送到某个多播地址。网络中所有支持 mdns 的主机也会监听这个地址。它使用UDP,因此开销非常低。此外,客户端的设计方式是通过使用大量缓存将网络上的聊天量保持在最低限度。
服务发现是一个两步过程。第一步是查找提供某种服务(例如打印)的所有主机的名称。这不会给你IP地址,而是给你mdns名称(以.local结尾)。这是因为 ip 可能会改变,而名称不会。
服务发现的第二步是通过 mdns 解析主机的.local 名称。您通过多播询问foo.local 是谁,foo.local 将看到该数据包,并通过广播响应其 IP 地址、端口号和其他信息。
【讨论】: