通过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地址,端口号和其他信息进行响应。
关于bonjour - mDNS如何精确解析地址?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11835782/