Appendix A. Loopback Suppression and Duplicate Address Detection (Loopback-Unterdrückung und Erkennung doppelter Adressen)
Die Bestimmung, ob eine empfangene Multicast-Solicitation zum Absender zurückgeschleift wird oder tatsächlich von einem anderen Knoten stammt, ist implementierungsabhängig. Eine problematische Situation entsteht, wenn zwei mit demselben Link verbundene Schnittstellen zufällig denselben Identifikator und dieselbe Link-Schicht-Adresse haben und beide Pakete mit identischem Inhalt ungefähr zur gleichen Zeit senden (z. B. Neighbor Solicitations, die an eine vorläufige Adresse im Rahmen von Duplicate Address Detection-Nachrichten gesendet werden). Obwohl der Empfänger zwei Pakete empfängt, kann er nicht bestimmen, welches Paket zurückgeschleift wurde und welches von einem anderen Knoten stammt, indem er nur den Inhalt der Pakete vergleicht (d. h., der Inhalt ist identisch). In diesem besonderen Fall ist es nicht erforderlich, genau zu wissen, welches Paket zurückgeschleift wurde und welches von einem anderen Knoten gesendet wurde; wenn mehr Solicitations empfangen werden als gesendet wurden, ist die vorläufige Adresse doppelt vorhanden. Die Situation ist jedoch möglicherweise nicht immer so einfach.
Die IPv4-Multicast-Spezifikation [RFC1112] empfiehlt, dass das Service-Interface eine Möglichkeit für Protokolle der oberen Schicht bietet, die lokale Zustellung von Paketen zu unterdrücken, die an Multicast-Gruppen gesendet werden, deren Mitglied der sendende Host ist. Einige Anwendungen wissen, dass es keine anderen Gruppenmitglieder auf demselben Host geben wird, und die Unterdrückung des Loopbacks kann verhindern, dass sie Pakete empfangen (und verwerfen) müssen, die sie selbst gesendet haben. Ein einfacher Weg, diese Funktion zu implementieren, besteht darin, Loopback auf Hardware-Ebene zu deaktivieren (wenn die Hardware dies unterstützt) und Pakete per Software zurückzuschleifen (wenn angefordert). Auf Schnittstellen, bei denen die Hardware selbst das Loopback unterdrückt, zählt ein Knoten, der Duplicate Address Detection durchführt, einfach die Anzahl der für die vorläufige Adresse empfangenen Neighbor Solicitations und vergleicht sie mit der erwarteten Anzahl. Wenn es eine Diskrepanz gibt, ist die vorläufige Adresse doppelt vorhanden.
In Fällen, in denen die Hardware Loopback jedoch nicht unterdrücken kann, könnte eine mögliche Software-Heuristik zum Filtern unerwünschter Loopbacks darin bestehen, jedes empfangene Paket zu verwerfen, dessen Link-Schicht-Quelladresse mit der der empfangenden Schnittstelle übereinstimmt. Es gibt sogar eine Link-Schicht-Spezifikation, die das Verwerfen solcher Pakete erfordert [IEEE802.11]. Leider würde die Verwendung dieses Kriteriums auch zum Verwerfen aller Pakete führen, die von einem anderen Knoten gesendet werden, der dieselbe Link-Schicht-Adresse verwendet. Duplicate Address Detection wird auf Schnittstellen fehlschlagen, die empfangene Pakete auf diese Weise filtern:
-
Wenn der Knoten, der Duplicate Address Detection durchführt, empfangene Pakete verwirft, die eine Link-Schicht-Quelladresse haben, die mit der der empfangenden Schnittstelle übereinstimmt, wird er auch Pakete von anderen Knoten verwerfen, die ebenfalls dieselbe Link-Schicht-Adresse verwenden, einschließlich der Neighbor Advertisement- und Neighbor Solicitation-Nachrichten, die für das ordnungsgemäße Funktionieren von Duplicate Address Detection erforderlich sind. Wenn die Unterdrückung deaktiviert werden kann, kann dieses spezielle Problem vermieden werden, indem die Software-Unterdrückung von Loopback vorübergehend deaktiviert wird, während der Knoten Duplicate Address Detection durchführt.
-
Wenn der Knoten, der bereits eine bestimmte IP-Adresse verwendet, empfangene Pakete verwirft, die eine Link-Schicht-Quelladresse haben, die mit der der Schnittstelle übereinstimmt, wird er auch Neighbor Solicitation-Nachrichten im Zusammenhang mit Duplicate Address Detection verwerfen, die von einem anderen Knoten gesendet werden, der ebenfalls dieselbe Link-Schicht-Adresse verwendet. Daher wird Duplicate Address Detection fehlschlagen, und der andere Knoten wird eine nicht eindeutige Adresse konfigurieren. Da es im Allgemeinen unmöglich ist zu wissen, wann ein anderer Knoten Duplicate Address Detection durchführt, kann diese Situation nur vermieden werden, wenn die Software-Unterdrückung von Loopback dauerhaft deaktiviert ist.
Daher müssen (MUST) Implementierungen, um Duplicate Address Detection in Fällen korrekt durchzuführen, in denen zwei Schnittstellen dieselbe Link-Schicht-Adresse verwenden, ein gutes Verständnis der Multicast-Loopback-Semantik der Schnittstelle haben, und die Schnittstelle darf (MUST NOT) empfangene Pakete nicht einfach verwerfen, weil die Link-Schicht-Quelladresse mit der der Schnittstelle übereinstimmt. Es sollte auch beachtet werden, dass Link-Schicht-Spezifikationen mit den Bedingungen in Konflikt geraten können, die erforderlich sind, damit Duplicate Address Detection funktioniert.