Wie erlernen die Clients bei dem Internet Protokoll Version 6, IPv6, die MAC-Adressen ihrer IPv6-Nachbarn? Was bei IPv4 noch recht einfach per "Broadcast", also einer Anfrage an alle Clients im Subnetz, möglich war, funktioniert bei IPv6 etwas anspruchsvoller. Denn: Im IPv6 ist kein "Broadcast" definiert, siehe RFC 4291.
Bei der Kommunikation mit einem Ziel im gleichen Subnetz, wie es zum Beispiel zum Default Gateway hin der Fall ist, benötigt der sendende Host die MAC-Adresse des Empfängers. Mit dieser Zieladresse kann ein Layer 2 Frame zusammengestellt werden und die Datenübertragung beginnen.
Zu Zeiten von IPv4 war die Ermittlung der Ziel-MAC-Adresse mit dem dafür geschaffenen Address Resolution Protocol (ARP) wie erwähnt kein großen Problem: Ein ARP-Request-Frame mit der Zieladresse „Broadcast”, also alle 48 Bits der MAC-Adresse waren auf „1”, ff:ff:ff:ff:ff:ff hexadezimal gesetzt, wurde von allen Endgeräten im selben Subnetz empfangen. Der eigentlich angesprochene Client erkannte seine IPv4-Adressen und beantworte die Anfrage mit seiner MAC-Adresse. ("arp response")
Bei IPv6 sieht die Adressauflösung von IPv6 hin zu den MAC-Adresse etwas anders aus:
Zum einen gibt es im IPv6 keine Broadcast-Adressen mehr und
Die alternative Multicast-Adresse "all nodes" ff00::1 wird zum anderen ebenso nicht verwendet, um die Clients vor unnötiger Belastung durch IPv6 Multicastpakete zu schützen.
Layer 3:
Statt dessen wird zu jeder IPv6-Adresse eine passende IPv6 Solicited Node - Multicast-Adresse gebildet (RFC 4291):
Dazu werden einem vordefinierten 104 Bit-langem Präfix
FF02:0:0:0:0:1:FF
die letzten 24 Bit der zu erfragenden IPv6-Adresse angehängt.
Anbei noch einmal mit einem grafischen Beispiel:
Nun ist dem Sender die Layer 3 Multicast-Adresse der Ziel-IP-Adresse bekannt, aber der Sender kennt immer noch nicht die Layer 2 Ziel-MAC-Adresse.
Layer 2:
Der Weg von der 128 Bit Multicast-IPv6-Adresse hin zu einer 48 Bit Multicast-MAC-Adresse ist ebenfalls klar definiert (RFC 2464):
Die ersten 16 Bit der 48 Bit MAC-Adresse werden festgesetzt auf 33:33.
Für die letzten fehlendenden 32 Bit werden einfach die letzten vier Octets (32 Bits) von der IPv6-Multicast-Adresse übernommen.
Hier ist nun am Beispiel der IPv6 Hostadresse 2001:db8::a:1 zu erkennen, wie aus der zugehörigen Solicited Node Multicast-Adresse ff02::1:ff0a:1 die MAC-Adresse 33:33:ff:0a:00:01 gebildet wird.
Diese „solicited-node Multicast”-Adresse wird nun für erstmalige Kontaktaufnahme verwendet, um dann beispielsweise die reelle MAC-Adresse per „neighbor discovery protocol” zu erfragen.
Historie:
Die IPv6 RFC 4291 mit dem Schwerpunkt IPv6-Adressen legt fest, dass für jede Unicast- und Anycast-IPv6-Adresse automatisch eine Solicited Node-Multicast-Adresse gebildet wird. Lediglich die letzten 24 Bit der ursprünglichen IPV6-Adresse werden übertragen und wiederverwendet.
Somit wird für verschiedene IPv6-Präfixe mit gleichbleibendem Hostanteil auch nur eine Solicited Node-Multicast-Adresse generiert und verwendet.
In den Anfangszeiten von IPv6 wurde der Clientanteil per EUI-64 gebildet, die 48 Bit MAC-Adresse fand sich demnach abgewandelt in der IPv6-Adresse als Hostanteil wieder.
Damit war in der Praxis eine IPv6 Solicited Node-Multicast-Adresse für alle Präfixe meist ausreichend.
Zusammenfassung:
Die Link Layer MAC-Adresse des Gegenüber zu kennen ist zum Versenden von Datenpaketen auch bei IPv6 unverändert notwendig.
Zum Erlangen dieser MAC-Adresse wird die zur Ziel-IPv6-Adresse zugehörige Solicited Node Multicast-Adresse und damit die wiederum dazugehörige Multicast-MAC-Adresse angesprochen.
Mit diesen beiden „gedanklichen Brücken” erhält das Zielgerät seine Anfrage, beispielsweise ein „neighbor solicitation” Datenpaket. Darauf kann der angefragt Client nun mit einem „solicited neighbor advertisement” antworten und im Anschluss kann die direkte Kommunikation ohne Umwege starten.