Introdução
A quantidade de endereços possíveis com um protocolo roteável de 128 bits chega a ser assustadora e muitas vezes torna-se difícil até mesmo conseguir visualizar o tamanho dos blocos de endereço a serem criados.
Enquanto no IPv4 temos 32 bits que nos possibilitam cerca de 4 bilhões de combinações (232), no IPv6 temos mais de 340 undecilhões de endereços possíveis. Para se ter uma ideia do que isto representa, se convertêssemos cada IPv6 possível em um cm2, poderíamos envolver toda a superfície do planeta Terra com 7 camadas de endereços.
Esta fartura de endereços muda o conceito de alocação de blocos IP de forma radical. Hoje os administradores de rede estão acostumados a calcular a quantidade de endereços IPs necessários para suprir as suas demandas baseado na quantidade de máquinas que irão possuir um endereço IP. Com o IPv6, pensa-se na quantidade de redes que podem ser oferecidas ao usuário final.
Eu comparo a situação dos profissionais de rede de hoje com a dos programadores de 20 anos atrás: Não havia memória disponível e a que havia era muito cara, os programadores procuravam usufruir ao máximo da pouca memória disponível, criando mecanismos para melhor aproveita-la. Os profissionais de rede de ontem e de hoje procuram aproveitar da melhor maneira os poucos IPs válidos que possuem, usando técnicas de tradução como NAT e outras formas de poupar endereços simplesmente por quê há poucos IPs disponíveis. Os profissionais de rede de amanhã não terão estas preocupações com a adoção do IPv6 já que estes endereços podem ser ofertados em abundancia.
Mesmo que o usuário doméstico ou mesmo a empresa nos dias de hoje ainda não necessitem de todo o bloco de endereços que lhe fora alocado, estes números estarão disponíveis aos mesmos e poderão ser utilizados quando novas aplicações surgirem. Vamos supor que toda a telefonia celular móvel passe no futuro a utilizar IPv6, é possível alocar vários endereços v6 num único aparelho, cada IP representando uma determinada aplicação ou recurso embarcado no dispositivo. Novas tecnologias surgem a cada dia permitindo a monitoração de coisas antes inimagináveis. Provavelmente a agricultura no século XXI poderá utilizar chips de baixo custo e consumo de energia que possam ser plantados junto a sementes e que permitam acompanhar o desenvolvimento dos grãos em tempo real, cada semente precisaria ter um IP exclusivo para tal e estas são apenas algumas das muitas possibilidades que o futuro nos reserva.
Estrutura dos Endereços IPv6
Um endereço IPv6 é representado por 8 blocos de 16 bits cada um, separados pelo caracter dois pontos (:) . Cada grupo de 16 bits, chamado de decahexateto ou duocteto, possui 4 simbolos hexadecimais que podem variar de 0000 a FFFF.
A escrita de cada endereço IPv6 é longa, o que dificulta a sua representação, com IPv6, o serviço de DNS que fornece um nome amigável a um computador será mais necessário do que nunca, simplesmente é impossível decorar os endereços v6 presentes numa infraestrutura de redes, como muitos profissionais de TI hoje o fazem com seus blocos IPv4.
Para facilitar suas representação, algumas regras de nomenclatura foram definidas:
- Zeros a esquerda em cada duocteto podem ser omitidos
Assim, 2001:0DB8:00AD:000F:0000:0000:0000:0001 pode ser representado por:
2001:DB8:AD:F:0:0:0:1
- Blocos vazios contínuos podem ser representados pelos caracteres :: (quatro pontos) UMA ÚNICA VEZ dentro do endereço (o que vem antes do primeiro dois pontos representa os primeiros bits e o que vem após o segundo dois pontos representa os ultimos bits do endereço).
Assim, 2001:0DB8:00AD:000F:0000:0000:0000:0001 pode ser representado por:
2001:DB8:AD:F::1
Não se costuma informar uma máscara de sub-rede para fazer a operacao de AND binário como ocorre no IPv4, entretanto, a notacao de bit count foi mantida. Um provedor de Internet geralmente recebe um bloco /32 para sub-dividir e entregar aos seus clientes.
Sugere-se que cada provedor sub-divida seu bloco /32 em, no máximo, prefixos /64. Se fizermos as contas, veremos que cada operadora poderia criar um outro plano IPv4 completo de 32 bits dentro de sua própria infra-estrutura.
Uma rede /32 pode ter 65536 sub-redes /48. Cada sub-rede /48 pode ter 65536 sub-redes /64. Mantendo-se os últimos 64 bits do endereço IPv6 destinado a criação de hosts, pode-se utilizar o recurso chamado Stateless auto-configuration, que permite a geração automática do ID do host baseado em seu endereço físico (MAC-Address).
O Guia Didático de Endereçamento IPv6, distribuído gratuitamente pelo NIC.BR, nos dá uma boa noção da estrutura de um endereço IPv6 e de como ele pode ser dividido. Confira na figura abaixo:
Cada posição em hexadecimal representa 16 combinações, mas é possível segmentar a rede em blocos menores do que um múltiplo de 4 bits tomando-se “bits emprestados” da porção de host (um jargão bem conhecido em redes IPv4). Vamos ver como isto funciona:
Cada símbolo hexadecimal possui 4 bits que permitem escrever qualquer valor entre 0 (0000) e F (1111).Cada bit que compõe um símbolo hexa possui um determinado valor posicional (23, 22, 21 e 20 ou 8, 4, 2 e 1 respectivamente). Quando aumentamos tamanho do prefixo da rede avançando sobre os bits de host estamos criando blocos IP menores.
Se, a partir de um prefixo /32 pegarmos um bit emprestado (o mais a esquerda, que neste caso vale 8 ) dividimos o bloco em duas redes /33 conforme a figura abaixo:
Se, a partir deste mesmo bloco, pegarmos dois bits emprestados (que valem 8 e 4) teremos 4 combinações possíveis:
Continuando com o mesmo raciocínio, ao pegarmos 3 bits emprestados (com os valores posicionais 8, 4 e 2) teremos 23 blocos possíveis (8 sub-redes)
Se pegarmos mais um bit emprestado, (o que vale 1), estaremos utilizando todos os bits do primeiro símbolo hexa a direita do bloco /32 original e teremos 16 sub-redes diferentes (24) variando de 0 a F:
Dica: Para saber a variação de cada bloco IPv6 num determinado caracter hexa, verifique o valor posicional do último bit emprestado (que será sempre 8, 4, 2 ou 1) E se quisermos uma quantidade maior de sub-redes ? Digamos, 50 blocos diferentes ? Com 6 bits conseguimos 64 blocos conforme a figura abaixo:
Quando usamos uma grande quantidade de bits para su-dividir nossos prefixos, torna-se dificil visualiza-los, tanto em binário quanto em hexa decimal, neste último exemplo, vemos um /35 dividido em mais de um milhão de blocos /55, com 20 bits emprestados:
Eu ministrei uma video-aula sobre este assunto utilizando os slides acima e a mesma pode ser visualiada no link abaixo: https://www.wiziq.com/online-class/587274-workshop-ipv6 Dúvidas, críticas e sugestões são sempre muito bem-vindas !!! Até o próximo post.