2012-08-06 31 views
11

Una volta rilevato un servizio tramite DNS-SD, come viene risolto esattamente l'indirizzo di quell'host e ci vuole molto più tempo/spese generali?In che modo esattamente mDNS risolve gli indirizzi?

Inoltre, se sto utilizzando JmDNS o Bonjour ci sono richiamate sia per serviceFound sia per serviceResolved. Se mi interessa solo l'indirizzo IP del dispositivo che pubblica un determinato servizio, esiste un modo più rapido/più efficiente di ottenere l'indirizzo piuttosto che passare attraverso serviceFound e serviceResolved?

Grazie

risposta

23

DNS-SD utilizza Multicast DNS (MDNS) che funziona con l'invio di pacchetti DNS su UDP a un certo indirizzo multicast. Tutti gli host mdns in rete ascoltano anche questo indirizzo. Usa UDP quindi, è un overhead piuttosto basso. Inoltre, i client sono progettati in modo tale che la quantità di chatter sulla rete sia ridotta al minimo, utilizzando una memorizzazione nella cache estesa.

Il rilevamento dei servizi è un processo in due fasi. Il primo passo è trovare i nomi di tutti gli host che forniscono un determinato servizio (ad esempio la stampa). Questo non ti darà ancora l'indirizzo IP, invece ti darà il nome mdns (che termina con .local). Questo perché l'ip potrebbe cambiare, mentre il nome no.

Il secondo passaggio nel rilevamento dei servizi consiste nel risolvere il nome .local dell'host su mdns. Chiedete tramite multicast chi è foo.local, foo.local vedrà quel pacchetto e risponderà via broadcast con il suo indirizzo ip, numero di porta e altre informazioni.

+0

Si prega di aiutare con questa query http://stackoverflow.com/questions/40662608/service-discovery-using-dns-sd – Daemon