17/02/2010

IPv6 pour les nuls^Wgeeks

Avant d’aller plus loin, voici un petit brin de théorie visant à exposer les bases d’IPv6. Après cela, nous verrons comment se doter d’IPv6 à la maison, et nous aborderons enfin quelques-unes des améliorations évoquées précédemment ainsi que certains aspects plus pointus de l’utilisation et de la configuration.

Généralités sur les adresses

Pour commencer, les adresses IPv6 sont codées sur 128 bits, ou encore 16 octets. Il y a donc 2128 adresses possibles, soit environ 3.4×1038, c’est-à-dire environ 5×1028 adresses pour chacun des 6.5 milliards d’habitants de la planète (en 2006, source Wikipedia).
Selon l’hypothèse la plus conservatrice, un foyer connecté à Internet pourrait recevoir environ 18 … milliards … de milliards d’adresses publiques : 18 x 1018, ou 264 plus exactement. Par foyer. On devrait pouvoir tenir le coup.

Comme ça n’est pas très pratique d’écrire 128 bits sous forme décimale (essayez, vous verrez …), on utilise une représentation hexadécimale : les digits sont groupés par 4, les groupes sépares par des “:”, et les zéros non-significatifs peuvent être omis tant que ça reste non-équivoque. Exemples :

  • 3FFE:1123:4567:89AB:CDEF:1234:5678:9ABC
  • 2001:7a8:b285::1 ; ici les zéros superflus ont été remplacés par “::”, ce qui ne peut être fait qu’une seule fois dans l’écriture de l’adresse pour éviter toute ambiguïté. Cette adresse équivaut donc à 2001:07A8:B285:0000:0000:0000:0000:0001 ;
  • ::1 ; c’est l’équivalent du bon vieux 127.0.0.1, la boucle locale (pas celle de FT, vous l’aurez compris) ;
  • :: ou ::/0; l’adresse la plus simple à écrire sans aucun doute, c’est le pendant du 0.0.0.0 (/0) d’IPv4 ;
  • ::ffff:81.93.247.142 ; petite entorse à la règle, il est acceptable d’utiliser la notation décimale IPv4 quand on écrit une adresse IPv4 “mappée” en IPv6 (attention, ça ne marche pas partout) ;
  • 2001:7a8:b285::12::34 n’est PAS une adresse valide. Les :: sont équivoques, on ne sait pas exactement où se situe le 12 au milieu de l’adresse.

ping6 vers le site de GeekFault depuis un serveur voisin

La notation CIDR (en “slash”) fonctionne sur le même principe qu’en IPv4 : le suffixe /X signifie qu’une adresse appartient à un réseau dont les X premiers bits sont fixés (partie réseau de l’adresse donc) et les 128-X derniers bits sont réservés à l’hôte. Par exemple, 2001:7a8::/32 désigne le réseau dont les 32 premiers bits sont 2001:7a8 (en l’occurrence il s’agit du FAI français Nerim), tandis que ::/0 représente n’importe quelle adresse IPv6. On peut dire que 2001:758:1664::42 et 2001:758:1664::57 sont deux hôtes probablement différents mais appartenant au même sous-réseau 2001:758:1664::/64, lui même appartenant à 2001:758:1664::/48. Un sous-réseau de taille 64 est normalement situé sur un même brin physique.

Les 16 premiers bits d’une adresse IPv6 nous renseignent sur son type d’utilisation, par exemple 2001 pour les adresses attribuées de façon permanente, ou 3FFE pour le 6bone expérimental aujourd’hui obsolète. Deux cas particuliers sont à noter : le préfixe 2002::/16 identifie les adresse 6to4 (un protocole de transition pour ceux qui sont privés d’IPv6), tandis que le préfixe fe80::/10 est réservé aux adresses locales (un peu à l’image de 169.254.0.0/16) ou “link-local” ; ces adresses locales ne sont utilisables que sur un même segment du réseau local ou sur une connexion point-à-point.

Pour pouvoir continuer à utiliser des noms symboliques plutôt que des adresse littérales, il faut que le DNS soit lui aussi IPv6-ready. Dans la pratique, un serveur DNS délivre des enregistrements AAAA pour la recherche directe (conversion de nom en adresse IPv6) et utilise les zones .ip6.arpa pour les recherches inverses. Par exemple :

geeknode@ircd ~ $ dig +short -t aaaa www.kame.net
2001:200:0:8002:203:47ff:fea5:3085
geeknode@ircd ~ $ dig +short -x 2001:200:0:8002:203:47ff:fea5:3085      
orange.kame.net.
geeknode@ircd ~ $

Dernière astuce à noter, il arrive de devoir (ou de vouloir) taper une adresse IP littérale dans un navigateur, dans un fichier de configuration, ou à d’autres endroits où le caractère “:” est déjà utilisé (pour spécifier le numéro de port par exemple). Dans ce genre de cas, il est possible d’indiquer une adresse IPv6 littérale en l’encadrant par des crochets, comme par exemple [2001:758:1664::42].

Maintenant que l’on connaît un peu mieux les différents types d’adresses IPv6 et que nous savons à quoi elles ressemblent, nous allons faire un tour du côté de la configuration.

  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

  7. | #7

    1qkj8v

  1. Pas encore de trackbacks