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