Eu escrevi isso no ano passado como um documento de referência interno quando alguns de nossos engenheiros ficaram confusos quando solicitados a colocar endereços IPv6 no DNS. Não abordei o DNS especificamente, mas a maior parte da preocupação parecia estar no formato dos endereços e não em "entender" como eles funcionavam. Talvez seja útil para outros também:
Portanto, a primeira coisa a reconhecer é que os endereços IPv6 são feios. Eles fazem.
Mas acho que é só porque não estamos acostumados a lidar com eles e não entendemos o que eles significam em um nível muito baixo, como fazemos com os endereços IPv4. Acho que vai demorar um pouco para ficar confortável com eles, mas temos que começar de algum lugar.
Outra coisa importante a lembrar é que os endereços IPv4 são números de 32 bits e os endereços IPv6 são números de 128 bits. Quando um roteador roteia ou um firewall filtra, eles o fazem com base nesse número. Como um ser humano escolhe exibir esse número é totalmente arbitrário e é principalmente apenas tradição. Portanto, este e-mail inteiro explica como os humanos escolhem representar esses números - as máquinas não se importam, são tudo para eles.
Um endereço IPv4 é de 32 bits ou quatro bytes. O que consideramos endereços IP "reais" é apenas o método que se tornou padrão para representar essa sequência de bits, separando os bits em 4 grupos de 8 bits, representando cada 8 bits como um número decimal e separando esses números decimais. um periodo. Portanto, use o endereço IP aleatório 172.30.154.249. Quando um roteador "pensa" nesse endereço IP, ele realmente pensa assim:
10101100000111101001101011111001
Que podemos traduzir em nossa própria forma:
10101100 = 172
00011110 = 30
10011010 = 154
11111001 = 249
Às vezes, você também pode vê-las como um número decimal puro:
10101100000111101001101011111001 = 2,887,686,905
Quase ninguém usa esse formulário de propósito (*), mas é uma maneira historicamente válida de escrever um endereço IPv4. De fato, esse formulário é usado no RFC821, que definiu o SMTP em 1982. Se você deseja rotear manualmente o correio para uma máquina específica em vez de usar o DNS, você pode usar dois tipos diferentes de literais. A primeira foi a familiar forma "quad dotted" entre colchetes ("user @ [172.30.154.249]"). O segundo estava usando a forma decimal do IP prefixado com um sinal de libra ("usuário @ # 2887686905").
Tudo o que foi dito acima foi apenas para fornecer uma estrutura para traduzir seu conhecimento de como os endereços IPv4 funcionam para endereços IPv6. Assim como um IPv4 é um número de 32 bits, os endereços IPv6 são números de 128 bits. ARIN atribuiu à MY AWESOME COMPANY (**) o intervalo de IP 2311: FD67 / 32. Para ter um exemplo para trabalhar, vou usar o IP 2311: FD67 :: AC1E: 9AF9.
Então, aqui está a sequência de bits que representa esse ip6:
00100011000100011111110101100111000000000000000000000000000000000000000000000000000000000000000010101100000111101001101011111001
Se representássemos essas cadeias de bits da maneira como fazemos com as cadeias de bits IPv4 (converter cada bloco de 1 byte em decimal, separar cada um com um ponto), obteríamos o seguinte:
35.17.253.103.0.0.0.0.0.0.0.0.172.30.154.249
Isso tem alguns problemas. A primeira é que parece um número IPv4 descolado, o que não é bom, você quer uma maneira sólida de diferenciar entre eles. A outra é que são muitas informações, muitos números e muito espaço em branco. Portanto, ambos os problemas são resolvidos usando um separador diferente (dois pontos (:) em vez de ponto (.)) E repetindo os bytes em hexadecimal em vez de decimal. Onde o IPv4 separa os pedaços de 8 bits, representados em decimal, com pontos, o IPv6 separa os pedaços de 16 bits, separados por dois pontos. Então, aqui está o detalhamento do nosso exemplo de IPv6:
0010001100010001 = 2311
1111110101100111 = FD67
0000000000000000 = 0
0000000000000000 = 0
0000000000000000 = 0
0000000000000000 = 0
1010110000011110 = AC1E
1001101011111001 = 9AF9
2311:FD67:0:0:0:0:AC1E:9AF9
Isso ainda tem muito espaço em branco, então há uma possibilidade de que a maior sequência de zeros possa ser omitida e representada com dois pontos duplos. Portanto, o IP acima pode ser escrito:
2311:FD67::AC1E:9AF9
Não tenho visto muito isso, mas, pelo que entendi, também há uma convenção interessante para permitir que os últimos 32 bits sejam gravados como um quad-dotted quad prefixado, permitindo o fácil reconhecimento de endereços herdados à medida que você migra do IPv4 para o IPv6 . Portanto, como você provavelmente notou, meu endereço de exemplo IPv6 termina com os mesmos 32 bits que compõem inteiramente o meu exemplo de IPv4. Isso é especialmente útil quando você escreve nesse estilo. Nesse caso, meu endereço IPv6 se pareceria com:
2311:FD67::172.30.145.249
Para voltar ao ponto em que comecei com o IPv6, mencionei que recebíamos o 2311: FD67 / 32. O / 32 é uma máscara de bits como nos endereços IPv4. Significa, em essência, que nos foi atribuído estaticamente os primeiros 32 dos 128 bits em um endereço IPv4 que poderíamos criar. Como o 2311: FD67 tem 32 bits, significa que todos os endereços IP que criamos nesse intervalo começarão com isso.
Em outras palavras, da mesma forma que 172.17 / 16 pode ser considerado como "todo IP entre 172.17.0.0 e 172.17.255.255", 2311: FD67 / 32 pode ser considerado como "todo IP entre 2311: FD67: 0: 0: 0: 0: 0: 0 e 2311: FD67: FFFF: FFFF: FFFF: FFFF: FFFF: FFFF ".
Acho que demorará muito tempo para começarmos a migrar para o IPv6, mas espero que essa explicação o ajude a se sentir mais confortável ao usá-los e consultá-los.
Novamente, é realmente importante entender que a única coisa de que estou falando aqui é literalmente como escrever um endereço IPv6. Parece haver muita inteligência embutida no esquema de numeração para roteamento etc., que ainda não tenho uma compreensão, então tudo o que posso abordar agora é como é =).
(*) Eu já vi a representação IPv4 decimal em alguma depuração de software antes, mas tenho quase certeza de que foi um erro ou preguiça, acho que era muito mais prático no código C imprimir o número inteiro de 32 bits mais rapidamente do que era. formate um quad pontilhado para impressão.
(**) Mudei o nome da minha empresa e o prefixo