Como Fazer Cálculos de sub-rede IPv6 de forma Rápida e Fácil

Anteriormente, aqui no blog, foi-se discutido sobre o calculo de subrede IPv4, mas agora, para complementar o assunto, iremos abordar o protocolo IPv6.

Em 2011, IANA/ICANN, que são os grupos nos quais designam endereços IPv4 públicos, entregaram os últimos pedaços de endereço público. Esses grupos designaram as últimas redes de Classe A para cada um dos Registros de Internet Regional (RIR). Ou seja, o dia em que uma empresa não iria conseguir ter novos pedaços de endereço estava bem próximo.

Leia Mais: Como Fazer Cálculos de sub-rede IPv4 em Tempo Recorde (GARANTIDO!)

Um grande alarde foi feito pela mídia na época, mas desde os anos 1980 que esse potencial risco já havia sido ponderado. A exaustão de endereços IPv4, como é geralmente chamado, já poderia ter parado a expansão da internet lá nos anos 1990, mas algumas soluções de curto prazo foram tomadas na época, o que fez com que adiassem em duas décadas o problema.

O IP versão 6, ou apenas IPv6, é um protocolo criado para substituir o IP versão 4, ou IPv4. O principal motivo para as redes TCP/IP fazerem a migração de IPv4 para IPv6 é a expansão, pois o IPv4 utiliza endereços de 32 bits, gerando em sua totalidade oferece 4,3 bilhões de endereços únicos, o que pode parecer um número bem grande de endereços, mas na realidade, é bem pequeno. Já o IPv6 utiliza endereços de 128 bits que fornece 2128 ou 3,4 undeciliões (3,4 x 1038) de endereços únicos. Logo, o IPv6 foi a solução entrada para o esgotamento de endereços IPv4.

Leia Mais: 5 características básicas do IPv6 que você deve conhecer

Endereços IPv6 não Abreviados (Completos)

O IPv6 utiliza um formato hexadecimal (hex) para endereços, pois esse é um formato bem conveniente para essa função. O IPv6, para se tornar mais fácil a leitura, utiliza oito quartetos, ou seja, oito grupos de quatro dígitos hex, sendo que cada grupo de quatro dígitos é separado por dois pontos.

Um exemplo de endereço IPv6 é: 2340:1111:AAAA:0001:1234:9ABC:1234.

Esses endereços também possuem um formato binário, mas na maioria das vezes não é necessário trabalhar com a versão binário dos endereços. Para o caso de se precisar saber a versão binário é, de certa forma, fácil de converter o hex para binário. Com isso, basta substituir cada número hex por seu valor equivalente em 4 bits:

HexBinárioHexBinário
0000081000
1000191001
20010A1010
30011B1011
40100C1100
50101D1101
60110E1110
70111F1111

Abreviação e Expansão de Endereços IPv6

Por mais que um número hex de 32 dígitos seja mais simples de se trabalhar do que um número binário de 128 bits, esse número ainda contém muitos dígitos. Para facilitar na hora de se lembrar, fazer reconhecimento no resultado de comando e/ou digitar em uma linha de comando, por exemplo, as regras de abreviação do IPv6 permitem a redução desses números.

É importante saber a forma abreviada, pois computadores e roteadores utilizam geralmente a versão mais curta, por mais que seja digitado todos os 32 dígitos hex.

Abreviando Endereços IPv6

São duas as regras básicas para se realizar a abreviação de um endereço IPv6, tanto por um usuário quanto por um computador ou roteador:

  1. Retire os 0s principais nas três posições a esquerda, dentro de cada quarteto de quatro dígitos hex. Fazendo isso, qualquer quarteto 0000 será representado como um único 0.
  2. Substitua por dois dois-pontos (::) um grupo de quartetos que possuam dois ou mais quartetos exclusivamente compostos de hex 0s. Essa substituição por :: só poderá ser feita uma única vez, pois se utilizado mais vezes o IPv6 perde sua clareza.

Segue agora um exemplo de endereço IPv6 completo: FE00:0000:0000:0001:0000:0000:0000:0056.

Ao se aplicar a primeira regra em todos os oito quartetos retiram-se todos os 0s principais, assim, cinco desses quartetos que possuem quatro zeros, perderão três deles, ficando assim: FE00:0:0:1:0:0:0:56

Agora, aplicando a segunda regra, pode-se substituir duas instâncias que possuem dois ou mais quartetos compostos de 0s, então, escolhendo-se a maior e substituindo por :: fica: FE00:0:0:1::56

