Escribí esto el año pasado como un documento de referencia interno cuando algunos de nuestros ingenieros se confundieron cuando se les pidió que pusieran direcciones IPv6 en DNS. No abordé el DNS específicamente, pero la mayor parte de la preocupación parecía estar relacionada con el formato de las direcciones y no "entender" cómo funcionaban. Tal vez sea útil para otros también:
Entonces, lo primero que hay que reconocer es que los agregadores IPv6 se ven feos. Ellas hacen.
Pero creo que es solo porque no estamos acostumbrados a tratar con ellos y no entendemos lo que significan en un nivel muy bajo como lo hacemos con las direcciones IPv4. Creo que tomará un tiempo sentirnos cómodos con ellos, pero tenemos que comenzar por algún lado.
Otra cosa importante para recordar es que las direcciones IPv4 son números de 32 bits y las direcciones IPv6 son números de 128 bits. Cuando un enrutador enruta o un firewall se filtra, lo hacen en función de ese número. La forma en que un ser humano elige mostrar ese número es totalmente arbitrario y es principalmente tradición. Entonces, todo este correo electrónico explica cómo los humanos eligen representar estos números: a las máquinas no les importa, es todo para ellos.
Una dirección IPv4 es de 32 bits o cuatro bytes. Lo que consideramos como direcciones IP "reales" es solo el método que se ha convertido en estándar para representar esa cadena de bits, separando los bits en 4 grupos de 8 bits, representando cada 8 bits como un número decimal y separando esos números decimales. un período. Entonces, tome la dirección IP aleatoria 172.30.154.249. Cuando un enrutador "piensa" en esta dirección IP, realmente piensa así:
10101100000111101001101011111001
Que podemos traducir a nuestra propia forma:
10101100 = 172
00011110 = 30
10011010 = 154
11111001 = 249
A veces también puede ver estos escritos como un número decimal puro:
10101100000111101001101011111001 = 2,887,686,905
Casi nadie usa este formulario a propósito (*), pero es una forma históricamente válida de escribir una dirección IPv4. De hecho, este formulario se usa en RFC821, que definió SMTP en 1982. Si desea enrutar manualmente el correo a una máquina específica en lugar de usar DNS, puede usar dos tipos diferentes de literales. El primero fue la familiar forma de "cuadrante punteado" entre paréntesis ("usuario @ [172.30.154.249]"). El segundo estaba usando la forma decimal de la IP con el prefijo ("usuario @ # 2887686905").
Todo lo anterior fue solo para proporcionar un marco para traducir su conocimiento de cómo funcionan las direcciones IPv4 a direcciones IPv6. Así como un IPv4 es un número de 32 bits, las direcciones IPv6 son números de 128 bits. ARIN le asignó a MY AWESOME COMPANY (**) el rango de IP 2311: FD67 / 32. En aras de tener un ejemplo para trabajar, voy a usar la IP 2311: FD67 :: AC1E: 9AF9.
Entonces, aquí está la cadena de bits que representa esa ip6:
00100011000100011111110101100111000000000000000000000000000000000000000000000000000000000000000010101100000111101001101011111001
Si representamos estas cadenas de bits de la forma en que hacemos cadenas de bits IPv4 (convierta cada fragmento de 1 byte en decimal, separe cada una con un punto), obtendríamos lo siguiente:
35.17.253.103.0.0.0.0.0.0.0.0.172.30.154.249
Eso tiene un par de problemas. La primera es que parece un número IPv4 original, lo cual no es bueno, quieres una forma sólida de diferenciarlos. La otra es que es mucha información, muchos números y mucho espacio en blanco. Entonces, ambos problemas se resuelven usando un separador diferente (dos puntos (:) en lugar de punto (.)) Y repitiendo bytes en hexadecimal en lugar de decimal. Donde IPv4 separó fragmentos de 8 bits, representados en decimales, con puntos, IPv6 separó fragmentos de 16 bits, separados con dos puntos. Así que aquí está el desglose de nuestro IPv6 IP de ejemplo:
0010001100010001 = 2311
1111110101100111 = FD67
0000000000000000 = 0
0000000000000000 = 0
0000000000000000 = 0
0000000000000000 = 0
1010110000011110 = AC1E
1001101011111001 = 9AF9
2311:FD67:0:0:0:0:AC1E:9AF9
Esto todavía tiene mucho espacio en blanco, por lo que existe la posibilidad de que la cadena de ceros más grande se pueda omitir y representar con dos puntos. Entonces, la IP anterior se puede escribir:
2311:FD67::AC1E:9AF9
No he visto mucho esto, pero según tengo entendido, también hay una buena convención para permitir que los últimos 32 bits se escriban como un quad con puntos prefijado, lo que permite un fácil reconocimiento de las direcciones heredadas a medida que migra de IPv4 a IPv6 . Entonces, como probablemente notó, mi dirección de ejemplo de IPv6 termina con los mismos 32 bits que comprenden completamente mi ejemplo de IPv4. Eso es especialmente útil cuando escribes en este estilo. En ese caso, mi dirección IPv6 se vería así:
2311:FD67::172.30.145.249
Para volver a donde comencé con IPv6, mencioné que nos habían asignado 2311: FD67 / 32. El / 32 es una máscara de bits al igual que en las direcciones IPv4. En esencia, significa que se nos han asignado estáticamente los primeros 32 de los 128 bits en una dirección IPv4 que podríamos crear. Desde 2311: FD67 es de 32 bits, eso significa que cada dirección IP que creamos a partir de ese rango comenzará con eso.
Para decirlo de otra manera, así como 172.17 / 16 puede considerarse como "cada IP entre 172.17.0.0 y 172.17.255.255", 2311: FD67 / 32 puede considerarse como "cada IP entre 2311: FD67: 0: 0: 0: 0: 0: 0 y 2311: FD67: FFFF: FFFF: FFFF: FFFF: FFFF: FFFF ".
Creo que pasará mucho tiempo antes de que comencemos a migrar a IPv6, pero espero que esta explicación lo ayude a sentirse más cómodo al usarlos y referirse a ellos.
Nuevamente, es realmente importante entender que lo único de lo que estoy hablando aquí es, literalmente, cómo escribir una dirección IPv6. Parece que hay mucha inteligencia incorporada en el esquema de numeración para el enrutamiento, etc., que todavía no entiendo realmente, por lo que todo lo que puedo abordar ahora es cómo se ve =).
(*) He visto la representación decimal de IPv4 en alguna depuración de software antes, pero estoy casi seguro de que fue un error o pereza, creo que fue mucho más fácil en el código C imprimir el entero de 32 bits más rápido de lo que era formatee un quad punteado para imprimir.
(**) Cambié el nombre de mi empresa y el prefijo