# Bonjour: Das steckt hinter der Zeroconf-Implementierung

Damit Geräte in Netzwerken miteinander kommunizieren können, müssen sie zunächst eine Verbindung miteinander aufbauen. Zur Kontaktaufnahme benötigen sie nicht etwa den Namen des Gerätes, sondern die **IP- bzw. MAC-Adresse**, die den Teilnehmern in größeren Netzwerken für gewöhnlich automatisch durch einen zentralen **DHCP-Server** ([Dynamic Host Configuration Protocol](https://www.ionos.de/digitalguide/server/konfiguration/dhcp-das-client-server-protokoll-im-ueberblick/ "DHCP – das Client-Server-Protokoll im Überblick")) zugewiesen wird. Damit arbeitet er dem [**DNS-Server**](https://www.ionos.de/digitalguide/server/knowhow/namensaufloesung-im-netz-was-ist-ein-dns-server/ "Namensauflösung im Netz: Was ist ein DNS-Server?") zu, der für die Umwandlung des Domänennamens in eine IP-Adresse bzw. auch andersherum für die der [IP-Adresse](https://www.ionos.de/digitalguide/server/knowhow/was-ist-eine-ip-adresse/ "Was ist eine IP-Adresse?") in den Domänennamen zuständig ist. Die Alternative zu dieser automatischen Adresszuordnung besteht darin, die [**hosts-Dateien**](https://www.ionos.de/digitalguide/server/konfiguration/hosts-datei/ "Hosts-Datei") aller Netzwerk-Teilnehmer anzupassen und die Namen sowie die IP-Adressen manuell einzutragen – ein Unterfangen, das bei einem größeren Netzwerk schier unmöglich zu bewerkstelligen ist.

Beide Wege sind bei der Einrichtung eines lokalen Netzwerks also nicht als ideal: Einerseits ist auch die **Konfiguration von DHCP- und DNS-Server** mit einem gewissen Aufwand und Know-how verbunden, andererseits erfordert die manuelle Variante immer wieder die Anpassung aller hosts-Dateien, wenn man dem Netzwerk beispielsweise ein neues Gerät hinzufügt oder wenn Änderungen an bereits eingebundenen Systemen notwendig sind. Die Lösung des Problems trägt den Namen **Zero Configuration Networking** – kurz Zeroconf – und bezeichnet die Idee eines IP-Netzes, das Geräte ohne manuelle Konfiguration miteinander verbindet. Das Netzwerk-Konzept, mit dessen Ausarbeitung sich eine Arbeitsgruppe der IETF (Internet Engineering Task Force) zwischen 1999 und 2003 beschäftigt hat, ist unter anderem in den Implementierungen **Bonjour** und **Avahi** realisiert worden.

## Die wichtigsten Informationen zu Zeroconf im Überblick

Als die Internet Engineering Task Force 1999 mit dem Projekt Zero Configuration Networking begann, setzte man sich folgende Merkmale für die „konfigurationslose Vernetzung“ als Ziel:

- integrierte **Namensauflösung**

- automatische Zuordnung der **Subnetzmaske**, der eigenen **IP-Adresse** sowie des **Routers**

- Suchfunktion, um verfügbare **Netzwerkdienste** zu finden

- automatische Zuweisung von **Multicast-Adressen** für Mehrpunktverbindungen

- gleiches **Sicherheitslevel** wie Netzwerke ohne Zeroconf

Die Arbeitsgruppe der IETF konnte letztlich jedoch nicht zu einem Konsens kommen, weshalb sie zum Ende der Projektzeit auch kein Dokument mit den Anforderungen des Zero Configuration Networkings veröffentlichte. Stattdessen entschied man sich, gemeinsam mit Apple, Microsoft und Sun Microsystems, eine **Spezifikation für das Internetprotokoll** auszuarbeiten, die 2005 unter dem Namen „Dynamic Configuration of IPv4 Link-Local Adresses“ (RFC 3927) veröffentlich wurde. IPv4LL vergibt automatisch zufällige IP-Adressen mit dem Präfix 169.254/16, also **aus dem Bereich** **169.254.0.x bis 169.254.255.x**, wobei die ersten sowie die letzten 256 Adressen für zukünftige Anwendungen reserviert sind. Der RFC-Standard setzt zudem voraus, dass der Zufallsgenerator beim Erzeugen der Internetadressen rechnerspezifische Informationen wie zum Beispiel die MAC-Adresse der Netzwerkschnittstelle miteinbezieht – was die Wahrscheinlichkeit minimiert, dass zwei Geräte die gleiche IP erhalten.

### So funktioniert die automatische Adressvergabe in IPv4

Für die automatische Adressvergabe ohne das DHCP-Protokoll bedient sich IPv4 des **[Address Resolution Protocols](https://www.ionos.de/digitalguide/server/knowhow/was-ist-arp-adressaufloesung-im-netzwerk/) (ARP)**, das in IPv6 durch das [Neighbor Discovery Protocol](https://www.ionos.de/digitalguide/server/knowhow/was-ist-das-neighbor-discovery-protocol-ndp/) (NDP) ersetzt worden ist. Dabei durchläuft der Vergabeprozess mehrere Schritte, um Konflikte zwischen den IP-Adressen der teilnehmenden Netzwerkgeräte zu vermeiden.

1. Zunächst wird die IP-Adresse generiert.
2. Anschließend sieht IPv4LL sogenannte **ARP-Proben** vor, bei denen überprüft wird, ob die generierte IP-Adresse bereits im Netzwerk genutzt wird. Zu diesem Zweck werden drei ARP-Pakete mit der Absenderadresse 0.0.0.0 und der zu überprüfenden Adresse als Empfänger versendet.
3. Wird in diesem Zeitraum ein ARP-Paket empfangen, bei dem die Absenderadresse der erzeugten IP-Adresse entspricht, ist diese im Netzwerk **bereits vergeben** und die IP-Generierung beginnt von vorne.
4. Wird eine **fremde ARP-Probe** empfangen, die mit der zu testenden Adresse gekennzeichnet ist, versucht mindestens ein weiteres Gerät, dem Netzwerk mit dieser IP beizutreten, weshalb die Prozedur ebenfalls von Schritt 1 an wiederholt wird.
5. Bleibt ein Konflikt aus, hat das verbindende Gerät die Adresse erfolgreich für sich beansprucht und sendet zwei sogenannte **ARP-Announcements** („Ankündigungen“) aus, in denen Absender- und Empfängeradresse der generierten IP entsprechen.

Da die zugewiesene IP-Adresse dynamisch ist, wird sie nach jedem **Neustart, Aufwachen aus dem** **Ruhemodus, Einstecken des Ethernet-Kabels oder Einloggen in das WLAN** erneut überprüft. Damit eine hohe Zahl an Konflikten nicht zu einer Überbelastung des Netzwerks führt, zum Beispiel wenn sich viele Geräte gleichzeitig mit dem Netzwerk verbinden möchten, wird die Anzahl an Neuversuchen pro Gerät nach zehn Konflikten automatisch auf eine Prüfung pro Minute reduziert.

### Zeroconf: Namensauflösung und automatische Geräteerkennung

Gemeinsam mit der Arbeitsgruppe DNS Extensions entwickelte das Team von Zeroconf außerdem auch Lösungen für die automatische Adressübersetzung und Geräteverwaltung in den konfigurationslosen IPv4-Netzwerken. Anstatt ein komplett neues Protokoll zu entwerfen, entschied man sich dazu, diese Funktionen durch einfache Anpassungen des Standard-DNS-Protokolls zu bieten. Dabei arbeiteten die Projektgruppen eng mit Apple zusammen, denn das Elektronikunternehmen hatte mit seiner firmeneigenen **Protokollsammlung AppleTalk** bereits entsprechende Lösungen für die eigenen Geräte, die es lediglich auf die Internetprotokollfamilie zu übertragen galt. Ergebnis waren die Spezifikationen Multicast DNS (RFC 6762) und DNS-Based Service Discovery (RFC 6763).

[Multicast DNS (mDNS)](https://www.ionos.de/digitalguide/server/knowhow/multicast-dns/ "Multicast DNS") beschreibt, wie Geräte DNS-Anfragen an IP-Multicast-Adressen verschicken können. Zu diesem Zweck ist die **Top-Level-Domain *.local*** im mDNS-Protokoll als link-lokal definiert. Zudem müssen alle Anfragen, die auf .local enden, an die IPv4LL-Multicast-Adresse 224.0.0.251 (in IPv6 ist es die Adresse FF02::FB) geschickt werden. Alle DNS-Anfragen, die nicht auf *.local* enden, gelangen ebenfalls zu der **Multicast-Adresse**, wenn das Netzwerk nicht über einen DNS-Server verfügt. Generell können mDNS-Nachrichten sowohl über UDP als auch über TCP übertragen werden. Dabei wird statt des üblichen Ports 53 der Multicast-Port 5353 genutzt. Will ein Netzwerkgerät nun den **Hostnamen eines anderen Netzwerkteilnehmers auflösen**, schickt er diesem eine mDNS-Anfrage mit der Bitte um Identifizierung. Das Zielgerät antwortet mit einem Multicast-Paket, das seine IP-Adresse preisgibt. Alle Netzwerkgeräte erhalten diese Information und nehmen sie automatisch in ihrem DNS-Cache auf.

**DNS-Based Service Discovery** (**DNS-SD**) definiert, wie Dienste in einem Zeroconf-Netzwerk für alle Teilnehmer sichtbar und verfügbar gemacht werden können. Aus Abstimmungszwecken ist es zunächst notwendig, diese Dienste bei der [IANA (*Internet Assigned Numbers Authority*)](https://www.ionos.de/digitalguide/server/knowhow/die-iana-erklaert-das-sind-ihre-aufgaben/ "Die IANA erklärt: Das sind ihre Aufgaben") zu registrieren, um einen eindeutig zuordenbaren Servicenamen zu erhalten. Den jeweiligen Namen teilen Anwendungen den Netzwerkteilnehmern dann **per Multicast-Benachrichtigung** mit, wobei es keinerlei Problem darstellt, wenn mehrere Geräte den gleichen Dienst anbieten: Der zugreifende Netzwerk-Client hat in diesem Fall einfach die Möglichkeit, einen der Hosts auszuwählen.

Die beiden RFCs hat die IETF erst im Februar 2013 offiziell veröffentlicht, Apple hat als Initiator jedoch bereits 2002 damit begonnen, die Standards in seine Geräte zu integrieren. Die zu diesem Anlass entwickelte Software, die heute unter dem Namen Bonjour (früher Rendezvous) bekannt und Open Source ist, zählt zweifelsfrei zu den verbreitetsten Zeroconf-Lösungen. So ist die konfigurationslose Netzwerk-Architektur nicht nur für macOS und iOS, sondern auch für Windows verfügbar.

## Bonjour: Apples Antwort auf mühsame Netzwerkkonfigurationen

Als Apple im Jahr 2001 mit Mac OS X 10.0 auf den hybriden XNU-Kernel umstieg, entschied man sich dazu, die bis dato typische Netzwerkprotokollgruppe AppleTalk nicht auf das neue Betriebssystem zu portieren. Dass der Elektronikriese beabsichtigte, keinen **adäquaten Nachfolger zu entwickeln**, passte dem Mac-Nutzer Stuart Cheshire nicht im Geringsten, weshalb er eine E-Mail-Diskussionsrunde ins Leben rief, in der er gemeinsam mit anderen Usern die Schwächen der notwendig gewordenen manuellen Netzwerkkonfiguration ansprach. Das brachte Apple zum Umdenken: Kurzerhand stellte man Stuart Cheshire ein und beauftragte ihn mit der Entwicklung einer **Protokollvariante für das neue Betriebssystem**, woraus die bereits erwähnte Zusammenarbeit mit der Internet Engineering Task Force resultierte.

Mit Mac OS X 10.2 veröffentlichte Apple im August 2002 die erste Version der neuen **Protokollspezifikationen** unter dem Namen Rendezvous. Aufgrund rechtlicher Probleme war man gezwungen, einen neuen Titel für das Projekt zu finden, weshalb die Netzwerk-Software seit Version 10.4 den noch heute gültigen Namen [Bonjour](https://developer.apple.com/bonjour/ "Bonjour-Informationsseite auf der offiziellen Apple-Homepage") trägt. Die Hauptkomponente des Pakets ist der **mDNSResponder**, ein beim Boot-Prozess startendes und im Hintergrund ablaufendes Programm, das Multicast DNS und DNS-Based Service Discovery implementiert. Ferner gehört mittlerweile natürlich auch die Internetprotokoll-Spezifikation IPv4LL (bzw. IPv6LL) zu den Hauptbestandteilen. Damit deckt die Apple-Lösung die drei elementaren Bereiche des konfigurationslosen Netzwerks ab:

- **Adressierung**

- **Namensauflösung**

- **Netzwerkdiensterkennung**

Dank dieser Architektur stellen Sie mit Ihrem Gerät einfach und unkompliziert Verbindung zu anderen Komponenten in lokalen Netzwerken her, die ebenfalls auf Bonjour zurückgreifen – egal, ob es sich um einen PC, einen Drucker oder eine Anwendung handelt. So verwendet unter anderem der Apple-Musikdienst *iTunes* die Technologie, damit automatisch andere Nutzer gefunden werden, die ihre Musik im Netzwerk freigeben. Auf gängigen macOS- und iOS-Systemen ist die Bonjour-Software automatisch installiert. Windows-User können entweder eine [spezifische Version für Druckdienste herunterladen](https://support.apple.com/kb/DL999?locale=de_DE "Apple-Downloadcenter: Bonjour-Druckdienste für Windows") oder alternativ eine **Applikation installieren**, in deren Umfang die Software enthalten ist. Hierzu zählen unter anderem das genannte *iTunes*, *Skype* und *Adobe Photoshop* (ab CS3).

Eine Alternative zu Apples Zeroconf-Lösung, die auch auf Linux-Systemen funktioniert, unter [Debian](https://www.ionos.de/digitalguide/server/knowhow/debian-die-universelle-system-software/ "Debian – die universelle System-Software") und Ubuntu standardmäßig installiert ist und unter der freien Lizenz LGPL zur Verfügung steht, ist Avahi. Die Implementierung erfuhr zunächst Unterstützung durch die gemeinnützige freedesktop.org-Initiative, hat sich mittlerweile aber zu einem eigenständigen Projekt entwickelt.


This is a markdown version of: [https://www.ionos.de/digitalguide/server/knowhow/bonjour-software-fuer-konfigurationslose-vernetzung/](https://www.ionos.de/digitalguide/server/knowhow/bonjour-software-fuer-konfigurationslose-vernetzung/) for AI/LLM consumption.