Bonjour : que se cache derrière l'implémentation de Zeroconf ?

Pour que les appareils en réseau puissent communiquer entre eux, ils doivent d'abord établir une connexion. Pour entrer en contact, ils n'ont pas besoin du nom de l'appareil, mais de , qui est en général, dans les réseaux importants, assignée automatiquement aux abonnés par un (Dynamic Host Configuration Protocol). Il fonctionne avec un serveur DNS. Ce serveur est responsable de la conversion du nom de domaine en une adresse IP et vice versa. Il existe une alternative à cette attribution automatique, qui consiste à ajuster les de tous les participants au réseau et d'entrer manuellement les noms et adresses IP, mais il s’agit d’une tâche quasiment impossible avec un réseau plus important.

Aucune de ces deux options n’est donc idéale pour la mise en place d'un réseau local : d'une part, la configuration des serveurs DHCP et DNS implique un certain niveau d'effort et de savoir-faire, et d'autre part, la variante manuelle nécessite d’adapter un par un tous les fichiers hôtes, par exemple si l’on ajoute un nouveau périphérique au réseau ou s’il est nécessaire d’apporter des modifications à des systèmes déjà intégrés. La solution à ce problème s'appelle Zero Configuration Networking, abrégé en Zeroconf, et repose sur l'idée d'un réseau IP connectant des périphériques sans configuration manuelle. Le concept de réseau, élaboré entre 1999 et 2003 par un groupe de travail de l'IETF (Internet Engineering Task Force), a notamment été mis en œuvre dans les implémentations Bonjour et Avahi.

Aperçu des caractéristiques essentielles de Zeroconf

Lorsqu’Internet Engineering Task Force a lancé le projet Zero Configuration Networking en 1999, l'objectif était de définir les caractéristiques suivantes pour les "réseaux sans configuration" : 

  • Résolution de noms de domaine intégrée
  • Attribution automatique du masque de sous-réseau, de l'adresse IP et du routeur
  • Fonction de recherche pour trouver les services réseau disponibles
  • Attribution automatique d'adresses multicast pour les connexions multipoints
  • Niveau de sécurité équivalent aux réseaux sans Zeroconf

Toutefois, le groupe de travail de l'IETF n'a pu aboutir à un consensus, c’est pourquoi il n'a publié aucun document résumant les exigences de la mise en réseau de Zero Configuration. Il a plutôt été décidé d'élaborer une spécification pour le protocole Internet en collaboration avec Apple, Microsoft et Sun Microsystems ; elle a été publiée en 2005 sous le nom de "Configuration dynamique des adresses IPv4 Link-Local Addresses" (RFC 3927). IPv4LL attribue automatiquement des adresses IP aléatoires avec le préfixe 169.254/16, c'est-à-dire comprises entre 169.254.0.0.x et 169.254.255.255.x. La première et les 256 dernières adresses sont réservées aux applications futures. La norme RFC exige également que le générateur de nombres aléatoires inclue des informations spécifiques à l'ordinateur, telles que l'adresse MAC de l'interface réseau lors de la génération d'adresses Internet, ceci qui minimise la probabilité que deux appareils reçoivent la même adresse IP.

En ce qui concerne l'attribution automatique d'adresses sans protocole DHCP, IPv4 utilise le protocole Address Resolution Protocol (ARP), qui a été remplacé dans IPv6 par le Neighbor Discovery Protocol (NDP). Le processus d'attribution comporte plusieurs étapes pour éviter les conflits entre les adresses IP des périphériques réseau participants :

  1. L’adresse IP est d’abord générée.
  2. IPv4LL fournit ensuite des tests ARP, utilisés pour vérifier si l'adresse IP générée est déjà utilisée dans le réseau. Pour ce faire, il envoie trois paquets ARP en tant que destinataires, contenant l'adresse de l'expéditeur 0.0.0.0.0.0 et l'adresse à vérifier.
  3. Si durant cette période un paquet ARP est reçu et que l'adresse de l'expéditeur correspond à l'adresse IP générée, cela signifie que cette adresse est déjà attribuée dans le réseau, et la génération d'IP redémarre.
  4. Si un échantillon ARP inconnu est reçu et qu'il correspond à l'adresse à tester, un autre dispositif essaie de joindre le réseau avec cette adresse IP, de sorte que la procédure soit également répétée à partir de l'étape 1.
  5. S'il n’y a pas de conflit, le périphérique de connexion a réussi à récupérer l'adresse pour lui-même, et envoie deux annonces ARP announcements ("annonces") dans lesquelles les adresses expéditeur et destinataire correspondent à l'adresse IP générée.

Dans la mesure où l'adresse IP assignée est dynamique, elle est vérifiée à chaque redémarrage, fin du mode veille, branchement du câble Ethernet ou connexion au wifi. Pour éviter qu'un grand nombre de conflits ne surchargent le réseau, notamment lorsque de nombreux appareils essaient de se connecter au réseau en même temps, le nombre de tentatives par appareil est automatiquement réduit à un par minute après dix conflits.

Zeroconf : résolution des noms et reconnaissance automatique des appareils

En collaboration avec le groupe de travail Extensions DNS, l'équipe de Zeroconf a également développé des solutions sans configuration pour la traduction automatique d'adresses et la gestion des périphériques dans les réseaux IPv4. Au lieu de concevoir un protocole complètement nouveau, il a été décidé de proposer ces fonctions simplement en adaptant le protocole DNS standard. Les groupes de projet ont travaillé en étroite collaboration avec Apple, car l’entreprise avait déjà développé des solutions appropriées pour ses appareils avec sa propre collection de protocoles AppleTalk, qu'il suffisait de transférer à la famille de protocoles Internet. Ceci a donné naissance aux spécifications Multicast DNS (RFC 6762) et DNS-Based Service (RFC 6763).

