# Zeroconf

Zeroconf o Zero Configuration Networking es un conjunto de técnicas que permiten crear de forma automática una red IP sin configuración o servidores especiales. También conocida como Automatic Private IP Addressing o APIPA, permite a los usuarios sin conocimientos técnicos conectar ordenadores, impresoras de red u otros elementos y hacerlos funcionar. Sin Zeroconf, un usuario con conocimientos técnicos debe configurar servidores especiales, como DHCP y DNS, o bien configurar cada ordenador de forma manual.
Zeroconf fue explotado por Stuart Cheshire, empleado en Apple Computer, durante su migración de AppleTalk a IP.

## Problemas solucionados

Actualmente Zeroconf soluciona tres problemas:
* Selecciona una dirección IP para los elementos de red.
* Descubre qué ordenador tiene determinado nombre.
* Descubre dónde se encuentran los servicios, como el de impresión.

### Seleccionando direcciones

Tanto IPv4 como IPv6 tienen formas estándar de escoger direcciones IP sin ayuda. A partir del RFC 3927, IPv4 utiliza el conjunto de direcciones 169.254.* (link-local).
Microsoft se refiere a esto como Automatic Private IP Addressing (APIPA).

### Resolución de nombres

Existen dos maneras muy similares de averiguar qué elemento de red tiene determinado nombre. Multicast DNS (mDNS) de Apple Computer goza de un uso extendido, y su publicación es accesible, aunque no está estandarizado por ninguna entidad. Link-local Multicast Name Resolution (LLMNR) de Microsoft se utiliza con menor frecuencia pero se encuentra en trámites de estandarización por el IETF.
Los dos protocolos tienen pequeñas diferencias. mDNS permite a un dispositivo de red seleccionar un nombre de dominio en el espacio de nombres ".local" y anunciarlo utilizando una dirección IP multicast especial. Esto introduce una semántica especial para el espacio de nombres .local, lo que se considera un problema por algunos miembros del IETF. El borrador actual de LLMNR permite a un dispositivo de red seleccionar cualquier nombre de dominio, lo que se considera un riesgo de seguridad por algunos miembros del IETF. mDNS es compatible con DNS-SD tal y como se describe en la próxima sección, mientras que LLMNR no lo es. Se pueden encontrar más detalles sobre las diferencias en

### Detección de servicios
#### Protocolo de Apple

DNS Service Discovery (DNS-SD) es un protocolo ligero de Apple, utilizado por los productos de Apple, y diferentes impresoras de red además de un considerable número de productos de terceras partes y aplicaciones sobre varios sistemas operativos. Se considera más simple y sencillo de implementar que SSDP porque utiliza DNS en lugar de HTTP. Utiliza los registros de DNS SRV (RFC 2782), TXT, y PTR para advertir los nombres de los servicios (Service Instance Names), que son informes sobre los servicios disponibles como instancia, tipo, nombre de dominio y parámetros opcionales de configuración. Los tipos de servicio se entregan de un modo informal tal y como llegan. DNS-SD.org mantiene y publica un registro de tipos de servicio.

#### Protocolo UPnP

Simple Service Discovery Protocol (SSDP) es un protocolo UPnP, utilizado en Windows XP y diferentes marcas de equipos de red. A pesar del nombre, se le considera complejo y requiere mayor esfuerzo para implementarse que DNS-SD. SSDP utiliza notificaciones HTTP que entregan una URI de tipo de servicio y un nombre de servicio único (Unique Service Name, USN). Los tipos de servicio se regulan por el Universal Plug and Play Steering Committee.

#### Esfuerzos hacia un protocolo IETF estándar

Service Location Protocol (SLP) es el único protocolo de detección de servicios que ha alcanzado el estatus de IETF RFC, y normalmente es ignorado por los grandes fabricantes excepto Novell. Se describe SLP en el RFC 2608; y todavía no es un estándar, o borrador de estándar, del IETF.

## Estandarización

En marzo del 2005 el grupo de trabajo IETF Zeroconf publicó el RFC 3927, un estándar para elegir direcciones para los elementos de red, que incluía a partes como Apple, Sun y Microsoft.
El grupo de trabajo IETF DNSEXT está trabajando en la estandarización de LLMNR para descubrir el nombre de cada elemento de red.
El estándar SLP, RFC 2608, para adivinar dónde obtener los servicios, fue publicado por el grupo de trabajo IETF SVRLOC.

## Implementaciones
### Bonjour de Apple

La solución Zeroconf más adoptada es Bonjour de Apple Computer, que no sigue SLP, el estándar del IETF para la detección de servicios, sino una combinación de otros estándares del IETF para obtener una aproximación más ligera a la detección de servicios. Bonjour utiliza el direccionamiento de enlace local (link-local), mDNS, y DNS-SD. Apple cambió de SLP a mDNS y DNS-SD entre Mac OS 10.1 y 10.2.

### Direcciones IPv4 Link-Local

Hay varias implementaciones disponibles:
* Tanto Windows como Mac OS soportan direcciones de enlace local desde 1998. Apple lanzó su implementación open-source en el paquete bootp del sistema operativo Darwin BSD.
* zcip (Zero-Conf IP)
* BusyBox proporciona una implementación zeroconf
* zeroconf, un paquete basado en Simple IPv4LL, una implementación menor de Arthur van Hoff.
Todas las anteriores implementaciones son demonios que solo tratan con direcciones IP de enlace local. Otra aproximación consiste en modificar los cliente DHCP existentes.
* Elvis Pfützenreuter ha escrito un parche para el cliente/servidor uDHCP.
Ninguna de estas implementaciones soluciona comportamientos del núcleo como la difusión de respuestas ARP o el cierre de las conexiones de red existentes.

### Multicast DNS (mDNS) y DNS Service Discovery (DNS-SD)

Multicast DNS es un modo de utilizar las familiares interfaces de programación de DNS, los formatos de paquetes y el modo de operativo, en una pequeña red en la que no se ha instalado ningún servidor DNS convencional.
mDNS y DNS-SD con frecuencia se implementan juntos. La combinación más popular entre los programadores de aplicaciones es mDNSResponder de Apple, que tiene interfaces para C y Java y está disponible en BSD, Mac OS X, Linux, y otros sistemas operativos POSIX además de Windows.

### Enlaces de implementaciones

* Avahi, una implementación de software libre (LGPL) de mDNS/DNS-SD para Linux
* Bonjour, una implementación de DNS-SD de Apple Computer
* Howl, una implementación multiplataforma de mDNS/DNS-SD basada en Bonjour
* JmDNS en Java
* Liaison
* pyZeroConf, detección de servicios en Python
* tmdns, tiny multicast DNS del mismo proyecto que ZCIP
* Multicast DNS