IPv6/Neighbor Discovery Protocol: Unterschied zwischen den Versionen

Aus Foxwiki
Keine Bearbeitungszusammenfassung
 
(122 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Neighbor Discovery Protocol''' ('''NDP''') ist der Ersatz für das [[Address Resolution Protocol]] (ARP) des [[IPv4]]-Protokollstacks bei dessen Nachfolger [[IPv6]].
'''N'''eighbor '''D'''iscovery '''P'''rotocol ('''NDP''') - [[Address Resolution]] mit [[IPv6]]
 
'''topic''' - Kurzbeschreibung
== Beschreibung ==
== Beschreibung ==
Nachfolger des [[Address Resolution Protocol]] (ARP) bei [[IPv6]]


<noinclude>
; [[IPv6/Adresse]]n in [[MAC-Adresse|Link-Layer-Adressen]] auflösen
== Anhang ==
* Familie [[Internetprotokolle]]
=== Siehe auch ===
* Einsatzfeld Netzwerkadressenzuordnung
{{Special:PrefixIndex/IPv6}}
* aufbauend auf [[Netzzugangsschicht]]
 
==== Sicherheit ====
==== Dokumentation ====
===== RFC =====
===== Man-Pages =====
===== Info-Pages =====
==== Links ====
===== Projekt =====
===== Weblinks =====
 
= TMP =
== Beschreibung ==
Es wird unter anderem dazu benutzt, [[IPv6-Adresse]]n in [[MAC-Adresse|Link-Layer-Adressen]] aufzulösen.
* Familie=[[Internetprotokollfamilie]]
* Einsatzfeld=Netzwerkadressenzuordnung
* aufbauend auf=[[Netzzugangsschicht]]
* Standard=RFC 3122, RFC 4861


; Verwendung
; Verwendung
NDP wird von den am IPv6-Netzwerk beteiligten Knoten benutzt, um die Link-Layer-Adresse von anderen am selben Netzwerk hängenden Knoten ausfindig zu machen und zum Aktualisieren der gecachten Adressen.
[[NDP]] wird von den am IPv6-Netzwerk beteiligten Knoten benutzt, um die Link-Layer-Adresse von anderen am selben Netzwerk hängenden Knoten ausfindig zu machen und zum Aktualisieren der gecachten Adressen
* Für alle nicht am selben Netzwerk hängenden Knoten wird NDP benutzt, um einen/den [[Router]] zu finden, der die [[Datenpaket|Pakete]] weiterleiten kann.
* Für alle nicht am selben Netzwerk hängenden Knoten wird NDP benutzt, um einen/den [[Router]] zu finden, der die [[Datenpaket|Pakete]] weiterleiten kann


== Funktionsweise ==
=== Funktionsweise ===
Für NDP muss der Knoten für jedes [[Netzwerkschnittstelle|Interface]] folgende Informationen verwalten:
; NDP-Knoten verwalten für jedes [[Netzwerkschnittstelle|Interface]] folgende Informationen


Im ''Neighbor [[Cache]]'' werden Adressen verwaltet, an die etwas gesendet wurde und die sich im selben Netzwerk befinden.
{| class="wikitable big options"
* Zu jedem Eintrag einer IPv6-Adresse steht ihre Link-Layer-Adresse.
|-
* Auch weitere Informationen werden hier verwaltet, wie zum Beispiel Pointer auf Pakete, die auf die Adressauflösung warten, Informationen für die Erreichbarkeitsprüfung oder ob es ein Router ist.
! Information !! Beschreibung
 
|-
Im ''Destination Cache'' werden Adressen verwaltet, an die etwas gesendet wurde.
| [[Neighbor Cache]] || Adressen, an die etwas gesendet wurde und die sich im selben Netzwerk befinden
* Für jeden Eintrag wird, per Link auf den ''Neighbor Cache'', gespeichert, welches der nächste Hop ist, den ein Paket nehmen soll.
* Zu jedem Eintrag einer IPv6-Adresse steht ihre Link-Layer-Adresse
 
* Auch weitere Informationen werden hier verwaltet, wie zum Beispiel Pointer auf Pakete, die auf die Adressauflösung warten, Informationen für die Erreichbarkeitsprüfung oder ob es ein Router ist
In der ''Prefix List'' werden die Präfixe verwaltet, die auf demselben Netz gültig sind.
* Jeder Eintrag, außer der zur link-lokalen Adresse, hat ein Ablaufdatum.
* Somit bleiben nur Netze in der Liste, die von einem Router verkündet werden.
 
In der ''Default Router List'' werden alle Router verwaltet, die für das Interface bekannt sind.
* Die Einträge verweisen auf Einträge im ''Neighbor Cache''.
* Zusätzlich haben sie ein Ablaufdatum, sodass alte Router verschwinden und nur die erhalten bleiben, die ihre Anwesenheit verkünden.
 
Die Informationen zum Erstellen dieser Listen werden per ICMPv6 ([[Internet Control Message Protocol V6]]) ausgetauscht.
* NDP definiert zu diesem Zweck fünf ICMPv6-Typen.
 
=== Router- und Präfix-Ermittlung ===
Router versenden in gewissen Zeitabständen ''Router-Advertisement''-Nachrichten per [[Multicast]].
* Die Informationen in diesen Nachrichten werden verwendet, um die ''Default Router List'' und die ''Prefix List'' zu erstellen.
* Nach Ablauf der angegebenen Lebenszeit werden die Einträge wieder aus den Listen gelöscht.
* Dadurch bleiben nur Router eingetragen, die aktiv sind und ihre Anwesenheit periodisch kundtun.
 
Um nicht auf das nächste geplante ''Router Advertisement'' warten zu müssen, kann ein Knoten per ''Router-Solicitation''-Nachricht an die Router-Multicast-Adresse ein ''Router Advertisement'' erzwingen.
* Dies ist besonders beim Aktivieren eines neuen Interfaces von Vorteil, um mit der Konfiguration nicht warten zu müssen.
 
=== Parameterermittlung ===
Mit diesem Mechanismus ermitteln Knoten relevante Parameter für den Link (z.&nbsp;B. die für den Link verwendete [[Maximum Transmission Unit|MTU]]), an dem sie angeschlossen sind, oder Internet Parameter (wie zum Beispiel den Wert für den [[Time to Live|Hop Limit]]), die für ausgehende Pakete verwendet werden müssen.
 
=== Adress-Autokonfiguration ===
Mit diesem Verfahren konfigurieren Netzknoten IPv6-Adressen für ihre Interfaces ohne einen [[Dynamic Host Configuration Protocol|DHCP]]-Dienst zu nutzen.
 
=== Bestimmung des nächsten Hops ===
Wenn ein Paket versendet werden soll, wird im ''Destination Cache'' nachgeschaut, ob für dieses Ziel schon ein Eintrag vorhanden ist.
* Wenn kein Eintrag existiert, wird anhand der ''Prefix List'' und der ''Default Router List'' der nächste Hop für das Paket ermittelt.
* Diese Information wird dann im ''Destination Cache'' gespeichert, um dies nicht jedes Mal ermitteln zu müssen.
 
Wenn der neue Eintrag auf einen nichtvorhandenen Eintrag im ''Neighbor Cache'' zeigt, wird dieser ebenfalls erzeugt, als unfertig markiert und die ''Adressauflösung'' (engl. ''Address resolution'') angestoßen.
* Das Paket wird in die Queue gestellt und im ''Neighbor Cache'' ein Pointer darauf gesetzt.
 
=== Adressauflösung {{Anker|adressaufloesung}} ===
Um die Link-Layer-Adresse eines Knotens zu ermitteln, wird eine ''Neighbor-Solicitation''-Nachricht per IPv6-Multicast an die sog. ''Solicited Nodes''-Adresse des Ziels versendet.
* Anzumerken ist, dass auf Link-Layer-Ebene ebenfalls Multicast genutzt wird – jeder IPv6-Knoten muss also auf Link-Layer-Ebene nicht nur auf seine originäre feste MAC-Adresse (z.&nbsp;B. [[Ethernet]]) hören, sondern auch auf eine spezifische Multicast-Adresse, die auf seiner IPv6-Adresse beruht.
* Im ''Neighbor-Solicitation''-Paket ist dann die vollständige gesuchte IPv6-Adresse in den Nutzdaten enthalten, und nur der Knoten mit der gleichen Adresse antwortet darauf.
* Er verschickt eine ''Neighbor-Advertisement''-Nachricht.
* Die darin enthaltenen Informationen werden im ''Neighbor Cache'' gespeichert.
* Wenn ein Eintrag noch unfertig war, kann er nun als erreichbar markiert werden und die Pakete, auf die er verweist, können ausgelöst werden.
 
Beispiel: Ein IPv6-Host in einem Ethernet-Netzwerk mit einer MAC-Adresse 00:1d:e0:2a:42:42 bekommt über [[EUI-64]] eine link-lokale IPv6-Adresse fe80::021d:e0ff:fe'''2a:4242'''.
* Die zugehörige Solicitated Node Multicast Adresse, an welche Neighbor-Solicitation-Paket auf IPv6-Ebene versendet werden, lautet FF02::1:FF'''2a:4242'''<ref>{{Internetquelle |autor=Robert M.
* Hinden <hinden@ipsilon.com> |url=https://tools.ietf.org/html/rfc2373#section-2.7.1 |titel=IP Version 6 Addressing Architecture |zugriff=2018-08-12 |sprache=en}}</ref>.
* Der Host hört auf der Link-Layer-Ebene nicht nur auf seine MAC-Adresse 00:1d:e0:'''2a:42:42''', sondern auch auf die (der Solicitated Node Multicast Adresse zugeordneten) Ethernet-Multicast-Adresse 33:33:'''ff:2a:42:42'''. 33:33 ist dabei der Teil, der ein IPv6 Multicast-Paket im Ethernet kennzeichnet, '''ff:2a:42:42''' identifiziert die eigentliche Gruppe ([[Multicast]])<ref>{{Internetquelle |autor=Matt Crawford <crawdad@fnal.gov> |url=https://tools.ietf.org/html/rfc2464#section-7 |titel=Transmission of IPv6 Packets over Ethernet Networks |zugriff=2018-08-12 |sprache=en}}</ref>.
 
=== Erkennung der Nichterreichbarkeit des Nachbarn ===
Um den ''Neighbor Cache'' aktuell zu halten, wird versucht herauszufinden, ob die Einträge darin noch aktuell sind.
* Es gibt dabei verschiedene Wege festzustellen, ob ein Knoten nicht aktiv ist.
* Solange man [[Transmission Control Protocol|TCP]]-Daten oder TCP-Empfangsbestätigungen erhält, weiß man, dass der Knoten noch erreichbar ist.
 
Wenn ein Eintrag seine Lebenszeit überschreitet, ohne durch Verkehr bestätigt zu werden, wird er als veraltet markiert.
* Sobald ein Paket versendet werden will, wird der Eintrag als verzögert markiert und für kurze Zeit versucht, ihn durch Verkehr zu bestätigen.
* Wenn dies nicht passiert, wird erneut eine ''Neighbor-Solicitation''-Nachricht gesendet, um den Knoten aktiv zu testen.
* Wenn er nicht antwortet, wird er aus dem ''Neighbor Cache'' gelöscht.
 
=== Erkennung doppelter Adressen ===
Mit diesem Verfahren ermitteln Netzknoten, ob die Adresse, die sie sich bei der Autokonfiguration gegeben haben, eindeutig ist.
 
=== Umleitung ===
''Redirect''-Nachrichten werden vom Router verschickt, um andere Knoten über einen besseren ersten Hop für eine Zieladresse zu informieren.
* Beim Empfangen einer solchen Nachricht wird der ''Destination Cache'' aktualisiert.
* Wenn kein passender Eintrag im ''Destination Cache'' gefunden wird, wird ein neuer erstellt.
 
== ICMPv6-Typen ==
=== Router Solicitation – Type 133 ===
 
{| class="wikitable float-right" style="font-size:smaller; text-align:center;"
|+ Router-Solicitation-Schema
{{FrameHeader}}
|-
|-
! class="hintergrundfarbe6"| 0
| [[Destination Cache]] || Adressen, an die etwas gesendet wurde
| colspan="8" | Type
* Für jeden Eintrag wird, per Link auf den ''Neighbor Cache'', gespeichert, welches der nächste Hop ist, den ein Paket nehmen soll
| colspan="8" | Code
| colspan="16" | Prüfsumme
|-
|-
! class="hintergrundfarbe6"| 32
| [[Prefix List]] || Präfixe, die auf demselben Netz gültig sind
| colspan="32" | Reserviert
* Jeder Eintrag, außer der zur link-lokalen Adresse, hat ein Ablaufdatum
* Somit bleiben nur Netze in der Liste, die von einem Router verkündet werden
|-
|-
! class="hintergrundfarbe6"|
| [[Default Router List]] || Router, die für das Interface bekannt sind
| colspan="32" | Optionen
* Einträge verweisen auf Einträge im ''Neighbor Cache''
* Zusätzlich haben sie ein Ablaufdatum, sodass alte Router verschwinden und nur die erhalten bleiben, die ihre Anwesenheit verkünden
|}
|}


Per ''Router Solicitation'' an die Router-Multicast-Adresse werden alle Router im selben Netz aufgefordert, sich zu melden.
; Die Informationen zum Erstellen dieser Listen werden per [[ICMPv6]] (Internet Control Message Protocol Version 6) ausgetauscht
 
Der Code dieser Nachricht ist immer 0.
* Das Feld „Reserviert“ muss vom Sender mit Nullen initialisiert werden und der Empfänger muss es ignorieren.
 
Die einzig mögliche Option ist die Link-Layer-Adresse des Senders.
* Um bei Protokollerweiterungen keine Probleme zu bekommen, müssen alle unbekannten Optionen ignoriert werden.
<div style="clear:both;"></div>


=== Router Advertisement – Type 134 ===
== Funktionen ==
 
{| class="wikitable options big"
{| class="wikitable float-right" style="font-size:smaller; text-align:center;"
|+ Router-Advertisement-Schema
{{FrameHeader}}
|-
|-
! class="hintergrundfarbe6"| 0
! Funktion !! Beschreibung
| colspan="8" | Type
| colspan="8" | Code
| colspan="16" | Prüfsumme
|-
|-
! class="hintergrundfarbe6"| 32
| [[#Router- und Präfix-Ermittlung|Router- und Präfix-Ermittlung]] ||  
| colspan="8" | Hop-Limit
| colspan="1" | M
| colspan="1" | O
| colspan="1" | HA
| colspan="2" | Pref
| colspan="1" | Proxy
| colspan="2" | reserved
| colspan="16" | Router-Lifetime
|-
|-
! class="hintergrundfarbe6"| 64
| [[#Parameterermittlung|Parameterermittlung]] ||  
| colspan="32" | Erreichbarkeits-Timeout
|-
|-
! class="hintergrundfarbe6"| 96
| [[#Adress-Autokonfiguration|Adress-Autokonfiguration]] ||  
| colspan="32" | Auflösungs-Timeout
|-
|-
! class="hintergrundfarbe6"|
| [[#Bestimmung des nächsten Hops|Bestimmung des nächsten Hops]] ||  
| colspan="32" | Optionen
|}
 
Per ''Router Advertisement'' verkünden Router ihre Anwesenheit im Netz.
* Entweder auf Anfrage per ''Router Solicitation'' oder periodisch, um nicht vergessen zu werden.
 
Das Hop-Limit ist ein 8-Bit-Wert, der die vom Router vorgeschlagene Standard-Hop-Limits enthält.
 
Es folgen 8 Flags:
Ein gesetztes '''M'''-Bit sagt dem Knoten, dass er neben Autokonfiguration für die IP-Adresse auch Stateful-Autokonfiguration verwenden soll.
 
Ein gesetztes '''O'''-Bit sagt dem Knoten, dass er neben Autokonfiguration für alle Nicht-IP-Adress-Informationen auch Stateful-Autokonfiguration verwenden soll.
 
'''HA''' signalisiert, ob ein Home Agent (für mobile Erreichbarkeit) aktiv ist.
 
'''Pref''' ermöglicht es, bei mehreren Routern im Netz Präferenzen zu setzen.
 
'''Proxy''' signalisiert, ob ein Proxy verwendet wird.
 
Die ''Router-Lifetime'' ist ein 16-Bit-Integer, der angibt, wie viele Sekunden ein Router in der ''Default Router List'' bleiben soll.
* Das theoretische Maximum sind 18,2 Stunden (= 65.536 Sekunden = <math>2^{16}</math> Sekunden).
* RFC4861 begrenzt den Maximalwert auf 9000 Sekunden d.&nbsp;h. auf 2,5 Stunden.
* Ein Wert von 0 besagt, dass der Router kein Default Router ist und nicht in die ''Default Router List'' eingetragen werden soll.
 
Das ''Erreichbarkeits-Timeout'' ist ein 32-Bit-Integer, der angibt, wie viele Millisekunden ein Eintrag im ''Neighbor Cache'' nach dem Empfangen von Daten noch als erreichbar gelten soll.
* Das ''Auflösungs-Timeout'' ist ein 32-Bit-Integer, der angibt, nach wie vielen Millisekunden erneut ein ''Neighbor Solicitation'' gesendet werden soll.
 
Gültige Optionen sind die Link-Layer-Adresse des Senders, die MTU des Routers und alle gültigen Präfixe.
* Um problemfreie Protokollerweiterungen zu ermöglichen, müssen alle unbekannten Optionen ignoriert werden.
<div style="clear:both;"></div>
 
=== Neighbor Solicitation – Type 135 ===
{| class="wikitable float-right" style="font-size:smaller; text-align:center;"
|+ Neighbor-Solicitation-Schema
{{FrameHeader}}
|-
! class="hintergrundfarbe6"| 0
| colspan="8" | Type
| colspan="8" | Code
| colspan="16" | Prüfsumme
|-
! class="hintergrundfarbe6"| 32
| colspan="32" | Reserviert
|-
|-
! class="hintergrundfarbe6"| 64
| [[#Adressauflösung|Adressauflösung]] ||  
| colspan="32" rowspan="4" | Zieladresse
|-
|-
! class="hintergrundfarbe6"| 96
| [[#Erkennung der Nichterreichbarkeit des Nachbarn|Erkennung der Nichterreichbarkeit des Nachbarn]] ||
|-
|-
! class="hintergrundfarbe6"| 128
| [[#Erkennung doppelter Adressen|Erkennung doppelter Adressen]] ||
|-
|-
! class="hintergrundfarbe6"| 160
| [[#Umleitung|Umleitung]] ||  
|-
! class="hintergrundfarbe6"|
| colspan="32" | Optionen
|}
|}


Per ''Neighbor Solicitation'' (so viel wie ''Nachbar Anfrage'') an die Link-Layer-Multicast-Adresse einer IPv6-Adresse wird diese Adresse zu einer Link-Layer-Adresse aufgelöst.
=== ICMPv6-Typen ===
* Die zu verwendende Link-Layer-Multicast-Adresse wird dabei wie oben unter [[#adressaufloesung|Adressauflösung]] beschrieben aus der IPv6-Adresse des Zielknotens berechnet.
{| class="wikitable big options col1center"
* Ebenfalls wird so die Erreichbarkeit eines Knotens geprüft.
|+ NDP ICMPv6-Typen
 
Der Typ wird auf 135 gesetzt und der Code auf 0.
* Das reservierte Feld muss vom Sender mit Nullen initialisiert und vom Empfänger ignoriert werden.
* Die Zieladresse ist die IPv6-Adresse, die in eine Link-Layer-Adresse aufgelöst werden soll.
* Es darf keine Multicast-Adresse angegeben werden.
 
Die einzig mögliche Option ist die Link-Layer-Adresse des Senders.
* Um bei Protokollerweiterungen keine Probleme zu bekommen, müssen alle unbekannten Optionen ignoriert werden.
<div style="clear:both;"></div>
 
=== Neighbor Advertisement – Type 136 ===
{| class="wikitable float-right" style="font-size:smaller; text-align:center;"
|+ Neighbor-Advertisement-Schema
{{FrameHeader}}
|-
! class="hintergrundfarbe6"| 0
| colspan="8" | Type
| colspan="8" | Code
| colspan="16" | Prüfsumme
|-
|-
! class="hintergrundfarbe6"| 32
! Type !! Bezeichnung
| colspan="1" | R
| colspan="1" | S
| colspan="1" | O
| colspan="5" | Reserviert
| colspan="24" | Reserviert
|-
|-
! class="hintergrundfarbe6"| 64
| 133 || [[Router Solicitation|Router Solicitation]]
| colspan="32" rowspan="4" | Zieladresse
|-
|-
! class="hintergrundfarbe6"| 96
| 134 || [[Router Advertisement|Router Advertisement]]
|-
|-
! class="hintergrundfarbe6"| 128
| 135 || [[Neighbor Solicitation|Neighbor Solicitation]]
|-
|-
! class="hintergrundfarbe6"| 160
| 136 || [[Neighbor Advertisement|Neighbor Advertisement]]
|-
|-
! class="hintergrundfarbe6"|
| 137 || [[Redirect|Redirect]]
| colspan="32" | Optionen
|}
|}


Mit einer ''Neighbor-Advertisement''-Nachricht wird auf ''Neighbor-Solicitation''-Nachrichten geantwortet.
=== Router- und Präfix-Ermittlung ===
; Router versenden in gewissen Zeitabständen ''Router-Advertisement''-Nachrichten per [[IPv6/Host/Multicast|Multicast]]
* Die Informationen in diesen Nachrichten werden verwendet, um die ''Default Router List'' und die ''Prefix List'' zu erstellen
* Nach Ablauf der angegebenen Lebenszeit werden die Einträge wieder aus den Listen gelöscht
* Dadurch bleiben nur Router eingetragen, die aktiv sind und ihre Anwesenheit periodisch kundtun
 
Um nicht auf das nächste geplante ''Router Advertisement'' warten zu müssen, kann ein Knoten per ''Router-Solicitation''-Nachricht an die Router-Multicast-Adresse ein ''Router Advertisement'' erzwingen
* Dies ist besonders beim Aktivieren eines neuen Interfaces von Vorteil, um mit der Konfiguration nicht warten zu müssen
 
=== Parameterermittlung ===
Mit diesem Mechanismus ermitteln Knoten relevante Parameter für den Link (z.&nbsp;B.&nbsp;die für den Link verwendete [[Maximum Transmission Unit|MTU]]), an dem sie angeschlossen sind, oder Internet Parameter (wie zum Beispiel den Wert für den [[Time to Live|Hop Limit]]), die für ausgehende Pakete verwendet werden müssen


Der Typ wird auf 136 gesetzt und der Code auf 0.
=== Adress-Autokonfiguration ===
* Das '''R'''-Bit wird gesetzt, wenn der Knoten ein Router ist.
Mit diesem Verfahren konfigurieren Netzknoten IPv6-Adressen für ihre Interfaces ohne einen [[Dynamic Host Configuration Protocol|DHCP]]-Dienst zu nutzen
* Das '''S'''-Bit wird gesetzt, wenn das ''Neighbor Advertisement'' aufgrund einer Unicast-''Neighbor-Solicitation''-Nachricht gesendet wird.
* Ein gesetztes '''O'''-Bit bedeutet, dass der Eintrag im ''Neighbor Cache'' aktualisiert werden muss.
* Das reservierte Feld muss vom Sender mit Nullen initialisiert werden und vom Empfänger ignoriert werden.


Als Zieladresse wird die (IPv6-)Zieladresse aus der dazugehörigen ''Neighbor-Solicitation''-Nachricht eingetragen oder die (IPv6-)Adresse für die eine neue Link-Layer-Adresse bekanntgegeben werden soll.
=== Bestimmung des nächsten Hops ===
; Wenn ein Paket versendet werden soll, wird im ''Destination Cache'' nachgeschaut, ob für dieses Ziel schon ein Eintrag vorhanden ist
* Wenn kein Eintrag existiert, wird anhand der ''Prefix List'' und der ''Default Router List'' der nächste Hop für das Paket ermittelt
* Diese Information wird dann im ''Destination Cache'' gespeichert, um dies nicht jedes Mal ermitteln zu müssen


Die einzig mögliche Option ist die Link-Layer-Adresse des Senders.  
; Wenn der neue Eintrag auf einen nichtvorhandenen Eintrag im ''Neighbor Cache'' zeigt, wird dieser ebenfalls erzeugt, als unfertig markiert und die ''Adressauflösung'' (engl. ''Address resolution'') angestoßen
* Um bei Protokollerweiterungen keine Probleme zu bekommen, müssen alle unbekannten Optionen ignoriert werden.
* Das Paket wird in die Queue gestellt und im ''Neighbor Cache'' ein Pointer darauf gesetzt
<div style="clear:both;"></div>


=== Redirect – Type 137 ===
=== Adressauflösung ===
; Um die Link-Layer-Adresse eines Knotens zu ermitteln, wird eine ''Neighbor-Solicitation''-Nachricht per IPv6-Multicast an die sog. ''Solicited Nodes''-Adresse des Ziels versendet
* Anzumerken ist, dass auf Link-Layer-Ebene ebenfalls Multicast genutzt wird – jeder IPv6-Knoten muss also auf Link-Layer-Ebene nicht nur auf seine originäre feste MAC-Adresse (z.&nbsp;B.&nbsp;[[Ethernet]]) hören, sondern auch auf eine spezifische Multicast-Adresse, die auf seiner IPv6-Adresse beruht
* Im ''Neighbor-Solicitation''-Paket ist dann die vollständige gesuchte IPv6-Adresse in den Nutzdaten enthalten, und nur der Knoten mit der gleichen Adresse antwortet darauf
* Er verschickt eine ''Neighbor-Advertisement''-Nachricht
* Die darin enthaltenen Informationen werden im ''Neighbor Cache'' gespeichert
* Wenn ein Eintrag noch unfertig war, kann er nun als erreichbar markiert werden und die Pakete, auf die er verweist, können ausgelöst werden


{| class="wikitable float-right" style="font-size:smaller; text-align:center;"
;Beispiel
|+ Redirect-Schema
Ein IPv6-Host in einem Ethernet-Netzwerk mit einer MAC-Adresse 00:1d:e0:2a:42:42 bekommt über [[EUI-64]] eine link-lokale IPv6-Adresse fe80::021d:e0ff:fe'''2a:4242'''
{{FrameHeader}}
* Die zugehörige Solicitated Node Multicast Adresse, an welche Neighbor-Solicitation-Paket auf IPv6-Ebene versendet werden, lautet FF02::1:FF'''2a:4242'''
|-
* Der Host hört auf der Link-Layer-Ebene nicht nur auf seine MAC-Adresse 00:1d:e0:'''2a:42:42''', sondern auch auf die (der Solicitated Node Multicast Adresse zugeordneten) Ethernet-Multicast-Adresse 33:33:'''ff:2a:42:42'''. 33:33 ist dabei der Teil, der ein IPv6 Multicast-Paket im Ethernet kennzeichnet, '''ff:2a:42:42''' identifiziert die eigentliche Gruppe ([[Multicast]])
! class="hintergrundfarbe6"| 0
| colspan="8" | Type
| colspan="8" | Code
| colspan="16" | Prüfsumme
|-
! class="hintergrundfarbe6"| 32
| colspan="32" | Reserviert
|-
! class="hintergrundfarbe6"| 64
| colspan="32" rowspan="4" | Hop-Adresse
|-
! class="hintergrundfarbe6"| 96
|-
! class="hintergrundfarbe6"| 128
|-
! class="hintergrundfarbe6"| 160
|-
! class="hintergrundfarbe6"| 192
| colspan="32" rowspan="4" | Zieladresse
|-
! class="hintergrundfarbe6"| 224
|-
! class="hintergrundfarbe6"| 256
|-
! class="hintergrundfarbe6"| 288
|-
! class="hintergrundfarbe6"| …
| colspan="32" | Optionen
|}


Per ''Redirect''-Nachricht teilen Router mit, wenn es einen besseren ersten Hop für ein gewisses Ziel gibt.
=== Erkennung der Nichterreichbarkeit des Nachbarn ===
; Um den ''Neighbor Cache'' aktuell zu halten, wird versucht herauszufinden, ob die Einträge darin noch aktuell sind
* Es gibt dabei verschiedene Wege festzustellen, ob ein Knoten nicht aktiv ist
* Solange man [[Transmission Control Protocol|TCP]]-Daten oder TCP-Empfangsbestätigungen erhält, weiß man, dass der Knoten noch erreichbar ist


Der Typ wird auf 137 gesetzt und der Code auf 0.
; Wenn ein Eintrag seine Lebenszeit überschreitet, ohne durch Verkehr bestätigt zu werden, wird er als veraltet markiert
* Das reservierte Feld muss vom Sender mit Nullen initialisiert werden und vom Empfänger ignoriert werden.
* Sobald ein Paket versendet werden will, wird der Eintrag als verzögert markiert und für kurze Zeit versucht, ihn durch Verkehr zu bestätigen
* Die Hop-Adresse ist der zu bevorzugende Router für die Adresse.
* Wenn dies nicht passiert, wird erneut eine ''Neighbor-Solicitation''-Nachricht gesendet, um den Knoten aktiv zu testen
* Die Zieladresse ist die Adresse für die es einen besseren First-Hop gibt.
* Wenn er nicht antwortet, wird er aus dem ''Neighbor Cache'' gelöscht


Die einzigen möglichen Optionen sind die Link-Layer-Adresse des Senders und der Header des auslösenden Paketes.
=== Erkennung doppelter Adressen ===
* Um bei Protokollerweiterungen keine Probleme zu bekommen, müssen alle unbekannten Optionen ignoriert werden.
; Mit diesem Verfahren ermitteln Netzknoten, ob die Adresse, die sie sich bei der Autokonfiguration gegeben haben, eindeutig ist
<div style="clear:both;"></div>


=== Umleitung ===
; ''Redirect''-Nachrichten werden vom Router verschickt, um andere Knoten über einen besseren ersten Hop für eine Zieladresse zu informieren
* Beim Empfangen einer solchen Nachricht wird der ''Destination Cache'' aktualisiert
* Wenn kein passender Eintrag im ''Destination Cache'' gefunden wird, wird ein neuer erstellt


== Anwendungen ==
== Anwendungen ==
=== Implementierung in Betriebssystemen ===
; Implementierungen
Alle IPv6-fähigen Betriebssysteme, die in Ethernet-basierten Netzwerken betrieben werden, sind in der Lage, mittels NDP Adressen aufzulösen.
Alle IPv6-fähigen Betriebssysteme, die in Ethernet-basierten Netzwerken betrieben werden, sind in der Lage, mittels NDP Adressen aufzulösen


Unter den meisten [[Linux-Distribution]]en erhält man mit dem [[iproute2]]-Werkzeug Einsicht in den Neighbor Cache:
=== Linux ===
Unter den meisten [[Linux-Distribution]]en erhält man mit dem [[iproute2]]-Werkzeug Einsicht in den Neighbor Cache


  # ip -6 neigh
  # '''ip -6 neigh'''
  2001:470:1f0b:2f2:5cad:a77f:aaff:849 dev wlan0 lladdr 00:11:25:32:10:ab REACHABLE
  2001:470:1f0b:2f2:5cad:a77f:aaff:849 dev wlan0 lladdr 00:11:25:32:10:ab REACHABLE
  fe80::2a10:7bff:fe65:58a dev wlan0 lladdr 28:10:7b:65:ab:cd router REACHABLE
  fe80::2a10:7bff:fe65:58a dev wlan0 lladdr 28:10:7b:65:ab:cd router REACHABLE
  2001:470:1f0b:2f2::cafe dev wlan0 lladdr 00:11:25:32:10:ab REACHABLE
  2001:470:1f0b:2f2::cafe dev wlan0 lladdr 00:11:25:32:10:ab REACHABLE


=== Windows ===
# netsh interface ipv6 show neighbors level=verbose
=== BSD-Unix ===
Auf vielen [[Berkeley Software Distribution|BSD]]-basierten Systemen wie [[FreeBSD]] und [[OpenBSD]] hilft hierbei das Werkzeug ''ndp'', wobei die Optionen '-an' bedeuten, dass ''alle'' Hosts ''numerisch'' angezeigt werden sollen; hier bei FreeBSD 9 (die Kommentare rechts wurden nachträglich eingefügt):
Auf vielen [[Berkeley Software Distribution|BSD]]-basierten Systemen wie [[FreeBSD]] und [[OpenBSD]] hilft hierbei das Werkzeug ''ndp'', wobei die Optionen '-an' bedeuten, dass ''alle'' Hosts ''numerisch'' angezeigt werden sollen; hier bei FreeBSD 9 (die Kommentare rechts wurden nachträglich eingefügt):


  # ndp -an
  # '''ndp -an'''
  Neighbor                             Linklayer Address Netif Expire   S Flags
  Neighbor Linklayer Address Netif Expire S Flags
  2001:475:abcd:2f2:3189:67c1:b550:9400 c6:ab:27:56:b5:30   em0 14s       R R               # <-- Ein anderer Rechner im Netzwerk, mit Privacy Extensions
  2001:475:abcd:2f2:3189:67c1:b550:9400 c6:ab:27:56:b5:30 em0 14s R R # <-- Ein anderer Rechner im Netzwerk, mit Privacy Extensions
  2001:475:abcd:2f2:211:25ff:fe32:10ab 00:11:25:32:10:ab   em0 permanent R
  2001:475:abcd:2f2:211:25ff:fe32:10ab 00:11:25:32:10:ab em0 permanent R
  fe80::211:25ff:fe32:10ab%em0         00:11:25:32:10:ab   em0 permanent R
  fe80::211:25ff:fe32:10ab%em0 00:11:25:32:10:ab em0 permanent R
  2001:475:abcd:2f2::cafe             00:11:25:32:10:ab   em0 permanent R                 # <-- Alias-Adresse
  2001:475:abcd:2f2::cafe 00:11:25:32:10:ab em0 permanent R # <-- Alias-Adresse
  fe80::2a10:7bff:fe65:58a%em0         28:10:7b:65:ab:cd   em0 23h59m25s S R               # <-- Das ist der Router
  fe80::2a10:7bff:fe65:58a%em0 28:10:7b:65:ab:cd em0 23h59m25s S R # <-- Das ist der Router
  2001:475:abcd:2f2:5cad:a77f:aaff:849 00:11:25:32:10:ab   em0 permanent R
  2001:475:abcd:2f2:5cad:a77f:aaff:849 00:11:25:32:10:ab em0 permanent R
  fe80::c6ab:27ff:fe56:b530%em0       c6:ab:27:56:b5:30   em0 24s       R R               # <-- Derselbe Rechner wie in der ersten Zeile mit seiner link-local address
  fe80::c6ab:27ff:fe56:b530%em0 c6:ab:27:56:b5:30 em0 24s R R # <-- Derselbe Rechner wie in der ersten Zeile mit seiner link-local address


Hierbei ist insbesondere die Spalte ''Expire'' zu beachten.
Hierbei ist insbesondere die Spalte ''Expire'' zu beachten
* Sie legt fest, wann ein Namenseintrag als veraltet einzustufen ist.
* Sie legt fest, wann ein Namenseintrag als veraltet einzustufen ist
* Die Adressen des Rechners selbst sind dabei ''permanent'', der Router liegt hier bei fast 24 Stunden und die Nachbargeräte im Netzwerk liegen zumeist bei unter einer Minute, bis der Eintrag wieder aufgefrischt wird.
* Die Adressen des Rechners selbst sind dabei ''permanent'', der Router liegt hier bei fast 24 Stunden und die Nachbargeräte im Netzwerk liegen zumeist bei unter einer Minute, bis der Eintrag wieder aufgefrischt wird


Unter Windows lautet der Befehl:
== Anhang ==
# netsh interface ipv6 show neighbors level=verbose
=== Siehe auch ===
{{Special:PrefixIndex/Neigh}}


== Konfiguration ==
----
=== Dateien ===
== Sicherheit ==
== Dokumentation ==
=== RFC ===
=== Man-Pages ===
=== Info-Pages ===
== Siehe auch ==
== Links ==
=== Projekt ===
=== Weblinks ===
# RFC 4861 – Neighbor Discovery for IP Version 6 (IPv6)
# RFC 3122 – Extensions to IPv6 Neighbor Discovery for Inverse Discovery Specification


=== Einzelnachweise ===
{{Special:PrefixIndex/ndp}}
<references />
== Testfragen ==
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 1''
<div class="mw-collapsible-content">'''Antwort1'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 2''
<div class="mw-collapsible-content">'''Antwort2'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 3''
<div class="mw-collapsible-content">'''Antwort3'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 4''
<div class="mw-collapsible-content">'''Antwort4'''</div>
</div>
<div class="toccolours mw-collapsible mw-collapsed">
''Testfrage 5''
<div class="mw-collapsible-content">'''Antwort5'''</div>
</div>


==== Dokumentation ====
===== RFC =====
{| class="wikitable sortable options"
|-
! RFC !! Titel
|-
| [https://www.rfc-editor.org/rfc/4861 4861] || Neighbor Discovery for IP Version 6 (IPv6)
|-
| [https://www.rfc-editor.org/rfc/3122 3122] || Extensions to IPv6 Neighbor Discovery for Inverse Discovery Specification
|}


==== Links ====
===== Projekt =====
===== Weblinks =====
# https://de.wikipedia.org/wiki/Neighbor_Discovery_Protocol


[[Kategorie:Netzwerk/Protokoll (Sicherungsschicht)]]
[[Kategorie:IPv6/ICMP]]
[[Kategorie:Internet Protocol-Adressierung]]
[[Kategorie:IPv6/NDP]]
[[Kategorie:IPv6]]
[[Kategorie:NDP]]
[[Kategorie:Netzwerk/Adresse]]
</noinclude>
</noinclude>

Aktuelle Version vom 9. November 2024, 11:34 Uhr

Neighbor Discovery Protocol (NDP) - Address Resolution mit IPv6

Beschreibung

Nachfolger des Address Resolution Protocol (ARP) bei IPv6

IPv6/Adressen in Link-Layer-Adressen auflösen
Verwendung

NDP wird von den am IPv6-Netzwerk beteiligten Knoten benutzt, um die Link-Layer-Adresse von anderen am selben Netzwerk hängenden Knoten ausfindig zu machen und zum Aktualisieren der gecachten Adressen

  • Für alle nicht am selben Netzwerk hängenden Knoten wird NDP benutzt, um einen/den Router zu finden, der die Pakete weiterleiten kann

Funktionsweise

NDP-Knoten verwalten für jedes Interface folgende Informationen
Information Beschreibung
Neighbor Cache Adressen, an die etwas gesendet wurde und die sich im selben Netzwerk befinden
  • Zu jedem Eintrag einer IPv6-Adresse steht ihre Link-Layer-Adresse
  • Auch weitere Informationen werden hier verwaltet, wie zum Beispiel Pointer auf Pakete, die auf die Adressauflösung warten, Informationen für die Erreichbarkeitsprüfung oder ob es ein Router ist
Destination Cache Adressen, an die etwas gesendet wurde
  • Für jeden Eintrag wird, per Link auf den Neighbor Cache, gespeichert, welches der nächste Hop ist, den ein Paket nehmen soll
Prefix List Präfixe, die auf demselben Netz gültig sind
  • Jeder Eintrag, außer der zur link-lokalen Adresse, hat ein Ablaufdatum
  • Somit bleiben nur Netze in der Liste, die von einem Router verkündet werden
Default Router List Router, die für das Interface bekannt sind
  • Einträge verweisen auf Einträge im Neighbor Cache
  • Zusätzlich haben sie ein Ablaufdatum, sodass alte Router verschwinden und nur die erhalten bleiben, die ihre Anwesenheit verkünden
Die Informationen zum Erstellen dieser Listen werden per ICMPv6 (Internet Control Message Protocol Version 6) ausgetauscht

Funktionen

Funktion Beschreibung
Router- und Präfix-Ermittlung
Parameterermittlung
Adress-Autokonfiguration
Bestimmung des nächsten Hops
Adressauflösung
Erkennung der Nichterreichbarkeit des Nachbarn
Erkennung doppelter Adressen
Umleitung

ICMPv6-Typen

NDP ICMPv6-Typen
Type Bezeichnung
133 Router Solicitation
134 Router Advertisement
135 Neighbor Solicitation
136 Neighbor Advertisement
137 Redirect

Router- und Präfix-Ermittlung

Router versenden in gewissen Zeitabständen Router-Advertisement-Nachrichten per Multicast
  • Die Informationen in diesen Nachrichten werden verwendet, um die Default Router List und die Prefix List zu erstellen
  • Nach Ablauf der angegebenen Lebenszeit werden die Einträge wieder aus den Listen gelöscht
  • Dadurch bleiben nur Router eingetragen, die aktiv sind und ihre Anwesenheit periodisch kundtun

Um nicht auf das nächste geplante Router Advertisement warten zu müssen, kann ein Knoten per Router-Solicitation-Nachricht an die Router-Multicast-Adresse ein Router Advertisement erzwingen

  • Dies ist besonders beim Aktivieren eines neuen Interfaces von Vorteil, um mit der Konfiguration nicht warten zu müssen

Parameterermittlung

Mit diesem Mechanismus ermitteln Knoten relevante Parameter für den Link (z. B. die für den Link verwendete MTU), an dem sie angeschlossen sind, oder Internet Parameter (wie zum Beispiel den Wert für den Hop Limit), die für ausgehende Pakete verwendet werden müssen

Adress-Autokonfiguration

Mit diesem Verfahren konfigurieren Netzknoten IPv6-Adressen für ihre Interfaces ohne einen DHCP-Dienst zu nutzen

Bestimmung des nächsten Hops

Wenn ein Paket versendet werden soll, wird im Destination Cache nachgeschaut, ob für dieses Ziel schon ein Eintrag vorhanden ist
  • Wenn kein Eintrag existiert, wird anhand der Prefix List und der Default Router List der nächste Hop für das Paket ermittelt
  • Diese Information wird dann im Destination Cache gespeichert, um dies nicht jedes Mal ermitteln zu müssen
Wenn der neue Eintrag auf einen nichtvorhandenen Eintrag im Neighbor Cache zeigt, wird dieser ebenfalls erzeugt, als unfertig markiert und die Adressauflösung (engl. Address resolution) angestoßen
  • Das Paket wird in die Queue gestellt und im Neighbor Cache ein Pointer darauf gesetzt

Adressauflösung

Um die Link-Layer-Adresse eines Knotens zu ermitteln, wird eine Neighbor-Solicitation-Nachricht per IPv6-Multicast an die sog. Solicited Nodes-Adresse des Ziels versendet
  • Anzumerken ist, dass auf Link-Layer-Ebene ebenfalls Multicast genutzt wird – jeder IPv6-Knoten muss also auf Link-Layer-Ebene nicht nur auf seine originäre feste MAC-Adresse (z. B. Ethernet) hören, sondern auch auf eine spezifische Multicast-Adresse, die auf seiner IPv6-Adresse beruht
  • Im Neighbor-Solicitation-Paket ist dann die vollständige gesuchte IPv6-Adresse in den Nutzdaten enthalten, und nur der Knoten mit der gleichen Adresse antwortet darauf
  • Er verschickt eine Neighbor-Advertisement-Nachricht
  • Die darin enthaltenen Informationen werden im Neighbor Cache gespeichert
  • Wenn ein Eintrag noch unfertig war, kann er nun als erreichbar markiert werden und die Pakete, auf die er verweist, können ausgelöst werden
Beispiel

Ein IPv6-Host in einem Ethernet-Netzwerk mit einer MAC-Adresse 00:1d:e0:2a:42:42 bekommt über EUI-64 eine link-lokale IPv6-Adresse fe80::021d:e0ff:fe2a:4242

  • Die zugehörige Solicitated Node Multicast Adresse, an welche Neighbor-Solicitation-Paket auf IPv6-Ebene versendet werden, lautet FF02::1:FF2a:4242
  • Der Host hört auf der Link-Layer-Ebene nicht nur auf seine MAC-Adresse 00:1d:e0:2a:42:42, sondern auch auf die (der Solicitated Node Multicast Adresse zugeordneten) Ethernet-Multicast-Adresse 33:33:ff:2a:42:42. 33:33 ist dabei der Teil, der ein IPv6 Multicast-Paket im Ethernet kennzeichnet, ff:2a:42:42 identifiziert die eigentliche Gruppe (Multicast)

Erkennung der Nichterreichbarkeit des Nachbarn

Um den Neighbor Cache aktuell zu halten, wird versucht herauszufinden, ob die Einträge darin noch aktuell sind
  • Es gibt dabei verschiedene Wege festzustellen, ob ein Knoten nicht aktiv ist
  • Solange man TCP-Daten oder TCP-Empfangsbestätigungen erhält, weiß man, dass der Knoten noch erreichbar ist
Wenn ein Eintrag seine Lebenszeit überschreitet, ohne durch Verkehr bestätigt zu werden, wird er als veraltet markiert
  • Sobald ein Paket versendet werden will, wird der Eintrag als verzögert markiert und für kurze Zeit versucht, ihn durch Verkehr zu bestätigen
  • Wenn dies nicht passiert, wird erneut eine Neighbor-Solicitation-Nachricht gesendet, um den Knoten aktiv zu testen
  • Wenn er nicht antwortet, wird er aus dem Neighbor Cache gelöscht

Erkennung doppelter Adressen

Mit diesem Verfahren ermitteln Netzknoten, ob die Adresse, die sie sich bei der Autokonfiguration gegeben haben, eindeutig ist

Umleitung

Redirect-Nachrichten werden vom Router verschickt, um andere Knoten über einen besseren ersten Hop für eine Zieladresse zu informieren
  • Beim Empfangen einer solchen Nachricht wird der Destination Cache aktualisiert
  • Wenn kein passender Eintrag im Destination Cache gefunden wird, wird ein neuer erstellt

Anwendungen

Implementierungen

Alle IPv6-fähigen Betriebssysteme, die in Ethernet-basierten Netzwerken betrieben werden, sind in der Lage, mittels NDP Adressen aufzulösen

Linux

Unter den meisten Linux-Distributionen erhält man mit dem iproute2-Werkzeug Einsicht in den Neighbor Cache

# ip -6 neigh
2001:470:1f0b:2f2:5cad:a77f:aaff:849 dev wlan0 lladdr 00:11:25:32:10:ab REACHABLE
fe80::2a10:7bff:fe65:58a dev wlan0 lladdr 28:10:7b:65:ab:cd router REACHABLE
2001:470:1f0b:2f2::cafe dev wlan0 lladdr 00:11:25:32:10:ab REACHABLE

Windows

# netsh interface ipv6 show neighbors level=verbose

BSD-Unix

Auf vielen BSD-basierten Systemen wie FreeBSD und OpenBSD hilft hierbei das Werkzeug ndp, wobei die Optionen '-an' bedeuten, dass alle Hosts numerisch angezeigt werden sollen; hier bei FreeBSD 9 (die Kommentare rechts wurden nachträglich eingefügt):

# ndp -an
Neighbor Linklayer Address Netif Expire S Flags
2001:475:abcd:2f2:3189:67c1:b550:9400 c6:ab:27:56:b5:30 em0 14s R R # <-- Ein anderer Rechner im Netzwerk, mit Privacy Extensions
2001:475:abcd:2f2:211:25ff:fe32:10ab 00:11:25:32:10:ab em0 permanent R
fe80::211:25ff:fe32:10ab%em0 00:11:25:32:10:ab em0 permanent R
2001:475:abcd:2f2::cafe 00:11:25:32:10:ab em0 permanent R # <-- Alias-Adresse
fe80::2a10:7bff:fe65:58a%em0 28:10:7b:65:ab:cd em0 23h59m25s S R # <-- Das ist der Router
2001:475:abcd:2f2:5cad:a77f:aaff:849 00:11:25:32:10:ab em0 permanent R
fe80::c6ab:27ff:fe56:b530%em0 c6:ab:27:56:b5:30 em0 24s R R # <-- Derselbe Rechner wie in der ersten Zeile mit seiner link-local address

Hierbei ist insbesondere die Spalte Expire zu beachten

  • Sie legt fest, wann ein Namenseintrag als veraltet einzustufen ist
  • Die Adressen des Rechners selbst sind dabei permanent, der Router liegt hier bei fast 24 Stunden und die Nachbargeräte im Netzwerk liegen zumeist bei unter einer Minute, bis der Eintrag wieder aufgefrischt wird

Anhang

Siehe auch


Dokumentation

RFC
RFC Titel
4861 Neighbor Discovery for IP Version 6 (IPv6)
3122 Extensions to IPv6 Neighbor Discovery for Inverse Discovery Specification

Links

Projekt
Weblinks
  1. https://de.wikipedia.org/wiki/Neighbor_Discovery_Protocol