Neighbor Discovery Protocol (NDP) – was ist das?
Fürs Internet und lokale Netzwerke ist das Internetprotokoll ein unverzichtbarer Bestandteil: Damit der Transport digitaler Informationen gelingt und verschickte Datenpakete den oder die gewünschten Zielhosts erreichen, bedarf es aber einer Reihe zusätzlicher Hilfs- und Routingprotokolle, weshalb man auch von der Internetprotokollfamilie bzw. dem Internetprotokoll-Stack spricht. Während das Dynamic Host Configuration Protocol (DHCP) beispielsweise dafür sorgt, dass Clients beim IP-Verbindungsaufbau die passende Netzwerkadresse zugewiesen bekommen, dient das Neighbor Discovery Protocol (NDP) u. a. der gemeinsamen Kommunikation benachbarter Hosts in lokalen Netzen sowie der Ermittlung des Gateway-Routers.
Definition des Neighbor Discovery Protocol
Das Neighbor Discovery Protocol (dt. „Nachbar-Entdeckungs-Protokoll“) kommt in Verbindung mit der neueren Version des Internetprotokolls IPv6 zum Einsatz. Sein Haupteinsatzzweck besteht in der Auflösung von IPv6-Adressen in gültige MAC-Adressen, die zugrundeliegenden Hardware-Adressen des jeweiligen Geräts. In IPv4 übernimmt diese Funktion noch das Address Resolution Protocol (ARP). Alle ermittelten Adressen landen als Informationen gespeichert im sogenannten Neighbor-Cache. Dieser Zwischenspeicher informiert die Netzwerkteilnehmer nicht nur über eben jene lokalen Adressen der benachbarten Clients, sondern versorgt sie auch mit zusätzlichen Informationen, die beispielsweise für die Erreichbarkeitsprüfung benötigt werden.
Ferner ist das NDP wie bereits erwähnt auch maßgeblich an der Zuordnung des Standard-Gateways beteiligt. Mit der Hinzunahme des Router Advertisement Protocol (RA) lassen sich sowohl der Standard-Router als auch die gültigen Netzpräfixe – zwei elementare Parameter der Netzwerkkonfiguration – feststellen. Schließlich fungiert das Netzwerkprotokoll, das Daten einzig innerhalb eines Netzwerks austauscht, auch als Unterstützungsprotokoll für die dynamische Adresskonfiguration. Dieser Prozess ist auch als Stateless Automatic Address Configuration (SLAAC) bekannt.
Wie funktioniert NDP?
Jedes Gerät, das das Neighbor Discovery Protocol für die Kommunikation im Netzwerk hinzuzieht, verwaltet seinen eigenen Neighbor-Cache. In diesem sind alle ihm bekannten Geräte des Netzes aufgelistet und anhand ihrer eindeutigen Geräteadresse (MAC) verifizierbar. Dabei ist ersichtlich, ob die zwischengespeicherte Adresse zu einem einfachen Client oder beispielsweise einem Router gehört. Der Neighbor-Cache ist allerdings nicht der einzige, sondern lediglich einer von vier Zwischenspeichern, die den Funktionsweisen des NDP-Protokolls dienen. Bei den drei anderen Komponenten, die ebenfalls von jedem Gerät einzeln gehandhabt werden, handelt es sich um die folgenden:
- Destination-Cache: Der „Ziel“-Cache umfasst Einträge über alle Hosts im Netzwerk, an die bereits Datenpakete verschickt wurden. Jeder dieser Einträge verweist wiederum per Link auf eine Adresse im Neighbor-Cache, die beim Verschicken von Datenpaketen an den gewünschten Zielhost als nächster Hop (Zwischenstation) verwendet werden soll.
- Präfix-Cache: Im Präfix-Cache bzw. der Prefix List werden alle Präfixe verwaltet, die für das Netzwerk gelten, in dem sich der Client befindet. Diese Auflistung ist einerseits notwendig, weil IPv6 Multihoming – also die Erreichbarkeit des Netzes über zwei unterschiedliche Provider – unterstützt und andererseits die Aufsplittung des Adressraums in unterschiedliche Präfixe zulässt. Mithilfe der Einträge im Präfix-Cache stellt NDP sicher, dass der Zielhost sich im gleichen Subnetz befindet. Jedes Präfix mit Ausnahme der MAC-Adresse (auch Link-Layer-Adresse) besitzt eine festgelegte Gültigkeitsdauer, sodass der Cache immer auf dem aktuellen Stand bleibt.
- Default Router List: Die Default Router List umfasst alle bekannten Router, die mit dem Gerät regelmäßig in Kontakt treten. Jeder Eintrag in dieser Liste ist dabei mit einem Eintrag im Neighbor-Cache verknüpft. Dass nur aktive Router gelistet sind, liegt an der Tatsache, dass für alle Vertreter automatisch eine Ablaufdauer definiert wird. Eine Verlängerung bzw. Auffrischung erfolgt nur bei entsprechender Rückmeldung des Routers.
Um die verschiedenen Caches für das NDP zu erstellen, kommt ein anderes Internetprotokoll zum Einsatz, das als ICMPv6 („Internet Control Message Protocol for the Internet Protocol Version 6“) bekannt ist.
Auf diesen fünf ICMPv6-Typen baut NDP auf
ICMPv6 dient in der aktuellen Version der Internetprotokollfamilie für gewöhnlich als Übermittler für Fehler- und Informationsmeldungen, wird aber vom Neighbor Discovery Protocol in Form von fünf verschiedenen ICMPv6-Typen ebenfalls in Anspruch genommen. Je nach Typ kommen bestimmte Benachrichtigungen zum Einsatz, mit deren Hilfe die Zwischenspeicher bzw. Listen gebildet werden.
Typ 134: Router Advertisement
Router senden in regelmäßigen Abständen sogenannte Router Advertisements – ICMPv6-Nachrichten des Typs 134 – aus, um die Teilnehmer des Netzwerks über ihre Anwesenheit in Kenntnis zu setzen. Sie verteilen so u. a. ihre Routing-Informationen und die notwendigen Parameter für die automatische IP-Konfiguration. Ziel der Nachricht ist für gewöhnlich der Standard-Multicast-Adressbereich „ff02::01“, über den alle Hosts im relevanten Gültigkeitsbereich angesprochen werden. Auf diesem Weg erhalten sie auch die Adresse des Routers (Standard-Gateway) und das globale Präfix. Das Schema einer Routing Advertisement sieht folgendermaßen aus:
Dieser Nachrichtentyp besitzt also eine Standardlänge von 128 Bit, wobei zusätzliche Bits für Optionen hinzukommen können. Gültige Optionen sind dabei die MAC-Adresse des Routers, die Angabe über die maximale Paketgröße („Maximum Transmission Unit“) sowie sämtliche relevanten Präfix-Informationen.
Das Feld „Typ“ wird entsprechend der Nachricht auf 134 gesetzt, das Feld „Code“ immer auf 0. Es folgen 16 Bit ICMP-Prüfsumme und eine 8 Bit lange Angabe über das Hop-Limit, die die vom Router empfohlenen Zwischenstationen enthalten kann.
Es folgen Einzelbits, die Aufschluss darüber geben,
- ob IP-Adressen über dynamisches DHCPv6 bezogen werden können (M)
- und ob andere Adressinformationen über dynamisches DHCPv6 bezogen werden können (O).
Das Feld „Reserviert“ bleibt unbenutzt und wird vom Empfänger ignoriert. Ferner enthält die Router Advertisement Zahlenangaben über
- die Zeit in Sekunden, die der Router in der Default Router List verweilen soll (Router-Lebensdauer; 16-Bit-Integer, maximal 65535);
- die Zeit in Millisekunden, die eine Adresse im Neighbor-Cache nach dem Feststellen der Erreichbarkeit noch verfügbar sein soll (Erreichbarkeits-Time-out; 32-Bit-Integer, maximal ca. 50 Tage)
- sowie die Zeit in Millisekunden, nach der erneut eine Neighbor-Solicitation-Nachricht (s. u.) gesendet werden soll (Auflösungs-Time-out; 32-Bit-Integer).
Typ 133: Router Solicitation
Router Solicitations sind Nachrichten, mit denen ein Host alle Router im Netzwerk dazu auffordern kann, die angesprochenen Router Advertisements zu verschicken. Diese antworten dann mit der Nachricht des Typs 134 entweder ausschließlich an den anfragenden Host (Unicast) oder an alle Netzwerkteilnehmer (Multicast). Mithilfe dieses Nachrichtentyps muss ein Host, beispielsweise bei einer Neuverbindung, nicht auf die automatische Mitteilung der Netzwerk-Router warten. Diese Art von ICMPv6-Nachrichten ist folgendermaßen strukturiert:
Der Standard-Aufbau einer NDP-ICMPv6-Nachricht des Typs 133 sieht also eine Mindestlänge von 64 Bit vor. „Typ“ erhält den Router-Solicitation-Wert 133 zugeordnet, während „Code“ wiederum auf 0 gesetzt wird. Die zwei weiteren Pflichtfelder sind die ICMP-Prüfsumme (16 Bit) und ein 32 Bit langes „Reserviert“-Feld, das unbenutzt bleibt.
Die einzige mögliche Option, die der Nachricht wahlweise angehängt werden kann, ist die MAC-Adresse des Senders.
Typ 135: Neighbor Solicitation
Netzwerk-Clients verschicken Neighbor Solicitations, um die MAC-Adresse des Zielhosts in Erfahrung zu bringen, und übermitteln dabei im Gegenzug optional ihre eigene Adresse. ICMPv6-Nachrichten dieser Art können Geräte entweder via Multicast übertragen, wenn sie eine Adresse ermitteln wollen, oder per Unicast, falls nur die Erreichbarkeit eines Nachbars überprüft werden soll.
Wie alle ICMPv6-Nachrichtentypen beginnen auch Neighbor Solicitations mit 8 Bit Typenkennzeichnung – in diesem Fall hat „Typ“ den Wert 135. Es folgen der 8 Bit lange Code, der auf 0 gesetzt wird, und 16 Bit Prüfsumme. Das „Reserviert“-Feld bleibt, wie bei den bisher vorgestellten Nachrichten auch, unbenutzt.
Mit 128 Bit macht die anvisierte IP-Adresse, die keine Multicast-Adresse sein darf, den Großteil der Nachricht aus – bei einer gesamten Länge von mindestens 192 Bit. Auch dieser, für das Neighbor Discovery Protocol entscheidende Nachrichtentyp erlaubt als optionale Zusatzangabe die MAC-Adresse des Senders.
Typ 136: Neighbor Advertisement
Netzwerkgeräte verschicken Neighbor Advertisements einerseits als Reaktion auf anfragende Neighbor Solicitations, andererseits aber auch unaufgefordert, um andere Teilnehmer über Änderungen in der Adresskonfiguration in Kenntnis zu setzen. Der Aufbau solcher Nachrichten sieht folgendermaßen aus:
Die ersten 32 Bit der standardmäßig 192 Bit langen Neighbor Advertisements orientieren sich am typischen ICMPv6-Nachrichten-Schema: Für „Typ“ (136) und „Code“ (0) werden jeweils 8 Bit reserviert, woraufhin die 16 Bit lange Prüfsumme folgt. Drei einzelne Bits setzen den Nachrichtencode fort, für die folgende Bedingungen gelten:
- R: Das „R“-Bit wird gesetzt, wenn die Nachricht von einem Router geschickt wird.
- S: Enthält die Nachricht das „S“-Bit, handelt es sich bei dieser um eine Antwort auf eine Unicast-Neighbor-Solicitation, mit der dem anfragenden Netzwerkteilnehmer die Erreichbarkeit bestätigt wird. In Antworten auf Multicast-Anfragen oder in eigens initiierten Neighbor Advertisements darf dieses Bit nicht gesetzt werden.
- O: Das „O“-Flag weist den Empfänger der Nachricht an, den existierenden Cache-Eintrag zu überschreiben.
Die anschließenden 29 Bit sind nach dem bekannten Muster reserviert, bleiben also unbenutzt, werden mit 0 initialisiert und vom Empfänger ignoriert. Mit der 128 Bit langen Zieladresse schließt sich nun der Hauptteil der Nachricht an: Dabei handelt es sich entweder um die IP-Adresse, von der die Neighbor Advertisement angefordert worden ist, oder aber um die Adresse, für die eine neue MAC-Adresse bekannt gegeben werden soll. Als Option kann der Router wiederum seine eigene Adresse nennen; dies ist obligatorisch, wenn er auf eine Multicast-Anfrage antwortet.
Typ 137: Redirect
Router haben die Möglichkeit, Netzwerkhosts über einen besseren ersten Hop auf dem Weg zu bestimmten Zieladressen zu informieren. Zu diesem Zweck senden sie NDP-ICMPv6-Redirects, die sich durch folgendes Schema auszeichnen:
Mit einer Mindestlänge von 320 Bit sind Redirects die größten ICMPv6-Nachrichten, die für die Funktionsweise des Neighbor Discovery Protocol von Bedeutung sind. Dem typischen Aufbau mit Bitfolgen für die Typenkennzeichnung (137), den Code (0), die Prüfsumme und ein unbenutztes „Reserviert“-Feld (32 Bit) folgen zunächst die Adresse des empfohlenen Hops und anschließend die Adresse, für die diese Umleitung empfohlen wird (beide 128 Bit). Optional kann das Nachrichtenpaket die MAC-Adresse des Ziels sowie den Header des umgeleiteten Pakets enthalten.
Die Aufgaben und Möglichkeiten von NDP im Überblick
So viel zu den Caching-Mechanismen und Kommunikationsmitteln des Neighbor Discovery Protocol in Kombination mit dem Internet Control Message Protocol. Die folgenden NDP-Szenarien verdeutlichen das Zusammenspiel und die Funktionsweise der beiden Protokolle:
- Router und Netzwerkpräfix erkennen: Alle Router in einem Netz übermitteln in regelmäßigen Abständen Router Advertisements via Multicast an alle Netzwerkteilnehmer. Diese enthalten u. a. Informationen wie die Adresse, das Netzwerkpräfix und das Routing, die dazu dienen, die Default Router List sowie die Prefix List zu erstellen. Anhand dieser Einträge ermitteln Clients dann Standard-Gateway und Subnetzmaske. Da alle Einträge nur über eine begrenzte Gültigkeitsdauer verfügen, bleiben nur aktive Router eingetragen. Die Advertisements der Router können mithilfe von Router Solicitations auch erzwungen werden.
- Wichtige Parameter für die Paketübermittlung ermitteln: Router Advertisements können optional auch Informationen darüber enthalten, welche Parameter die teilnehmenden Clients bei der Übermittlung von Paketen anzuwenden haben. Dabei kann es sich um ganz konkrete Angaben wie die maximale Paketgröße, aber auch um weitgreifende Internetparameter wie das festgeschriebene Limit von Zwischenstationen für ausgehende Pakete handeln.
- Den nächsten Hop feststellen: Soll ein Paket versendet werden, sorgt das NDP-Protokoll dafür, dass überprüft wird, ob der Destination-Cache bereits einen entsprechenden Eintrag für den anvisierten Zielhost enthält. Ist dies nicht der Fall, ermittelt das Protokoll die nächste Zwischenstation anhand der Informationen aus Prefix List und Default Router List. Anschließend wird der neue Kenntnisstand im Destination-Cache gespeichert, wodurch er bei einer erneuten Anfrage sofort verfügbar ist. Existiert für den neu angelegten Eintrag noch kein Äquivalent im Neighbor-Cache, wird dieser automatisch erzeugt und danach auch die Adressauflösung initiiert.
- IP- in MAC-Adresse auflösen: Um die MAC-Adresse eines bestimmten Hosts im Netzwerk zu ermitteln, erhält dieser eine Neighbor Solicitation per IPv6-Multicast an seine eigene, ganz spezifische Multicast-Adresse. Auf diese einzigartige Adresskombination kann ausschließlich der Host antworten. Er verschickt als Antwort eine Neighbor-Advertisement-Nachricht mit der MAC-Adresse, die vom Ausgangsclient im Neighbor-Cache gespeichert wird. Das Neighbor Discovery Protocol wird auf diese Weise sowohl genutzt, um Nachbarn zu identifizieren, als auch, um Router zu bestimmen.
- Nichterreichbarkeit eines Nachbarn erkennen: Alle MAC-Adressen, die im Neighbor-Cache gespeichert sind, müssen regelmäßig auf ihre Aktualität geprüft werden. Solange von einer eingetragenen Adresse TCP/IP-Daten bzw. -Empfangsbestätigungen gesendet werden, gilt diese logischerweise als aktiv und der sich dahinter verbergende Host als erreichbar. Hat seit längerer Zeit kein Datenaustausch mit dem betreffenden Gerät stattgefunden und ist die Gültigkeitsdauer des Eintrags abgelaufen, wird dieser als veraltet markiert. Um nun zu überprüfen, ob der jeweilige Host tatsächlich nicht mehr erreichbar ist, wird zunächst ein gewöhnliches Datenpaket an die eingetragene Adresse geschickt. Bleibt eine Antwort aus, wird ein letzter Test via Unicast-Neighbor-Solicitation gestartet. Bestätigt dieser die Nichterreichbarkeit, verschwindet der Eintrag aus dem Neighbor-Cache.
- Doppelte Adressen erkennen: Hat sich ein Gerät per Autokonfiguration eine Adresse geholt, stuft NDP diese zunächst als „tentative“ (dt. „vorläufig“) ein. Bevor die Adresse endgültig aktiv wird, muss sie nämlich zunächst als eindeutig eingestuft werden. Zu diesem Zweck sendet der neu verbundene Netzwerkclient eine Neighbor Solicitation an die vorläufige Adresse, die er selbst nutzen möchte – mit vorübergehend unspezifischer Absenderadresse. Nutzt ein anderer Host die Adresse bereits, antwortet er mit einer Neighbor-Advertisement-Nachricht an die allgemeine Multicast-Adresse. So erhält diese auch der prüfende Client, woraufhin er eine neue Adresse bezieht.
- Über Redirect-Optionen informieren: Das Neighbor Discovery Protocol gibt Routern mit der Redirect-Nachricht die Möglichkeit, den Weg von Datenpaketen zu den angestrebten Zielhosts zu optimieren. Wie oben bereits aufgeführt, können diese mithilfe des ICMPv6-Typs 137 Empfehlungen für besser geeignete Zwischenstationen aussprechen, die im Destination-Cache aufgenommen werden.
So inspizieren Sie den Neighbor-Cache auf Ihrem System
Egal, ob Windows, macOS, Linux, iOS oder Android – moderne Betriebssysteme unterstützten IPv6 und sind damit auch in der Lage, in Ethernet-basierten Netzwerken auf die Möglichkeiten von NDP zurückzugreifen. Mithilfe des entsprechenden Befehls können Sie über die jeweilige Kommandozeile jederzeit den Neighbor-Cache aufrufen, der für Ihr Gerät erstellt worden ist.
Unter Windows listen Sie Ihre Netzwerknachbarn beispielsweise mithilfe des Programms netsh (network shell) und dem folgenden Kommando auf:
netsh interface ipv6 show neighbors
Mit den meisten Linux-Distributionen gelingt die Einsicht in den Neighbor-Cache mithilfe des Tools iproute2 und diesem Befehl:
ip -6 neigh
Unter macOS und anderen BSD-basierten Distributionen rufen Sie die Cache-Einträge folgendermaßen auf:
ndp -a