# Zeroconf

Zero-configuration networking ou Zeroconf est l'appellation générique d'un ensemble de protocoles permettant de créer automatiquement un réseau IP utilisable sans configuration particulière ou serveurs dédiés.
Cela permet aux utilisateurs novices de connecter en réseau des ordinateurs, des imprimantes et d'autres périphériques et de s'attendre à ce que celui-ci soit automatiquement fonctionnel. Sans Zeroconf, un utilisateur doit soit mettre en place des services spéciaux, tels que DNS et DHCP, soit configurer les paramètres réseau de chaque périphérique manuellement, ce qui peut être difficile pour ceux qui ne sont pas familiers de ces techniques.
Les protocoles Zeroconf fournissent les fonctionnalités suivantes :
* allocation dynamique d'adresse IP sans serveur DHCP ;
* résolution de noms et adresses IP sans serveur DNS ;
* recherche de services sans annuaire ;
* traversée de passerelle NAT.

## Allocation dynamique d'adresse IP : IPv4LL/APIPA

Les protocoles IPv4 et IPv6 possèdent tous deux des techniques normalisées d'auto-configuration des adresses des interfaces réseau.
Pour IPv4, la RFC 3927 de l'IETF définit l'allocation dynamique d'adresses IP dans la plage 169.254.0.0/16. La RFC appelle cette technique IPv4 link-local (IPv4LL) address assignment. Toutefois, Microsoft se réfère à celle-ci sous le nom APIPA ou Internet Protocol Automatic Configuration (IPAC).
Pour IPv6, l'allocation automatique d'adresses link-local est prévue dans la RFC 4862.

## Résolution de noms
### Débuts

Un premier protocole proposé pour la résolution de nom a été publié par Bill Manning et Bill Woodcock en 2000 sous l'appellation Multicast Domain Name Service. Celui-ci fut utilisé comme base de travail par Apple et Microsoft pour l'élaboration de leurs propres protocoles.

### Multicast DNS (mDNS)

Le protocole de Multicast DNS (mDNS) est proposé par Apple comme projet de standard. C'est actuellement le plus utilisé.
Multicast DNS (mDNS) est un protocole utilisant des datagrammes similaires au DNS unicast, mais mis en œuvre différemment. Chaque ordinateur sur le réseau local conserve sa propre liste d'enregistrements DNS (par exemple A, MX, SRV, etc.) et lorsqu'un client mDNS veut connaitre l'adresse IP d'un périphérique réseau à partir de son nom, le périphérique avec un enregistrement A correspondant répond avec son adresse IP. L'adresse de multicast utilisée par mDNS est 224.0.0.251.

### Link-local Multicast Name Resolution (LLMNR)

Le protocole Link-local Multicast Name Resolution (LLMNR) a été soumis par Microsoft pour adoption officielle comme standard Internet par le groupe de travail DNSEXT de l'IETF, mais il n'a pas réussi à obtenir un consensus et a été publié comme RFC informel seulement (RFC 4795). Il reste aujourd'hui peu utilisé.

### Comparatif

Les deux protocoles ont des différences mineures dans leur approche de la résolution de nom. mDNS permet à un périphérique réseau de choisir un nom de domaine dans l'espace de noms « .local » et de l'annoncer à l'aide d'une adresse IP multicast spéciale. Cela introduit une sémantique différente pour l'espace de noms « .local », ce qui est considéré comme un problème par des membres de l'IETF. La spécification actuelle de LLMNR permet à un périphérique réseau de choisir n'importe quel nom de domaine, ce qui est considéré comme risqué du point de vue de la sécurité par des membres de l'IETF. Par ailleurs, mDNS est compatible avec le protocole DNS-SD décrit dans la section suivante — et proposé aussi par Apple —, alors que LLMNR ne l'est pas.
À la suite de l'échec de LLMNR dans son optique de standard Internet et étant donné que les protocoles mDNS et DNS-SD sont beaucoup plus largement utilisés que LLMNR, l'IETF a demandé à Apple de soumettre les spécifications de ses deux protocoles afin de les publier en tant que RFC informel.

## Recherche de services
### DNS-Service Discovery (DNS-SD)