Com esse exemplo, se torna fácil visualizar alguns possíveis erros, por exemplo, nunca se remove os 0s que estão a direita, como no caso do FE00, logo, a abreviação: FE:0:0:1::56 não é uma abreviação correta de um endereço IPv6.

Outro possível erro e de fato bastante cometido é a substituição de todas as séries de quartetos compostas por 0s por ::, logo, o a abreviação: FE00::1::56 também está incorreta, pois não tem como saber quantos quartetos de 0s substituir em cada :: para descobrir o endereço completo.

Expansão de Endereços IPv6 abreviados

Para expandir, ou seja, para voltar o endereço de forma abreviada para a forma completa, com números de 32 dígitos, existem duas regras que são o inverso das citadas anteriormente:

  1. Adicione 0s principais, à esquerda, em cada quarteto, até que o mesmo possua quatro dígitos hex.
  2. Caso haja a existência de dois pontos (::), é só fazer uma contagem dos quartetos que aparecem no momento, então basta substituir o :: por uma sequência de 0s até que se complete oito quartetos.

Comprimento de Prefixo de um Endereço

De forma similar ao IPv4, o IPv6 utiliza um conceito de máscara, denominado de comprimento de prefixo. O comprimento de prefixo é escrito com um /, seguido de um número decimal, assim como as máscaras. O comprimento de prefixo possui, basicamente, o mesmo conceito que o ID de sub-rede, ou seja, ele define quantos bits do endereço IPv6 vai definir um prefixo IPv6.

Caso o comprimento de prefixo seja importante, os endereços IPv6 escritos seguirão o comprimento de prefixo do endereço IPv6. Pode-se deixar um espaço entre o endereço e o /, quando for escrever a documentação. Segue agora uma demonstração de endereço com um comprimento de prefixo de 64 bits:

2222:1111:0:1:A:B:C:D/64

Como o comprimento de prefixo é um número de bits, então, a extensão de valores em um IPv6 é de 0 a 128, com 0 e 128 inclusos.

Calculando o ID de Sub-rede/Prefixo IPv6

Com o IPv4, pode-se utilizar um endereço IP e a máscara de sub-rede associada a ele, com isso, se calcula o ID da sub-rede. Já com as sub-redes IPv6, pode-se utilizar um endereço IPv6 e o comprimento de prefixo associado a ele para calcular o equivalente em IPv6 ao ID de sub-rede, que é chamado de prefixo IPv6.

De forma similar a quando se utilizam máscaras IPv4 diferentes, certos comprimentos de prefixos IPv6 só necessitarão da resolução de um problema aritmético para descobrir o prefixo Ipv6, mas outros comprimentos de prefixos poderão requerer cálculos mais complexos para se encontrar o prefixo IPv6.

Primeiramente, serão abordados os casos mais simples, por causa do tamanho dos endereços IPv6 que acaba nos forçando a escolher utilizar o prefixo IPv6, o que torna os cálculos muito mais simples.

Como encontrar o prefixo IPv6

No IPv6, o prefixo mencionado anteriormente se refere a um grupo de endereços IPv6. Cada prefixo IPv6, ou sub-rede, possui um número para representar o grupo. O próprio número recebe a denominação de prefixo pelos RFCs (Request for Comments) do IPv6, porém, são muitos os que optam por chama-los de número de sub-rede ou ID de sub-rede, que são os termos utilizados no IPv4.

Da mesma forma que no IPv4, se pode começar com um endereço IPv6 e um comprimento de prefixo, para assim encontrar o prefixo, utilizando das mesmas regras gerais que se faziam presente no IPv4. Caso o comprimento de prefixo seja /P, as seguintes regras deverão ser seguidas:

  1. Copiar os primeiros bits P.
  2. Mudar todos os outros bits para 0

No caso em que um comprimento de prefixo seja um múltiplo de 4, deve-se esquecer termos de bits, e se concentrar em termos de dígitos hex. Comprimentos de prefixo que são múltiplos de 4 significam que cada dígito hex é copiado ou mudado para 0. Para esse caso de comprimentos de prefixos de múltiplo 4, deve-se seguir o seguinte processo:

  1. Identificar o número de dígitos hex através da divisão do comprimento de prefixo, que é em bits, pelo número 4.
  2. Copiar os dígitos hex determinados através do primeiro passo para fazer parte do prefixo.
  3. Mudar o restante dos dígitos para 0.

Ao encontrar o prefixo IPv6, utilizando as mesmas regras de abreviação para os endereços IPv6, pode-se e deve-se se preparar para abreviar o prefixo IPv6. Porém, é necessária bastante atenção em relação ao final do prefixo, pois, geralmente, nele possuem diversos octetos compostos apenas por 0s, logo, geralmente a abreviação termina com dois dois-pontos (::).

