Contexte et asymétrie du voisinage IPv6
Lorsqu’un hôte rejoint un réseau IPv6, il reçoit une Router Advertisement et configure immédiatement une adresse globale. Il possède alors l’adresse MAC du routeur par défaut et peut envoyer des paquets vers l’extérieur. En revanche, le routeur ne possède aucune entrée dans son cache de voisinage pour cette nouvelle adresse. Dès que le routeur doit renvoyer le premier paquet de réponse, il doit lancer une résolution d’adresse (Neighbour Solicitation / Neighbour Advertisement). Cette résolution s’insère dans le chemin critique du premier paquet, ce qui peut ajouter une latence perceptible ou entraîner la perte du paquet si le cache n’est pas rempli à temps.
Principe de GRAND
GRAND (Gratuitous Neighbor Discovery) renverse le processus réactif en le rendant proactif. Conformément à la RFC 9131, l’hôte envoie immédiatement une Neighbour Advertisement non sollicitée contenant son adresse IPv6 et son adresse MAC. Le routeur reçoit ainsi l’information avant d’avoir besoin de l’utiliser, ce qui supprime le besoin de résolution lors du premier retour de trafic.
Intégration dans FreeBSD et contraintes RFC 4861
L’implémentation de GRAND dans le noyau FreeBSD a dû respecter plusieurs règles définies par la RFC 4861. La règle 7.2.6 autorise les NA non sollicités mais impose une limitation du nombre d’annonces et un espacement temporel afin d’éviter la congestion du réseau. Les règles 7.2.7 et 7.2.8 traitent les adresses anycast et proxy : plusieurs nœuds peuvent répondre à la même sollicitation, d’où la nécessité d’un délai aléatoire avant l’envoi de chaque NA. Le code ajouté crée une file d’attente et un mécanisme de transmission différée qui applique ces délais, ce qui n’existait pas auparavant dans la pile IPv6 de FreeBSD.
Impact sur la latence du premier paquet et scénarios d’utilisation
En pratique, dès qu’une adresse est configurée, le système génère une série d’annonces non sollicitées : une première immédiatement, puis d’autres espacées selon les limites de la règle 7.2.6. Si l’interface possède plusieurs dizaines voire centaines d’adresses – situation fréquente dans les datacentres – les annonces sont étalées pour éviter un pic de trafic multicast. Dans un scénario de remise sous tension d’un datacentre, où de nombreux serveurs démarrent simultanément, cette approche empêche la création d’une « tempête » de NA tout en garantissant que chaque routeur apprend rapidement les nouvelles adresses. Le résultat mesurable est la suppression du délai supplémentaire lié à la résolution du voisinage pour le premier paquet, ce qui améliore la réactivité des connexions IPv6 sans modifier le comportement des applications.