17/02/2010

IPv6 pour les nuls^Wgeeks

Auto-Configuration sans état

L’une des nouveautés d’IPv6, c’est la possibilité pour l’OS de configurer automatiquement une interface réseau. Certes, IPv4 le fait déjà assez bien avec l’aide du DHCP, mais il s’agit là d’une configuration dite “avec état”, ou “stateful” : le serveur DHCP tient à jour une liste des clients configurés et des adresses IP disponibles. Nous allons aborder ici la configuration automatique “sans état”, ou “stateless”.

Dès lors que le protocole IPv6 est disponible et si l’auto-configuration est activée, l’OS va chercher ses réglages tout seul. La première étape consiste à monter une adresse link-local sur l’interface considérée. Pour cela, on utilise le préfixe fe80::/10 et l’adresse MAC de l’interface ; par une subtile transformation, les 48 bits de cette adresse vont donner les 64 bits de droite de l’adresse locale. Cette transformation est simple :

  • on part de l’adresse MAC, 00:18:F8:CC:CC:20 par exemple (ici un Linksys WRT54GL) que l’on sépare en deux blocs de 24 bits par le milieu : 00:18:F8 et CC:CC:20 ;
  • on inverse la valeur du 7è bit du premier groupe, appelé “universel/local” ; 0x00 en binaire donne 00000000, qui devient 00000010 après l’inversion du 7è bit, et donc 0x02 de retour en hexa ;
  • on réunit le groupe ainsi modifié et le deuxième groupe du début en insérant au milieu les octets FFFE, ce qui donne au final les 64 bits 02:18:F8:FF:FE:CC:CC:20 ;

Génération de la partie hôte de l'adresse à partir de l'adresse MAC


Il ne reste plus qu’à ajouter le préfixe link-local pour obtenir l’adresse : fe80::0218:f8ff:fecc:cc20/64.

Avant d’utiliser cette adresse, il faut vérifier son unicité sur le lien réseau. C’est l’une des applications du Neighbour Discovery Protocol, nommément la Duplicate Address Detection (DAD). Le protocole NDP repose sur ICMPv6, qui pour l’occasion se dote de nouveaux types de messages. L’un d’eux, “Neighbour Solicitation”, sert justement à vérifier que l’adresse que l’on s’apprête à utiliser n’est pas déjà attribuée à quelqu’un d’autre sur le lien. Lorsqu’une interface est montée est que son adresse locale potentielle (ou “tentative” dans le jargon) a été déterminée, l’hôte envoie un paquet “Neighbour Solicitation” à destination de cette même adresse et attend une réponse éventuelle. S’il n’y en a pas, l’adresse est considérée comme disponible et devient utilisable sur l’interface considérée.

Jusqu’ici, nous avons tout de même obtenu une adresse utilisable sur le LAN sans l’aide d’un DHCP. Cependant, pour sortir du LAN, il nous manque encore deux éléments : un routeur et une adresse IPv6 globale routable. Là encore c’est grâce à NDP que l’on va y arriver.
Un routeur IPv6 envoie périodiquement sur le réseau des messages NDP dits “Routeur Advertisement” (RA pour faire court) qui contiennent entre autres informations le préfixe réseau à utiliser pour l’auto-configuration ainsi que l’adresse du routeur. L’hôte peut également envoyer un message “Router Solicitation” à une adresse multicast spéciale dite “all routers” valable sur le lien (link-local), ff02::2 ; le routeur doit répondre à cette requête par un RA. L’hôte utilise alors le même mécanisme que pour déterminer l’adresse link-local, mais en utilisant cette fois-ci le préfixe annoncé par le routeur.
Après vérification (DAD), l’adresse unicast globalement unique et routable ainsi obtenue est validée pour de bon, et l’adresse du routeur enregistrée comme passerelle par défaut : bienvenue sur la toile-v6 !

Il est temps maintenant de passer à la pratique 🙂

  1. TimTom
    | #1

    Quoi ? Pas de commentaire ?

    Article génial : Merci à toi LeCoyote ainsi qu’à toute l’équipe de Geekfault !

    Continuez les gars ! Et… Joyeux Anniversaire ! 🙂

  2. Ezec
    | #2

    Bon ok, j’arrive un peu après la guerre …
    Mais vraiment, merci beaucoup pour cette article.
    Enfin une explication claire sur ce satané IPv6 qui tarde à se dévoiler pour beaucoup de personnes (moi y compris).
    Même si je n’ai pas tout compris (vous y allez forts “pour les nuls”), c’est maintenant beaucoup plus clair dans ma ptite tête.
    Merci !

  3. Lexukun
    | #3

    Bonjour.
    Je tenais a m’exprimer concernant cet article.
    Alors merci car je suis chez free et ils proposent l’IpV6 sans aucune explications.
    Cet article m’a permis de comprendre, alors encore merci.

  4. | #4

    Excellent post ! Je cherchais partout l’explication de la création de la partie host dans une adresse de liaison locale !
    Chapeau !

  5. DrGkill
    | #5

    Le header passe de 20 octets pour l’IPv4 à 40 voir 60 pour l’IPv6. Donc ça mange un peu de bande passante.
    C’est relativement négligeable pour des transferts continus. (Encore que ça represente jusqu’à 2.7% d’overhead: 60-20=40 et 40/1500 = 2.7%)
    mais c’est non négligeable pour du transfert de petites données (vecteurs de déplacement pour les jeux par exemple). Sur un paquet de 400 octets de données l’IPv6 représente un overhead de 10%.
    Sachant que les jeux vidéos type FPS en ligne ont une répartition majoritaire de paquet entre 50 et 300 octet, on est entre 13 et 80% d’overhead.

    Certes il y a un gain de temps de traitement pour les routeurs au niveau de la NAT et de la somme de contrôle, mais les processeurs ont évolués plus vite que la taille des bandes passantes.

    Donc non, l’IPv6 n’est pas toujours anodin pour la rapidité des communications.

  6. Geek
    | #6

    2^128= 2^16 possibilités entre :xxxx: par ^8

  1. Pas encore de trackbacks