Zeroconf : résolution des noms et reconnaissance automatique des appareils

En collaboration avec le groupe de travail Extensions DNS, l'équipe de Zeroconf a également développé des solutions sans configuration pour la traduction automatique d'adresses et la gestion des périphériques dans les réseaux IPv4. Au lieu de concevoir un protocole complètement nouveau, il a été décidé de proposer ces fonctions simplement en adaptant le protocole DNS standard. Les groupes ont travaillé en étroite collaboration avec Apple, car l’entreprise avait déjà développé des solutions appropriées pour ses appareils avec sa propre collection de protocoles AppleTalk, qu'il suffisait de transférer à la famille de protocoles Internet. Ceci a donné naissance aux spécifications Multicast DNS (RFC 6762) et DNS-Based Service (RFC 6763).

Multicast DNS (mDNS) correspond à la façon dont les périphériques peuvent envoyer des requêtes DNS à des adresses IP multicast. Pour ce faire, on définit un top level domain.local en tant que lien local dans le protocole mDNS. De plus, toutes les requêtes se terminant .local doivent être envoyées à l'adresse multicast IPv4LL 224.0.0.0.0.251 (dans IPv6 c'est l'adresse FF02::FB). Toutes les requêtes DNS qui ne se terminent pas par .local atteignent également l'adresse multicast si le réseau n’est pas doté d’un serveur DNS. En général, les messages mDNS peuvent être transmis via UDP et TCP, en utilisant le port multicast 5353 au lieu du port 53 habituel. Si un périphérique réseau souhaite ensuite résoudre le nom d'hôte d'un autre périphérique réseau, il lui envoie une demande d'identification mDNS. Le périphérique cible répond avec un paquet multicast révélant son adresse IP. Tous les périphériques du réseau reçoivent cette information et l'enregistrent automatiquement dans leur cache DNS.

DNS-Based Service Discovery (DNS-SD) définit la façon dont les services d'un réseau Zeroconf sont  rendus visibles et accessibles à tous les abonnés. Pour une meilleure coordination, il est d'abord nécessaire d'enregistrer ces services auprès de l'IANA (Internet Assigned Numbers Authority), afin d'obtenir un nom de service prêt à être assigné sans ambiguité. Les applications communiquent  ensuite leurs noms aux utilisateurs du réseau grâce à une notification multicast. Ceci ne pose aucun problème si plusieurs appareils offrent le même service : dans ce cas, le client qui accède au réseau peut simplement sélectionner l'un des hôtes.

L'IETF n’a pas officiellement publié les deux RFC avant février 2013, mais Apple, qui a initié le projet, a commencé à intégrer les normes dans ses appareils en 2002. Le logiciel open source ainsi développé, désormais connu sous le nom de Bonjour (anciennement Rendezvous), est sans aucun doute l'une des solutions les plus connues de Zeroconf. L'architecture réseau sans configuration est ainsi disponible non seulement pour MacOS et iOS, mais aussi pour Windows.

Bonjour : la réponse d'Apple aux configurations réseau compliquées

Lorsqu’Apple est passé au noyau hybride XNU en 2001 avec Mac OS X 10.0, AppleTalk, le groupe de protocoles réseau qui était jusqu'alors très utilisé, n’a pas été implémenté sur le nouveau système d'exploitation. Cette idée de ne pas développer un successeur adapté n’était pas du tout du goût de Mac Stuart Cheshire, un utilisateur expérimenté ; il a donc mis en place une boucle de discussion par email dans lequel, avec d'autres utilisateurs, il a abordé les points faibles de la configuration manuelle nécessaire du réseau. Ceci a incité Apple à repenser son projet : Stuart Cheshire a été engagé pour développer une variante de protocole adaptée au nouveau système d'exploitation, conçue en collaboration avec l'Internet Engineering Task Force. 

Avec Mac OS X 10.2, Apple a publié en août 2002 la première version des nouvelles spécifications du protocole, sous le nom de Rendezvous. Pour des raisons juridiques, il a fallu trouver un nouveau nom pour le projet : la version 10.4 du  logiciel réseau s'appelle donc encore aujourd’hui Bonjour. mDNSResponder est le composant principal du paquet : c’est un programme de fond qui s’active au démarrage et implémente DNS-Based Service Discovery ainsi que le DNS multicast. Par ailleurs, la spécification IPv4LL (ou IPv6LL) en est devenue l'un des principaux composants. La solution Apple couvre ainsi les trois domaines essentiels d'un réseau sans configuration :

  • L‘adressage
  • La résolution de noms de domaine
  • La détection de service réseau

Grâce à cette architecture, il est possible de connecter facilement votre appareil à d'autres composants des réseaux locaux utilisant également Bonjour (il peut s’agir d’un PC, d’une imprimante ou d’une application). Par exemple, le service de musique iTunes d'Apple utilise cette technologie pour trouver automatiquement d'autres utilisateurs qui partagent leur musique sur le réseau. Le logiciel Bonjour est automatiquement installé sur les systèmes MacOS et iOS actuels. Les utilisateurs Windows peuvent télécharger une version spécifique pour les services d’impression. Il est également possible d’installer une application comprenant le logiciel, par exemple iTunes, Skype ou Adobe Photoshop (à partir de CS3).

Il existe une alternative à la solution Zeroconf d'Apple, qui fonctionne également sur les systèmes Linux. Il s’agit d’Avahi, installée par défaut sur Debian et Ubuntu, et disponible sous licence libre LGPL. La mise en œuvre a d'abord été soutenue par l'initiative à but non lucratif freedesktop.org, mais s'est depuis développée pour devenir un projet indépendant.