Le protocole DNS-Service Discovery (DNS-SD) est basé sur l'utilisation de mDNS. Il est utilisé par les produits Apple, par de nombreuses imprimantes réseau et par un certain nombre de produits et d'applications sur différents systèmes d'exploitation. Contrairement à la technologie concurrente SSDP de Microsoft, DNS-SD a recours à DNS au lieu de HTTP. Il emploie des enregistrements DNS de type SRV, TXT (en) et PTR (en) pour publier les services disponibles. Les hôtes offrant des services publient les détails de ces derniers comme le type de service, le nom de domaine et des paramètres de configuration optionnels. Un registre des types de service existants (non exhaustif) est mis à jour et publié par DNS-SD.org. Les types de services sont enregistrés de manière informelle selon le principe premier arrivé, premier servi.
De nombreux logiciels réseau pour Mac OS X, tels que le navigateur Safari, le logiciel de messagerie instantanée iChat utilisent DNS-SD pour localiser les serveurs ou les pairs sur le réseau local. D'autres logiciels Mac OS X tels que le logiciel de gestion de photo iPhoto ou le gestionnaire de musique iTunes utilisent également DNS-SD pour partager leurs contenus. Sur Windows, certains clients de messagerie instantanée et de voix sur IP tels que Gizmo5 utilisent DNS-SD. Certaines distributions Linux incluent également le support de DNS-SD.
Les protocoles mDNS et DNS-SD ont été développés par Stuart Cheshire (en), employé d'Apple, quand cette société a abandonné le protocole AppleTalk pour le protocole IP.

### UPnP Simple Service Discovery Protocol (SSDP)

Simple Service Discovery Protocol (SSDP) est un protocole UPnP non soumis à l'IETF, utilisé dans Windows XP et par plusieurs marques de matériel réseau. SSDP diffuse des annonces via des notifications HTTP fournissant un type de service URI et un nom de service unique (USN). Les types de services sont réglementés par le comité de gestion d'UPnP.
SSDP est pris en charge par de nombreux appareils pare-feu, où les ordinateurs hôtes derrière celui-ci peuvent percer des trous pour les applications. Il est également utilisé par certains matériels de type Media Center, où les échanges de médias entre l'hôte et le Media Center sont facilités par l'utilisation de SSDP.

### Service Location Protocol (SLP)

Service Location Protocol (SLP) est le seul protocole pour la recherche de services ayant atteint le statut de proposition de standard de l'IETF. Ce protocole est utilisé par les ordinateurs réseau et imprimantes réseau Hewlett-Packard, Novell, Sun Microsystems et Apple, mais est ignoré par certains autres grands fournisseurs. SLP est décrit par la RFC 2608 et la RFC 3224 publiés par le groupe de travail SVRLOC de l'IETF et des implémentations sont disponibles pour les systèmes d'exploitation Mac OS X, Solaris et Linux.

## Traversée de passerelle NAT
### NAT Port Mapping Protocol (NAT-PMP)

Le protocole NAT Port Mapping Protocol (NAT-PMP), proposé comme projet de RFC par Apple permet à un ordinateur d'un réseau privé (derrière une passerelle NAT) de configurer automatiquement la passerelle afin que les machines à l'extérieur du réseau privé puissent le contacter.

### UPnP Internet Gateway Device Protocol (IGD)

Le protocole Internet Gateway Device (en) (IGD) est un protocole UPnP implémenté sur certaines passerelles NAT. Il s'agit d'une méthode couramment utilisée pour la redirection de port, mais celle-ci n'a pas été soumise à l'IETF.

## Implémentations majeures

Les sections ci-dessous présentent les implémentations les plus répandues des protocoles Zeroconf de l'IETF.

### Apple Bonjour

Développé par Apple, Bonjour (appelé Rendez-vous jusqu'en 2004) est l'implémentation la plus répandue des protocoles mDNS, DNS-SD et NAT-PMP, utilisée principalement sur Mac OS X (celle-ci est également disponible pour Microsoft Windows). Originellement SLP offrait les fonctionnalités de recherche de service de Bonjour, mais Apple a remplacé SLP par mDNS et DNS-SD entre Mac OS X 10.1 et 10.2, même si SLP continue d'être pris en charge par Mac OS X.

### Avahi

Avahi est une bibliothèque logicielle fournissant une implémentation libre des protocoles IPv4LL, mDNS et DNS-SD. Elle est utilisée par de nombreuses distributions GNU/Linux et *BSD.
L'implémentation d'Avahi est totalement compatible avec celle de Bonjour. Avahi fournit des bibliothèques de compatibilité pour les applications utilisant Bonjour ou l'ancienne implémentation libre Howl de mDNS. Avahi fournit également des interfaces pour différents langages de programmation (Python, Mono, etc.) et offre une interface D-Bus.

### Windows CE 5.0

Windows CE 5.0 fournit une implémentation de Microsoft du protocole LLMNR.

### Implémentations de IPV4LL/APIPA

* Windows et Mac OS gèrent tous deux l'allocation automatique d'adresses IP locales par IPV4LL depuis 1998. Apple a publié son implémentation sous une licence open source dans le paquet bootp de Darwin.
* Dans les systèmes de type UNIX, Avahi fournit une implémentation de IPv4LL via le démon avahi-autoipd.