2012-08-06 16 views
11

Sobald ein Dienst über DNS-SD erkannt wurde, wie genau wird die Adresse dieses Hosts aufgelöst, und benötigt er wesentlich mehr Zeit/Aufwand? Wenn ich JmDNS oder Bonjour verwende, gibt es auch Rückrufe für beide serviceFound und serviceResolved. Wenn ich nur an der IP-Adresse des Geräts interessiert bin, das einen bestimmten Dienst veröffentlicht, gibt es einen schnelleren/effizienteren Weg, die Adresse zu erhalten, als beide serviceFound und serviceResolved durchzugehen?Wie genau löst mDNS Adressen auf?

Dank

Antwort

23

DNS-SD verwendet Multicast DNS (MDNS), die durch das Senden DNS-Pakete über UDP an eine bestimmte Multicast-Adresse funktioniert. Alle mdns-fähigen Hosts im Netzwerk hören ebenfalls diese Adresse. Es verwendet UDP also, es ist ziemlich wenig Overhead. Außerdem sind die Clients so konzipiert, dass die Anzahl der Gespräche im Netzwerk auf ein Minimum reduziert wird, indem extensives Caching verwendet wird.

Service Discovery ist ein zweistufiger Prozess. Der erste Schritt besteht darin, die Namen aller Hosts zu finden, die einen bestimmten Dienst bereitstellen (z. B. Drucken). Dies gibt Ihnen noch nicht die IP-Adresse, sondern gibt Ihnen den mdns-Namen (endend mit .local). Dies liegt daran, dass die IP möglicherweise geändert werden kann, während der Name nicht ändert.

Der zweite Schritt bei der Serviceerkennung besteht darin, den .local Namen des Hosts über mdns aufzulösen. Sie fragen über Multicast wer foo.local ist, foo.local wird dieses Paket sehen und per Broadcast mit seiner IP-Adresse, Portnummer und anderen Informationen antworten.

+0

Bitte helfen Sie mit dieser Abfrage http://stackoverflow.com/questions/40662608/service-discovery-using-dns-sd – Daemon