O exemplo a seguir mostra um endereço IPv6 designado a um host em uma LAN:

2000:1234:5678:9ABC:1234:5678:9ABC:1111/64

Como é possível notar, esse endereço IPv6 não pode ser abreviado. O seguinte valor de prefixo é encontrado calculando o prefixo para a sub-rede na qual os últimos 64 bits (16 dígitos) do endereço são substituídos por 0s:

2000:1234:5678:9ABC:0000:0000:0000:0000/64

Este endereço pode ser abreviado, pois possui 4 quartetos, todos compostos de 0s no final, então ficaria da seguinte forma:

2000:1234:5678:9ABC::/64

Comprimentos de Prefixo IPv6 Mais Complexos

Anteriormente discutimos os comprimentos de prefixos que facilitavam bastante os cálculos para se encontrar o prefixo, agora, lidaremos com os casos mais complexos, em que é necessário se trabalhar com binários.

Caso o comprimento de prefixo seja um múltiplo de 4, mas não seja múltiplo de 16, a situação fica um pouco mais simples, pois assim é possível perceber que o limite fica no final do dígito hex, dessa forma se consegue evitar trabalhar com binários.

O comprimento de prefixo /64 é, com certeza, o mais comumente utilizado, porém, é importante estar atento para encontrar o prefixo ao usar o comprimento de prefixo que é qualquer múltiplo de 4. Segue agora um exemplo de endereço IPv6 com um comprimento de prefixo /56:

2000:1234:5678:9ABC:1234:5678:9ABC:1111/56

Como nesse exemplo o comprimento de prefixo é /56, o prefixo inclui os 56 primeiros bits, ou, se preferir, os primeiros 14 dígitos hex complexos. Os dígitos hex restantes serão compostos apenas por 0s, o que resulta no seguinte prefixo:

2000:1234:5678:9A00:0000:0000:0000:0000/56

Assim como no exemplo da seção anterior, esse valor também pode ser abreviado, pois ele possui 4 quartetos possuindo apenas 0s no final, logo, a abreviação fica assim:

2000:1234:5678:9A00::/56

Com a utilização desse exemplo, podemos evidenciar um possível e muito cometido erro, que é gerado pela confusão gerada ao se olhar para o /56 e pensar nele como se fosse os primeiros 14 dígitos hex. Isso não está errado, porém, o que geralmente se erra é que, por causa dessa percepção, copiam os primeiros 14 dígitos hex e adicionam dois-dois pontos, como ilustrado abaixo:

2000:1234:5678:9A::/56

Obviamente, essa abreviação está incorreta, pois foi-se removido o “00” à direita, no final do quarto quarteto. Sendo assim, tome bastante cuidado ao se abreviar um endereço quando o limite não está localizado logo no final do quarteto.

Conclusão

Em síntese, foi-se discutido durante todo esse artigo sobre o protocolo IP versão 6, ou apenas IPv6, mais precisamente, sobre a estrutura de um endereço IPv6 e a forma de se realizar o cálculo de sub-rede para se encontrar o prefixo IPv6.

A estrutura de um endereço IPv6 se dá por um número hex de 32 dígitos, divido em oito quartetos, ou seja, oito posições, com quatro números cada, e separadas por dois pontos (:). É possível converter esse número hex para binário, utilizando a representação correspondente de cada número em binário. Além disso, endereços IPv6 podem ser abreviados ou então, quando encontrados abreviados, esses podem ser expandidos, seguindo duas regras que são inversas para cada caso.

O cálculo de Sub-rede é realizado de forma simples, utilizando o endereço IPv6 e o comprimento de prefixo para se encontrar o prefixo IPv6, que é o equivalente ao ID de sub-rede no IPv4.

De forma geral, o prefixo IPv6 pode ser encontrado através do binário, mas sempre é melhor procurar outras formas que sejam mais simples, como por exemplo, utilizando-se o mesmo princípio que no IPv4 caso o prefixo seja /P, caso o prefixo seja múltiplo de 4, utiliza-se conceitos de hex ao invés de bits, em que cada dígito é copiado ou mudado para 0. Também há os casos em que o prefixo é múltiplo de 4, mas não de 16, dessa forma, fica mais fácil pois o limite se localiza no final do dígito hex.

Gabriel Costa Couto

Técnico em Eletrotécnica e estudante de Engenharia de Controle e Automação. Colaborador do Web Póvoa nas horas vagas.