J'ai écrit cela l'année dernière en tant que document de référence interne lorsque certains de nos ingénieurs sont devenus confus lorsqu'on leur a demandé de mettre des adresses IPv6 dans DNS. Je n'ai pas abordé le DNS en particulier, mais la plupart des préoccupations semblaient concerner le format des adresses et ne pas "comprendre" comment elles fonctionnaient. Peut-être que cela sera utile pour d'autres aussi:
Donc, la première chose à reconnaître est que les adresses IPv6 ont l'air moche. Ils font.
Mais je pense que c'est simplement parce que nous ne sommes pas habitués à les traiter et que nous ne comprenons pas ce qu'ils signifient à un niveau très bas comme nous le faisons avec les adresses IPv4. Je pense qu'il faudra un certain temps pour se familiariser avec eux, mais nous devons commencer quelque part.
Une autre chose importante à retenir est que les adresses IPv4 sont des nombres 32 bits et les adresses IPv6 sont des nombres 128 bits. Lorsqu'un routeur route ou qu'un pare-feu filtre, il le fait en fonction de ce nombre. La façon dont un être humain choisit d'afficher ce nombre est totalement arbitraire et relève principalement de la tradition. Donc, tout cet e-mail explique comment les humains choisissent de représenter ces nombres - les machines s'en moquent, c'est tout pour eux.
Une adresse IPv4 est de 32 bits ou quatre octets. Ce que nous considérons comme une "véritable" adresse IP est simplement la méthode qui est devenue standard pour représenter cette chaîne de bits, séparant les bits en 4 groupes de 8 bits, représentant chaque 8 bits comme un nombre décimal, et séparant ces nombres décimaux ce une période. Alors, prenez l'adresse IP aléatoire 172.30.154.249. Quand un routeur "pense" à cette adresse IP, il pense vraiment à cela comme ceci:
10101100000111101001101011111001
Que nous pouvons traduire sous notre propre forme:
10101100 = 172
00011110 = 30
10011010 = 154
11111001 = 249
Parfois, vous pouvez également voir ceux-ci écrits comme un nombre décimal pur:
10101100000111101001101011111001 = 2,887,686,905
Presque personne n'utilise ce formulaire exprès (*), mais c'est un moyen historiquement valide d'écrire une adresse IPv4. En fait, ce formulaire est utilisé dans la RFC821 qui a défini SMTP en 1982. Si vous vouliez acheminer manuellement le courrier vers une machine spécifique au lieu d'utiliser DNS, vous pourriez utiliser deux types différents de littéraux. Le premier était le formulaire familier "quadrillé en pointillés" entre crochets ("utilisateur @ [172.30.154.249]"). Le second utilisait la forme décimale de l'IP préfixée d'un signe dièse ("user @ # 2887686905").
Tout ce qui précède était juste pour fournir un cadre pour traduire vos connaissances sur le fonctionnement des adresses IPv4 en adresses IPv6. Tout comme un IPv4 est un nombre de 32 bits, les adresses IPv6 sont des nombres de 128 bits. ARIN a attribué à MY AWESOME COMPANY (**) la plage IP 2311: FD67 / 32. Pour avoir un exemple avec lequel travailler, je vais utiliser l'IP 2311: FD67 :: AC1E: 9AF9.
Voici donc la chaîne de bits représentant cette ip6:
00100011000100011111110101100111000000000000000000000000000000000000000000000000000000000000000010101100000111101001101011111001
Si nous représentions ces chaînes de bits comme nous le faisons pour les chaînes de bits IPv4 (convertissez chaque bloc de 1 octet en décimal, séparez-les chacun par un point), nous obtiendrions ce qui suit:
35.17.253.103.0.0.0.0.0.0.0.0.172.30.154.249
Cela pose quelques problèmes. Le premier est qu'il ressemble en quelque sorte à un numéro IPv4 génial, ce qui n'est pas bon, vous voulez un moyen solide de les différencier. L'autre, c'est que c'est beaucoup d'informations, beaucoup de chiffres et beaucoup d'espace vide. Ainsi, les deux problèmes sont résolus en utilisant un séparateur différent (deux points (:) au lieu de point (.)) Et en représentant des octets en hexadécimal au lieu de décimal. Là où IPv4 séparait des blocs de 8 bits, représentés en décimal, avec des points, IPv6 séparait des blocs de 16 bits, séparés par des deux-points. Voici donc la répartition de notre exemple d'IP IP6:
0010001100010001 = 2311
1111110101100111 = FD67
0000000000000000 = 0
0000000000000000 = 0
0000000000000000 = 0
0000000000000000 = 0
1010110000011110 = AC1E
1001101011111001 = 9AF9
2311:FD67:0:0:0:0:AC1E:9AF9
Il y a encore beaucoup d'espace blanc, il y a donc une tolérance que la plus grande chaîne de zéros puisse être supprimée et représentée avec un double colon. Ainsi, l'IP ci-dessus peut être écrite:
2311:FD67::AC1E:9AF9
Je ne l'ai pas beaucoup vu, mais si je comprends bien, il existe également une convention soignée pour autoriser l'écriture du dernier 32 bits sous forme de quadrillage en pointillé préfixé, permettant une reconnaissance facile des adresses héritées lors de la migration d'IPv4 vers IPv6 . Donc, comme vous l'avez probablement remarqué, mon exemple d'adresse IPv6 se termine par les mêmes 32 bits qui comprennent entièrement mon exemple IPv4. Cela est particulièrement utile lorsque vous écrivez dans ce style. Dans ce cas, mon adresse IPv6 ressemblerait à:
2311:FD67::172.30.145.249
Pour revenir à l'endroit où j'ai commencé avec IPv6, j'ai mentionné que l'on nous avait attribué 2311: FD67 / 32. Le / 32 est un masque de bits comme il l'est dans les adresses IPv4. Cela signifie essentiellement que l'on nous a statiquement attribué les 32 premiers des 128 bits d'une adresse IPv4 que nous pourrions créer. Puisque 2311: FD67 est de 32 bits, cela signifie que chaque adresse IP que nous créons à partir de cette plage commencera par cela.
En d'autres termes, tout comme 172.17 / 16 peut être considéré comme "chaque IP entre 172.17.0.0 et 172.17.255.255", 2311: FD67 / 32 peut être considéré comme "chaque IP entre 2311: FD67: 0: 0: 0: 0: 0: 0 et 2311: FD67: FFFF: FFFF: FFFF: FFFF: FFFF: FFFF ".
Je pense qu'il faudra beaucoup de temps avant de commencer la migration vers IPv6, mais j'espère que cette explication vous aidera à vous sentir plus à l'aise de les utiliser et de vous y référer.
Encore une fois, il est vraiment important de comprendre que la seule chose dont je parle ici est littéralement de savoir comment écrire une adresse IPv6. Il semble y avoir beaucoup d'intelligence dans le schéma de numérotation pour le routage, etc., que je n'ai pas encore vraiment saisi, donc tout ce que je peux aborder maintenant, c'est à quoi il ressemble =).
(*) J'ai déjà vu la représentation décimale IPv4 dans certains débogages logiciels, mais je suis presque certain que c'était une erreur ou une paresse, je pense qu'il était beaucoup plus simple dans le code C d'imprimer l'entier 32 bits plus rapidement qu'il ne l'était formater un quadrillé en pointillé pour l'impression.
(**) J'ai muni le nom de mon entreprise et le préfixe