(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) Zeile 32:
Zeile 32:
== Windows ==
== Windows ==
Wechsel zur Virtuellen Maschine ''windows''
[[ IPv6/Host/ Neighbor Cache/Windows]]
* Terminal öffnen
** zum Beispiel mit der bereits bekannten Methode Windows-Taste+R und cmd
* Um sicherzugehen, dass sich Einträge im Neighbor Cache befinden werden, kommunizieren wir mit einem anderen Node auf dem Link
Echo Request an die Link-local Address von ''linux''
C:\Users\user> '''ping -n3 fe8::2:ff:fe6:d1e%12'''
Pinging fe8::2:ff:fe6:d1e %12 with 32 bytes of data :
Reply from fe8::2:ff:fe6:d1e%12: time <1 ms
Packets : Sent = 3 , Received = 3, Lost = ( % loss ) ,
Sobald eine Antwort eintrifft, können wir den Vorgang abbrechen und den Neighbor Cache ausgeben lassen
C:\Users\user> '''netsh interface'''
Interface 12: LAN1
Internet Address
---------------------------fe8 ::2 : ff : fe6 : d1e
ff 2 ::1
ff 2 ::1: ff6 : d1e
'''ipv6 show neighbors'''
Physical Address
----------------- - -6 - d -1 e
33 -33 - - - - 1
33 -33 - ff -6 - d -1 e
Type
--------Reachable
Permanent
Permanent
Die IPv6-Adresse fe8 ::2 :ff:fe6 :d1e wurde korrekt zur Link-layer Address - - -6 - d-1e aufgelöst
* Der Zustand des Eintrages ist Reachable, das heißt, der zugehörige Node gilt auf dem Link als erreichbar
Nach circa 20 Sekunden lassen wir uns den Neighbor Cache ein weiteres Mal ausgeben:
C:\Users\user> netsh interface
Interface 12: LAN1
Internet Address
---------------------------fe8 ::2 : ff : fe6 : d1e
ff 2 ::1
ff 2 ::1: ff6 : d1e
ipv6 show neighbors
Physical Address
----------------- - -6 - d -1 e
33 -33 - - - - 1
33 -33 - ff -6 - d -1 e
Type
--------Stale
Permanent
Permanent
Der Eintrag für die Adresse fe8 ::2 :ff:fe6 :d1e hat seinen Zustand zwischenzeitlich auf Stale gewechselt
* Die Nachbarn am Link können offensichtlich verschiedene Zustände haben
== Linux ==
== Linux ==
Die Zustände werden wir in einem weiteren Experiment, diesmal von ''linux'' aus, untersuchen
[[IPv6/Host/ Neighbor Cache/ Linux]]
* Wir verschicken Echo Requests an ''router'', werden uns aber bei Eingabe der Adresse im letzten Zeichen vertippen
* Die Echo Requests gehen an die Adresse fe8 ::219:83ff:fe 9:17db
* Den Vorgang brechen wir vorerst nicht ab
user@linux:~ '''ping6 fe8::219:83ff:fe9:17db%eth'''
PING fe8::219:83ff:fe9:17db% eth '
( fe8 ::219:83 ff : fe 9 :17 db ) 56 data bytes
From fe8 ::2 : ff : fe6 : d1e icmp_seq =1 Destination '
unreachable : Address unreachable
48 packets transmitted ,
received , +42 errors , 1 % '
packet loss , time 47182 ms
Während Linux weiter fleißig Echo Requests versendet, öffnen wir ein zweites Terminal und schauen in diesem auf den Neighbor Cache
* Unter Linux steht uns dafür das Kommando ip neighbor show zur Verfügung
user@linux:~ '''ip neighbor show'''
fe8::219:83ff:fe9:17 db dev eth INCOMPLETE
Wir lernen mit Incomplete einen weiteren Zustand kennen
Nun brechen wir das Senden der Echo Requests im ersten Terminal ab, wechseln zügig in das zweite Terminal und lassen uns erneut den Neighbor Cache ausgeben
user@linux:~ '''ip neighbor show'''
fe8::219:83ff:fe9:17 db dev eth FAILED
Sofern wir uns nicht zu viel Zeit gelassen haben, sehen wir noch den Zustand Failed bevor der Eintrag aus dem Neighbor Cache verschwindet
* ''Failed'' ist kein Zustand, den man in [[RFC/4861|RFC 4861]] findet, sondern soll verdeutlichen, dass die Auflösung der Adresse nicht erfolgreich beendet werden konnte
== Zustände der Einträge ==
== Zustände der Einträge ==
IPv6 Neighbor Cache
Beschreibung
Nodes am internen Link
Neighbor Discovery Protocol (NDP)
Über die Link-local Addresses können Nodes auf dem internen Link kommunizieren
Dies kann mit Echo Requests getestet werden
Link-local Addresses zu Link-layer Addresses auflösen
Nodes waren in der Lage die Link-local Addresses ihrer Nachbarn zu gültigen Link-layer Addresses aufzulösen
Unser Link internal ist ein virtuelles Ethernet, die Link-layer Addresses entsprechen in unserem Netz deshalb den bei Ethernet gebräuchlichen MAC-Adressen
Zuständig für die Auflösung von IPv6-Adressen zu Link-layer Addresses ist das Neighbor Discovery Protocol (NDP), spezifiziert in RFC 4861
NDP wird über ICMPv6 transportiert
Damit ist es von IPv6 abhängig, wenn es IPv6-Adressen auflösen soll
Wie und warum das dennoch funktioniert, werden wir uns gleich anschauen
Vorher machen wir uns aber noch mit den Neighbor Caches vertraut
Jeder Node betreibt einen Neighbor Cache in dem er die Ergebnisse der Link-layerAdressauflösungen zwischenspeichert
Unter IPv4 haben wir für die Auflösung noch ARP benutzt, dessen Ergebnisse in der ARP-Tabelle zwischengespeichert wurden
Gültigkeit des Neighbor Caches
Einträge im Neighbor Caches sind je nach Betriebssystem und Zustand unterschiedlich lange gültig
Im Normalfall sind sie recht kurzlebig
Daher sind für die folgenden Experimente mitunter mehrere Anläufe notwendig
Für das Einfangen eines ganz bestimmten Zustands müssen wir zum richtigen Zeitpunkt den Neighbor Cache auslesen
Manchmal ist es daher vorteilhaft, das nächste Kommando schon in der Zwischenablage bereitzuhalten, um schneller reagieren zu können
Windows
IPv6/Host/Neighbor Cache/Windows
Linux
IPv6/Host/Neighbor Cache/Linux
Zustände der Einträge
Bedeutungen der Zustände
Zustand
Beschreibung
Incomplete
Es findet gerade eine Adressauflösung statt
Diese konnte aber noch nicht erfolgreich beendet werden
Reachable
Der zugehörige Nachbar gilt als erreichbar
Entweder findet gerade eine Kommunikation mit ihm statt oder eine solche ist erst wenige Sekunden her
Stale
Die Erreichbarkeit des zugehörigen Nachbarn ist unbekannt
Es fand kürzlich eine Kommunikation mit ihm statt
Solange keine weitere Kommunikation beabsichtigt ist, sollte auf eine erneute Adressauflösung verzichtet werden
Delay
Der zugehörige Nachbar gilt nicht als erreichbar
Es wurde aber wieder eine Kommunikation mit ihm gestartet
Bleibt eine Bestätigung der Erreichbarkeit durch die kommunizierende Schicht aus, wird auf IP-Schicht die Erreichbarkeit aktiv überprüft werden
Probe
Der zugehörige Nachbar gilt nicht als erreichbar
Seine Erreichbarkeit wird gerade aktiv geprüft
Sollte die Prüfung fehlschlagen, wird der Eintrag entfernt
Adressauflösung mitschneiden
Dass die Neighbor Caches funktionieren haben wir gerade gesehen
Auch wissen wir dank der erfolgreichen Echo Requests, dass die Auflösung von IPv6-Adressen und Link-layer Addresses funktioniert
Es ist nun an der Zeit, die Frage nach dem Wie zu beantworten
Dazu suchen wir uns einen Node aus, der gerade einen leeren Neighbor Cache hat, zum Beispiel router
Das Kommando zum Anzeigen des Neighbor Caches ist uns aus den vorherigen Experimenten noch bekannt
Sollten sich noch gültige Einträge im Neighbor Cache befinden, warten wir noch etwas ab
Wenn der Node seine IPv6-Nachbarn schließlich vergessen hat, starten wir Wireshark auf dem entsprechenden Interface, hier eth1
Um eine Adressauflösung zu erzwingen versenden wir wieder Echo Requests
user@router:~ ping6 -c3 fe80::200:ff:fe60:d1e%eth1
PING fe80::200:ff:fe60:d1e%eth1 (fe80::200:ff:fe60:d1e) 56 data bytes
64 bytes from fe80::200:ff:fe60:d1e: icmp_seq=1 ttl=64 time=3.75 ms
3 packets transmitted, 3 received, 0% packet loss, time 2005 ms
Neighbor Solicitation
Router Solicitation
Solicited Node Multicast Address
Solicited Node Multicast Address
Pakete an die Solicited Node Multicast Address eines Nodes können auch bei unbekannter Link-layer Address an diesen zugestellt werden
Wie genau das funktioniert werden wir in Abschnitt 4.5 Multicast lernen
Vorerst werden wir uns damit begnügen, dass es irgendwie funktioniert
Solicited Node Multicast Address
Neighbor Advertisement
Neighbor Advertisement
Neighbor Advertisement
Anhang
Siehe auch
Links
Weblinks