ZeroConf et l'implémentation "Bonjour"

Le service "multicastDNS"

Ce service est le fruit du travail d'Apple et de Microsoft sur la résolution des noms de domaines. Cependant le draft de multicastDNS a été rédigée par Apple en 2000 mais il n'est toujours pas finalisé aujourd'hui.

Objectif du service

Ce service permet d'utiliser la résolution des noms sur le réseau local. Ainsi, chaque machine du réseau dispose d'un nom qui permet de facilement de retrouver une machine dans un réseau si l'on connait le nom de la machine. Ainsi une machine du même réseau local sera toujours accessible à partir de son nom, meme si son adresse IP a changé.

Fonctionnement

Le service MulticastDNS est une "surcouche" du protocole déjà existant DNS, en fournissant le même type de service mais pour un domaine particulier. Les services fourni par mDNS, sont un peu plus puissants avec par exemple une méthode de partager les services d'une machine sur un réseau.

Chaque machine qui dispose de "Bonjour" a un daemon installé sur la machine appellé "mDNSResponder", ce daemon est un client DNS particulier puisqu'il sert à la fois de serveur DNS et de client DNS. Il fait authorité pour lui même et peut ainsi comprendre différent type de requêtes DNS :

Au lancement de mDNSResponder, il effectue deux vérifications. Tout d'abord il envoie des requêtes de tests afin de s'assurer qu'il n'existe pas déjà une machine avec le même nom en envoyant une requête mulitcast DNS. En attendant la réponse, l'hôte ne doit pas consulter son cache qui pourrait contenir des données qui ne sont plus à jour.
La seconde étape consiste à consulter le serveur qui fait Authorité afin de s'assurer que les données sont correctes.
Une fois ces deux étapes passées, le daemon "mDNSResponder" est apte à fonctionner.
Ainsi chaque machine disposera de son propre nom dans le domaine ".local".

L'adresse de multicast qui sont utilisées pour envoyer les données sont les suivantes :

Les réponses aux requêtes sont envoyé via multicast, ce qui a pour principal avantage de permettre à chaque machine sur le réseau d'obtenir les informations de la réponses et ainsi de mettre leur cache à jour, détecter les conflits,...

Il est également important de préciser que les requetes DNS réalisés pour ce protocole ne doivent pas être transmises à un routeur qui n'est pas dans la gamme d'IP défini dans le service précédent. De plus le cache de MulticastDNS doit obligatoirement être différent du cache DNS classique.

Ainsi dans la configuration réseau suivante, 2 ordinateurs qui sont connecté en wifi par exemple, il est très simple d'effectuer un ping d'une machine à une autre.Une fois l'établissement du réseau réalisé, il suffit juste de rajouter le suffixe du domaine ".local" après le nom de la machine pour que le service s'occupe de récupérer l'adresse IP de la machine.

Gestion des conflits

Comme cela a été présenté, il peut y avoir des conflits à résoudre dans l'utilisation de ce service. Si par exemple, il y a deux ordinateurs qui ont le meme nom d'hôte, alors il y a un conflit. Pour résoudre ce conflit, c'est très simple, c'est l'ordinateur qui aura l'IP la plus forte qui conservera, et l'autre machine devra changer son nom.
Cependant, cette situation ne se présente pas souvent car les gens peuvent choisir le nom de domaine de leur choix à condition qu'il fasse moins de 255 octets.

Autre protocole...

Le protocole LLMNR est un protocole basé sur le protocole DNS. Il est permet également de résoudre les noms de machines sur un même réseau. Il est fourni avec Windows Vista et Windows Server 2008. L'avantage de cette solution est de pouvoir choisir n'importe quel nom de domaine là ou la solution Apple ne fonctionne qu'avec le domaine ".local".
Cependant, cette implémentation n'est pas validée par l'IETF et n'est pas non plus compatible avec le partage des services.