Warum benötigen Sie IPv6 Neighbor Solicitation, um die MAC-Adresse zu erhalten?

12

Ich bin Softwareentwickler und habe gerade ein kostenloses Buch über IPv6 auf den Techdays bekommen, das ich zum Spaß lese. Sie gaben es weg, weil es ein bisschen wie ein altes Buch ist (W2008), also sind die Dinge für andere / neuere Betriebssysteme vielleicht anders, aber ich verstehe nicht, dass Neighbor Discovery die MAC-Adresse abrufen muss.

Laut dem Buch erhält jeder Knoten automatisch eine Link-Local-IP-Adresse, die sich aus der MAC-Adresse durch Einfügen FF-FEzwischen dem 3. und 4. Byte und Kippen des U / L-Bits zusammensetzt, so dass die Link-Local-IP für ein Knoten mit einer MAC-Adresse von 00-AA-00-3F-2A-1Cwird FE80::2AA:FF:FE:3F:2A1C.

Um die MAC-Adresse der Verbindungsschicht zu bestimmen, wird eine Neighbor Solicitation-Nachricht an die verbindungslokale IP-Adresse gesendet, die mit einer Nachricht antwortet, die ihre MAC-Adresse enthält. lokale IP-Adresse. Es klingt also so, als würde man eine Postkarte an jemanden schicken, der nach seiner Adresse fragt.

Edwin
quelle

Antworten:

20

Jeder Knoten generiert automatisch eine verbindungslokale Adresse, aber:

  • Diese Adresse wird möglicherweise nicht mit dem in RFC 2464 angegebenen EUI-64-Format generiert . IPv6-Adressen können auch kryptografisch generierte Adressen ( RFC 3972 ), temporäre Datenschutzadressen ( RFC 4941 ) oder in modernen Betriebssystemen stabile Datenschutzadressen ( RFC 7217 ) sein.

  • Eine Adresse mit einer EUI-64-Schnittstellen-ID entspricht möglicherweise nicht der angegebenen MAC-Adresse, da sie von einem Administrator explizit konfiguriert wurde.

Da Sie die Adresse nicht einfach zurück in eine MAC-Adresse konvertieren können, müssen Sie eine Nachbaranfrage senden, um die MAC-Adresse zu ermitteln.

Es gibt auch andere Gründe, warum Nachbaranfragen notwendig sind. Einige davon sind:

  • Erkennung doppelter Adressen ( RFC 4862 ). Möglicherweise hat ein anderer Host (zu Recht oder zu Unrecht) eine Adresse angegeben, die ein Host verwenden möchte.
  • Erkennung der Nichterreichbarkeit von Nachbarn. Das Fehlen einer Antwort auf eine Nachbaranfrage ist ein Indikator dafür, dass der Nachbar nicht erreichbar ist.

Bücher sind alle schön und gut, aber sehr veraltete Bücher sind möglicherweise nicht so nützlich. Sogar IPv6 wurde in den letzten zehn Jahren erheblich überarbeitet. Die beste Quelle der Wahrheit sind die relevanten RFCs, sowohl die Original-RFCs als auch alle RFCs, die als aktualisiert oder veraltet gekennzeichnet sind. RFCs werden so detailliert angegeben, dass konforme Implementierungen geschrieben werden können. Lesen Sie RFC 4861, um alle Details der Nachbarerkennung zu erfahren .

