Aller au contenu principal

Appendix A. Loopback Suppression and Duplicate Address Detection (Suppression de bouclage et détection d'adresse dupliquée)

Déterminer si une sollicitation multicast reçue est bouclée vers l'expéditeur ou provient réellement d'un autre nœud dépend de l'implémentation. Une situation problématique se présente lorsque deux interfaces connectées au même lien se trouvent avoir le même identifiant et la même adresse de couche liaison, et qu'elles envoient toutes deux des paquets de contenu identique à peu près au même moment (par exemple, des sollicitations de voisin envoyées à une adresse provisoire dans le cadre de messages de détection d'adresse dupliquée). Bien que le destinataire reçoive deux paquets, il ne peut pas déterminer quel paquet est bouclé et lequel provient d'un autre nœud simplement en comparant le contenu des paquets (c'est-à-dire que le contenu est identique). Dans ce cas particulier, il n'est pas nécessaire de savoir exactement quel paquet est bouclé et lequel est envoyé par un autre nœud ; si des sollicitations sont reçues en plus grand nombre que ce qui a été envoyé, l'adresse provisoire est dupliquée. Cependant, la situation peut ne pas toujours être aussi simple.

La spécification multicast IPv4 [RFC1112] recommande que l'interface de service fournisse un moyen pour les protocoles de couche supérieure de supprimer la livraison locale des paquets envoyés à des groupes multicast dont l'hôte expéditeur est membre. Certaines applications savent qu'il n'y aura pas d'autres membres du groupe sur le même hôte, et la suppression du bouclage peut les empêcher d'avoir à recevoir (et rejeter) des paquets qu'elles ont eux-mêmes envoyés. Une façon simple d'implémenter cette fonctionnalité est de désactiver le bouclage au niveau matériel (si le matériel le supporte), et de boucler les paquets par logiciel (si demandé). Sur des interfaces où le matériel lui-même supprime le bouclage, un nœud effectuant la détection d'adresse dupliquée compte simplement le nombre de sollicitations de voisin reçues pour l'adresse provisoire et les compare au nombre attendu. S'il y a une divergence, l'adresse provisoire est dupliquée.

Cependant, dans les cas où le matériel ne peut pas supprimer le bouclage, une heuristique logicielle possible pour filtrer les bouclages non désirés consiste à jeter tout paquet reçu dont l'adresse source de couche liaison est la même que celle de l'interface de réception. Il existe même une spécification de couche liaison qui exige de jeter tout paquet de ce type [IEEE802.11]. Malheureusement, l'utilisation de ce critère entraînerait également le rejet de tous les paquets envoyés par un autre nœud utilisant la même adresse de couche liaison. La détection d'adresse dupliquée échouera sur les interfaces qui filtrent les paquets reçus de cette manière :

  • Si le nœud effectuant la détection d'adresse dupliquée jette les paquets reçus ayant une adresse source de couche liaison identique à celle de l'interface de réception, il jettera également les paquets provenant d'autres nœuds utilisant également la même adresse de couche liaison, y compris les messages d'annonce de voisin et de sollicitation de voisin nécessaires au bon fonctionnement de la détection d'adresse dupliquée. Si la suppression peut être désactivée, ce problème particulier peut être évité en désactivant temporairement la suppression logicielle du bouclage pendant que le nœud effectue la détection d'adresse dupliquée.

  • Si le nœud utilisant déjà une adresse IP particulière jette les paquets reçus ayant une adresse source de couche liaison identique à celle de l'interface, il jettera également les messages de sollicitation de voisin liés à la détection d'adresse dupliquée envoyés par un autre nœud utilisant également la même adresse de couche liaison. Par conséquent, la détection d'adresse dupliquée échouera et l'autre nœud configurera une adresse non unique. Puisqu'il est généralement impossible de savoir quand un autre nœud effectue la détection d'adresse dupliquée, cette situation ne peut être évitée que si la suppression logicielle du bouclage est désactivée de manière permanente.

Par conséquent, pour effectuer correctement la détection d'adresse dupliquée dans les cas où deux interfaces utilisent la même adresse de couche liaison, les implémentations doivent (MUST) avoir une bonne compréhension de la sémantique de bouclage multicast de l'interface, et l'interface ne doit pas (MUST NOT) jeter les paquets reçus simplement parce que l'adresse source de couche liaison est la même que celle de l'interface. Il convient également de noter que les spécifications de couche liaison peuvent entrer en conflit avec les conditions nécessaires pour que la détection d'adresse dupliquée fonctionne.