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