Michael Hampton
quelle
Danke für die Korrekturen; Wenn Sie kein EUI-64-Format verwenden, müssen Sie den MAC in der Tat ermitteln, andernfalls. Tatsächlich verstehe ich jedoch die Datenschutzbedenken bezüglich des EUI-64-Formats für linklokale Adressen nicht, da die linklokale Adresse für den Link gilt und auf diesem Link die MAC-Adresse sein muss (und sein kann) ) ohnehin bekannt (durch Neighbor Solicitation) für Ethernet-Kommunikation, so dass aus bösen Absichten die MAC-Adresse zusammen mit der stabilen Datenschutzadresse auf dem lokalen Link gespeichert werden kann, nicht wahr?
Edwin
@Edwin, SLAAC wurde ursprünglich für alle IPv6-Adressen verwendet, nicht nur für die Link-Local-Adressen, sodass ein Host nachverfolgt werden konnte. SLAAC ist nur eine Methode, um Link-Local-Adressen zuzuweisen. Sie können auch manuell zugewiesen werden, ohne dass die MAC-Adresse in der Link-Local-Adresse angegeben wird. Ich kenne einige Leute, die alle Adressen manuell zuweisen möchten, einschließlich Link Local. Es scheint eine Menge Arbeit für wenig bis keinen Gewinn zu sein, aber es macht sie glücklich, und alle IIDs aller Adressen auf einer Schnittstelle sind gleich, in einer Reihenfolge, die sie bevorzugen.
Ron Maupin
@Edwin Und jeder Host verwaltet in der Tat einen Zielcache (siehe RFC 4861), der der von Hosts verwalteten IPv4-ARP-Tabelle entspricht.
Michael Hampton
CGA hätte einfacher und sicherer sein können, wenn die Adressen doppelt so groß gewesen wären. Die Hälfte der Spezifikation ist eine Problemumgehung, da nur 64 Bit in der Schnittstellen-ID enthalten sind, für die im Idealfall 162 Bit gewünscht wären. Es ist eine Sache, an die man sich erinnert, wenn die Idee aufkommt, dass 128 Bit zu viel sind.
Kasperd
Was halten Sie an diesem Microsoft-Dokument für nicht standardisiert? Für mich sieht es so aus, als würde es nur die RFCs zusammenfassen, mit denen Sie verknüpft sind.
Kasperd
9

Sie haben also einige Dinge falsch verstanden oder waren falsch informiert.

Mithilfe von SLAAC kann ein Host mithilfe seiner MAC-Adresse eine eigene IPv6-Adresse erstellen. Viele Menschen hielten dies jedoch für gefährlich, gaben zu viele Informationen preis und ermöglichten die Verfolgung eines bestimmten Hosts. Basierend darauf wurden Datenschutzerweiterungen und zufällige Adressierung entwickelt, die von Betriebssystemen verwendet werden, um Datenschutz und Sicherheit zu gewährleisten. Dies bedeutet, dass ein Host seine eigene Adressierung erstellen kann, die nicht auf seiner MAC-Adresse basiert.

Wenn ein Host die MAC-Adresse eines Nachbarn in IPv4 ermitteln muss, wird ARP verwendet. ARP sendet eine Anforderung, IPv6 hat jedoch keine Übertragung. Stattdessen muss jeder Host einer Solicited Node-Multicast-Gruppe beitreten. Diese Gruppe basiert auf den letzten 24 Bits ihrer IPv6-Adresse. Da IPv6-Schnittstellen eine beliebige Anzahl von IPv6-Adressen haben können, kann ein Host mehreren Solicited Node-Multicast-Gruppen beitreten. Ein IPv6-Host, der nach der MAC-Adresse eines anderen Hosts sucht, sendet eine Multicast-Anfrage an die Solicited Node-Multicast-Gruppe der Ziel-IPv6-Adresse.

Dies bietet einen Vorteil gegenüber IPv4 ARP. Da ARP ein Broadcast für Anforderungen verwendet, unterbricht es jeden Host in der Layer-2-Broadcast-Domäne. Da die Solicited Node-Multicast-Gruppe die letzten 24 Bits der IPv6-Zieladresse verwendet, unterbricht die ND-Multicast-Anforderung wahrscheinlich nur den Zielhost oder möglicherweise einen oder zwei andere Hosts in der Layer-2-Broadcast-Domäne.

Ron Maupin
quelle