一旦通过DNS-SD发现了一个服务,那么这个主机的地址是如何被解析的?这个过程是否需要更多时间或开销?
此外,如果我使用JmDNS或Bonjour,则会有serviceFound
和serviceResolved
的回调。如果我只对发布某个服务的设备的IP地址感兴趣,是否有比同时进行serviceFound
和serviceResolved
更快/更有效的方法来获取地址?
谢谢
DNS-SD 使用多播 DNS (MDNS),通过向特定的多播地址发送 DNS 数据包来工作。网络中所有支持 mdns 的主机也会监听此地址。它使用 UDP 协议,因此开销相对较低。此外,客户端的设计方式使得网络上的聊天量最小化,通过使用广泛的缓存。
服务发现是一个两步过程。第一步是查找提供某个服务(例如打印)的所有主机的名称。这不会给您 IP 地址,而是给您 mdns 名称(以 .local
结尾)。这是因为 IP 可能会更改,而名称不会。
服务发现的第二步是通过 mdns 解析主机的 .local
名称。您可以通过多播询问谁是 foo.local
,foo.local
将看到该数据包,并通过广播回复其 IP 地址、端口号和其他信息。