Admins und Heimvernetzer haben Besseres zu tun, als ihre IP-Netzwerke mit Handarbeit und Hintergrundwissen manuell einzurichten. Penibel für passende Adressen sorgen, eigene Nameserver administrieren und ein Verzeichnis aller verfügbaren Ressourcen pflegen gehört nicht zu den interessanten und kreativen Aufgaben. Das Gesamtkonzept Zeroconf mit seinen Teilaufgaben IP-Adressierung, Namensauflösung und Service Discovery (Abbildung 1) erledigt das allein.
Abbildung 1: Das Zeroconf-Gesamtkonzept sorgt für praktische Automatismen auf drei Ebenen: Es vergibt automatisch IP-Adressen, implementiert eine dezentrale Namensauflösung und betreibt darüber Service-Discovery.
Den alten Wunsch nach automatischer Konfiguration von IP-Nummern, Netzmasken und Nameserver-Adressen erfüllt häufig ein DHCP-Server (Dynamic Host Configuration Protocol). Ihn muss der Admin allerdings verwalten. Es geht aber auch ohne zentralen DHCP-Server: IPv4LL [2] vergibt IP-Adressen aus dem privaten Bereich 169.254.0.0/16. Die Computer im Netz ziehen je eine zufällige IP und prüfen, ob diese Nummer noch frei ist. Wenn ja, dann weisen sie die Adresse der lokalen Netzwerkschnittstelle zu. Sollte es trotz aller Vorsicht später zu einem Streit über IPs kommen, löst ein simples, aber effektives Verfahren den Konflikt. Details erläutert der Kasten "IPv4LL".
|
Die Adressvergabe mit IPv4LL (IPv4 Link-Local Addresses, [2]) bedient sich bei ARP (Address Resolution Protocol), um für ein Netzwerkinterface automatisch eine freie IP-Adresse zu finden. Die IANA (Internet Assigned Numbers Authority) sieht hierfür den Adressbereich 169.254.0.0/16 vor.
Will ein Computer eine IPv4LL-Adresse konfigurieren, wählt er eine zufällige IP-Adresse zwischen 169.254.1.0 und 169.254.254.255. Die ersten 256 und die letzten 256 Adressen hat die IANA für zukünftige Anwendungen reserviert. Der Standard verlangt, dass der Zufallszahlengenerator auch rechnerspezifische Informationen berücksichtigt, zum Beispiel die MAC-Adresse des Netzwerkinterface. Das senkt die Wahrscheinlichkeit, dass zwei Maschinen die gleiche Nummer ziehen. Erst fragen, dann senden
Bevor ein Rechner seine IP-Adresse als Absender in IP- oder ARP-Paketen verwendet, muss er prüfen, ob sie wirklich frei ist. Der Test ist immer dann fällig, wenn Linux das Netzwerkinterface aktiviert. Das passiert beim Einschalten oder Rebooten des Computers, beim Aufwachen aus dem Sleep-Modus, aber auch beim Einstecken eines Ethernet-Kabels oder beim Eintritt in ein WLAN. Das IPv4LL-RFC verbietet ausdrücklich periodische Prüfungen, da sie Netzwerkressourcen verschwenden. Vielmehr hat ein Rechner eventuelle Konflikte passiv zu erkennen und darauf zu reagieren. Aktive Konfliktvermeidung
Für den aktiven Konflikttest sieht IPv4LL so genannte ARP-Probes vor. In diesen Paketen setzt der Sender die Quell-IP auf 0.0.0.0 und verwendet als Empfänger die zu überprüfende Adresse. Ist der Rechner bereit für die Konfliktprüfung, wartet er zunächst ein bis zwei Sekunden und sendet dann drei ARP-Probes im zufälligen Zeitabstand von ein bis zwei Sekunden. Empfängt der Rechner zwischen Testbeginn und zwei Sekunden nach Ende ein ARP-Paket, das als Absender-IP die zu überprüfende IP-Adresse trägt, dann hat er einen Konflikt aufgedeckt. Die Prozedur beginnt von vorn mit einer anderen zufälligen IP.
Empfängt der Computer eine fremde ARP-Probe, die als Empfänger-IP die zu testende IP enthält, muss er ebenfalls auf eine neue Test-IP wechseln. Das passiert eventuell, wenn zwei oder mehr Rechner gleichzeitig die gleiche Link-Local-Adresse probieren. Um ARP-Stürme und damit eine Überlastung des lokalen Netzwerks zu vermeiden, wenn es zu mehreren aufeinander folgenden Konflikten kommt, reduziert jeder Rechner nach zehn Fehlversuchen die Geschwindigkeit, mit der er neue Adressen wählt. Er beschränkt sich dann auf maximal eine Prüfung pro Minute. Die neue Adresse bekannt geben
Konnte er keinen Konflikt feststellen, hat der Rechner die IP-Adresse erfolgreich für sich beansprucht und muss dies bekannt geben. Er sendet dazu zwei ARP-Announcements im Abstand von zwei Sekunden. Hier setzt er als Absender- und als Empfänger-IP die neu ausgewählte Adresse ein.
Empfängt der Rechner nach diesem Announcement ein fremdes ARP-Paket, dessen Empfänger-IP die eigene Adresse enthält, hat er passiv einen Adressenkonflikt bemerkt. Er kann dann auf neue IP-Adresse wechseln oder seine bisherige Nummer verteidigen. Letzteres ist zu empfehlen, wenn der Rechner noch TCP-Verbindungen offen hat. Er reagiert darauf mit einem weiteren ARP-Announcement. Gab es in den letzten Sekunden schon einen Adressenkonflikt, muss der Rechner auf eine neue IP-Adresse wechseln, um eine Endlosschleife zu vermeiden. (Andreas Krennmair)
|
Einfach loslegen
Besonders nützlich ist IPv4LL in Ad-hoc-Netzwerken: einfach einstecken und loslegen, ohne Hilfe und Koordination eines Administrators. So lassen sich Endgeräte wie digitale Videorekorder, Drucker, Digitalkameras, Stereoanlagen oder auch Internet-Kühlschränke ohne menschlichen Eingriff vernetzen.
Neuere Mac-OS-X- und Windows-Versionen verwenden IPv4LL bereits, wenn auch teils in vereinfachter Form. Windows kennt die Technik unter dem veralteten Namen APIPA (Automatic Private IP Addressing). Das Zeroconf-Programm [4] von Anand Kumria rüstet Linux mit IPv4LL auf. Nach der Installation startet »zeroconf« automatisch für jede lokale Netzwerkschnittstelle und setzt zusätzlich zu manuellen oder per DHCP zugewiesenen IP-Adressen auch immer eine per IPv4LL. Das stellt sicher, dass der Rechner über mindestens eine gültige Adresse verfügt. Beim ausgehenden Datenverkehr entscheidet die Routingtabelle des Linux-Kerns, welche der lokalen Adressen er verwendet, und sorgt so für friedliche Koexistenz von IPv4LL und anderen Adressierungen.
Namensfragen
Mit IP-Adressen allein klappt zwar die Kommunikation, ohne Namensvergabe mit DNS (Domain Name System) bleibt sie aber reichlich unkomfortabel. Das klassische DNS-Protokoll funktioniert nach dem Client-Server-Modell: Hierarchisch geordnete Server beantworten die Anfragen der Clientrechner. Ad-hoc-Netze ohne Admin brauchen dagegen einen Peer-to-Peer-Dienst, bei dem alle Computer in einem lokalen Netz den Namensraum gleichberechtigt und gemeinsam organisieren.
Apple hat zu diesem Zweck ein Protokoll namens Multicast-DNS (MDNS, [4]) entwickelt und die Spezifikation freigegeben. Es basiert auf klassischem DNS und stellt unter dem Domänen-Suffix ».local.« einen Raum bereit, in dem Rechner ihre Namen und IP-Adressen registrieren. Im lokalen Netz dient MDNS als unbürokratische Ergänzung des Internet-weiten, stark reglementierten DNS.
Anders als das klassische DNS, das auf Port 53 sendet, arbeitet MDNS auf Port 5353. Das hält beide sauber getrennt, MDNS-Server brauchen auch keine Root-Rechte. Der Aufbau von MDNS-Paketen gleicht den normalen DNS-Paketen aber so stark, dass sogar die bekannten Unix-DNS-Werkzeuge wie »dig« MDNS erzeugen und verarbeiten.
Während die Syntax eines Multicast-DNS-Pakets fast genau der in RFC 1035 definierten DNS-Spezifikation folgt, ist ihre Semantik modifiziert. Zum Beispiel nehmen die Query-Pakete mehrere Fragen auf (Abbildung 2a). Um Bandbreite zu sparen, gibt der Fragesteller auch gleich mögliche Antworten mit: Er sendet die ihm bekannten RRs (Resource Records, also DNS-Datensätze), die auf seine eigene Fragestellung passen. Diese Antworten braucht dann niemand mehr zu geben.
Abbildung 2a: MDNS-Query-Pakete, also Fragen nach DNS-Datensätzen (Resource Records, RRs), dürfen im Gegensatz zu DNS mehr als eine Frage enthalten.
Will ein Multicast-DNS-Rechner einen neuen Datensatz veröffentlichen, dann beginnt er gegebenenfalls mit einem Kollisions-Check. Der stellt sicher, dass nicht zwei Teilnehmer des Netzes sich widersprechende Datensätze registrieren. Der Rechner nutzt dazu eine MDNS-Query, in die er den zu registrierenden RR einbindet, und wartet, ob ein anderer Teilnehmer ablehnend reagiert. Hat er den Kollisionstest bestanden oder ihn für unnötig gehalten, dann gibt er seinen Dienst bekannt. Dazu sendet er unaufgefordert ein Antwortpaket (Abbildung 2b).
Abbildung 2b: Antwortpakete schickt MDNS auch ohne vorherige Frage. Damit publiziert ein Rechner seine Dienste im lokalen Netz.