Vamos explicar o que é o IPv6 e o motivo de sua eficiência desde a migração parcial do IPv4 para o IPv6.
Em 11 de novembro de 2023 o monitoramento que a google faz sobre o uso de IPv6 demonstrava que já estávamos com 44.43% de uso de IPv6 mundialmente.
Ou seja, o IPv6 já está sendo amplamente utilizado e cada vez mais teremos o IPv6 substituindo o IPv4.
Trajetória do IPv6
Esse aumento no uso de IPv6 vai demandar cada vez mais de profissionais que entendam o funcionamento do IPv6 que por consequência apresenta várias diferenças do IPv4.
Um outro ponto interessante é que a escassez de IPv4 produziu um mercado paralelo com pessoas armazenando endereços IPv4 para criar uma demanda e depois vender mais caro.
Esse comportamento de especulação no valor de IPv4 produziu um maior interesse nas pessoas por aderir ao IPv6.
Com o aumento da utilização do IPv6 podemos perceber uma diminuição do valor do IPv4.
A figura abaixo demonstra uma queda significante do preço de venda dos IPv4. Além disso, podemos perceber que a apesar do IPv4 está reduzindo seu preço de venda o IPv6 está ganhando mais mercado.
Isso pode nos sugerir uma hipótese de que cada vez mais o interesse por IPv4 está diminuindo.
Na figura acima podemos ver uma redução no preço do IPv4 desde junho de 2022. O gráfico da figura foi criado com base nos dados colhidos no site “auctions.ipv4.global”.
É importante saber que um dos motivos propulsores da criação do IPv6 foi a escassez do IPv4. E com o passar do tempo, o problema da escassez de IPv4 foi se agravando.
Vale ressaltar que o problema da escassez de IPv4 já existia na década de 90. Naquela época tínhamos uma escassez de IPv4 que pode ser refletida na tabela abaixo.
Alocação de IPv4 | |
Calasse A | 100% alocados |
Calasse B | 62% alocados |
Calasse C | 37% alocados |
Quando começou o IPv6 ?
Lá pelo final dos anos 1980, e o Internet Engineering Task Force (IETF) estava olhando para o futuro da internet e pensando na crescente escassez de IPv4.
Então, eles se reúnem e começam a debater sobre soluções para estender a vida útil do IPv4 e criar seu sucessor. Depois disso, criaram ações coletivas durante a década de 1990, com inúmeras discussões e diretrizes no IETF para enfrentar o desafio da escassez.
Em 1998, sai do rascunho do IETF um padrão que ficou muito tempo em análise e depois disso começamos a ter o vislumbre dos protocolos fundamentais do IPv6. E então bingo, é criada nessa época a sementinha do IPv6 que começaria a florescer em meados de 1999.
Isso porque em 1999 a Internet Assigned Numbers Authority (IANA) faz um grande movimento nesse jogo e começa as primeiras alocações de blocos de endereços IPv6 para entidades como ARIN e outros Registros de Internet Regionais (RIRs). Logo depois, ARIN começa a alocar endereços IPv6.
Consequentemente a ARIN se torna uma força constante no cenário do IPv6 à medida que o esgotamento do pool de endereços IPv4 se aproxima.
Para aqueles que tiverem interesse, o site da ARIN apresenta as principais estatísticas sobre a alocação de IPv4 e IPv6 durante a evolução da Internet.
Como é o IPv6?
Para entendermos o IPv6 devemos analisar o seu cabeçalho e ver as principais diferenças que existem com seu precursor o IPv4.
Vale ressaltar que o cabeçalho do IPv6 já oferece uma evolução quando comparado ao IPv4. Isso porque, o cabeçalho do IPv6 possui 7 campos e o IPv4 tem 13.
Devemos lembrar que quanto mais simples o cabeçalho menor será o atraso de processamento nos equipamentos intermediários como os roteadores.
Então vamos lá, vamos começar a descrever os campos do cabeçalho e explicá-los.
128 bits | ||||
Versão | Serviços Diferenciados | Rótulo de Fluxo | ||
Comprimento de Carga útil | Prox. Cabeçalho | Limite de Saltos | ||
Endereços de Origem | ||||
Endereço de Destino |
Campo Versão do IPv6 (4 bits)
Esse campo indica a versão do protocolo IP. Nesse caso, se for um IPv4 terá o valor 4 e se for IPv6 terá o valor 6.
Existe críticas sobre o uso desse campo já que a camada de enlace já informa o tipo de protocolo que está sendo encapsulado no campo dados do quadro. Nesse caso o campo Tipo do Ethernet já estaria informando se está carregando um IPv6 ou um IPv4.
Campo Serviços Diferenciados IPv6
Usado para separar pacotes com base na classe de serviço e consequentemente diferenciar a entrega dos pacotes. Utiliza também o modelo de serviço diferenciado em qualidade de serviço como o nosso querido IPv4.
Nesse caso, poderíamos ter uma maior prioridade para pacotes contendo dados de Telnet ou SSH. Então, teríamos em nossa rede esses pacotes marcados com uma maior prioridade e em comparação com outros pacotes da rede.
Consequentemente, caso de congestionamento, esses marcados com prioridade poderiam ter uma menor probabilidade de serem atrasados ou descartados.
Campo Rótulo de Fluxo IPv6
Um fluxo é definido como uma sequência de pacotes enviados de uma origem específica para um destino específico (podendo ser em unicast ou multicast).
Nesse caso, quando usamos o rótulo de fluxo, desejamos garantir um tratamento especial pelos roteadores entre a origem e o destino.
Essa prioridade no fluxo de pacotes pode ser interessante quando temos uma necessidade específica de largura de banda para uma aplicação que esteja rodando no host de origem e no host de destino.
Dessa forma, poderíamos ter um fluxo de pacotes com requisitos específicos sendo tratados de forma diferenciada quando comparados aos outros pacotes que são trafegados entre aquela origem e destino.
Segundo esse documento da IBM, os usos e controles envolvendo rótulos de fluxo ainda não foram definidos nem padronizados e ainda estão em uma fase experimentação.
Campo Comprimento de Carga útil IPv6:
Indica o tamanho dos dados que estão sendo carregados no pacote. Lembre-se que a carga útil não inclui o cabeçalho do pacote.
Campo Próximo Cabeçalho IPv6:
Semelhante ao campo Protocolo no IPv4, vai indicar o protocolo que está sendo carregado dentro do IPv6 como por exemplo: TCP, UDP e outros.
O campo próximo cabeçalho pode usar extensão de cabeçalho e consequentemente usar informações adicionais que serão usadas no pacote.
Exemplos de cabeçalho de extensão podem conter informações sobre a lista parcial de roteadores por onde o pacote vai passar, verificação de identidade do transmissor, informação sobre a criptografia e outros.
Campo Limite de Saltos IPv6:
Esse campo, de 8 bits, é usado da mesma forma que o TTL do IPv4. Dessa forma, os roteadores decrementam em 1 o campo limite de saltos toda vez que encaminham um pacote.
Quando chega a 0 o pacote é destruído e enviado uma resposta ICMPv6 de “Time Exceeded”
Endereçamento no IPv6:
Foram criados endereços de 128 bits ou 16 bytes. Esses IPv6 são representados com 8 grupos de 4 dígitos hexadecimais separados por “:”.
Podemos ver abaixo um exemplo de IPv6 usado para uma rede local (Link-local Unicast).
fe80::99d:554d:d28e:e84d
Já é esperado que em IPv6 existem muitos zeros em cada grupo pertencente ao endereçamento. Dessa forma, existem algumas formas de simplificar o endereço.
- A primeira é não mostrar os 0 que estão à esquerda. Dessa forma um grupo que tenha “: 099d:” poderia ser escrito como “: 99d:”.
- A segunda forma é substituir grupos que contém apenas zeros por um par de “:”. Dessa forma, um IP completo poderia ser simplificado como no exemplo abaixo.
fe80::99d:554d:d28e:e84d
Como funciona o cabeçalho de extensão no IPv6?
Para manter uma compatibilidade com campos que existiam no IPv4 foram adicionados cabeçalhos de extensão ao IPv6.
Vamos mostrar aqui 6 campos e como regra para o IPv6 temos que se um pacote tiver mais do que 1 campo de cabeçalho de extensão, esse campo deverá vir logo depois do cabeçalho IPv6.
Os campos de cabeçalho fixo podem ter tamanhos fixo e variados e geralmente são organizados da seguinte forma: Primeiramente temos o Tipo, seguido do Tamanho e finalmente temos o Valor.
Tipo | Tamanho | Valor |
Tipo – Possui 1 byte e os dois primeiros bits informam ao roteador que caso não saibam como processar a informação devem: descartar o pacote, ignorar a opção ou enviar um ICMPv6.
Tamanho – Possui 1 byte e indica o tamanho utilizado pelo campo Valor.
Valor – Pode variar de 0 a 255 bytes.
Abaixo vamos falar dos valores de cabeçalhos.
Hop-by-hop, apresenta valores que serão vistos por todos os roteadores intermediários. Apresenta compatibilidade com datagramas maiores que 64KB.
Dessa forma, o permite que os roteadores intermediários tratem os pacotes jumbo que são interessantes para transferência de um grande volume de dados por enlaces de alta velocidade.
Opções de destino, usado para informações que serão processadas apenas no host de destino. Segundo Tanembaum esse campo ainda é usado de forma experimental.
Roteamento, indica quais os roteadores que devem ser visitados na ordem descrita. Um ponto interessante, é que o campo indica quais são os roteadores que devem ser visitados, mas não impede que roteadores adicionais sejam visitados no caminho.
À medida que o pacote vai passando pelos roteadores indicados na lista, o campo que contabiliza o número de roteadores que ainda falta visitar vai sendo decrementado.
Dessa forma, quando o campo que indica o número de roteadores que faltam chega a 0, o pacote está livre para ser roteado por qualquer caminho sem usar uma rota específica.
Fragmentação, esse campo contém o número do fragmento e indica se existem mais fragmentos. No entanto, existe uma grande diferença quando comparamos com a fragmentação do IPv4.
Isso porque os roteadores IPv6 não fazem a fragmentação. Dessa forma, o roteador envia uma mensagem de ICMPv6 para a origem quando o roteador identifica que um pacote é maior do que a MTU do enlace que ele pretende encaminhar.
A mensagem ICMPv6 que o roteador mandou para a origem informa o tamanho da MTU do menor enlace.
A origem depois que recebe o ICMPv6 informando o menor tamanho de MTU do enlace, vai fragmentar seus pacotes de forma a caber no enlace que o roteador informou.
Essa mudança de passar o trabalho de fragmentar para a origem é um grande avanço na otimização do roteamento no IPV6.
Isso porque, além do custo computacional que existem em fragmentar pacotes nos roteadores esse trabalho também provocava atraso no encaminhamento dos pacotes.
Autenticação, esse campo tem a função garantir que um receptor saiba com base na autenticação quem foi o emissor do pacote.
Criptografia do Payload, o campo permite que os dados de um pacote sejam criptografados e consequentemente aumentando a segurança contra ataques de interceptação dos dados.
Existe NAT no IPv6?
Vale ressaltar que mesmo com a utilização do IPv6, o NAT ainda é usado por permitir um maior isolamento de redes internas. Consequentemente, ao utilizar um NAT, podemos evitar que máquinas de uma rede interna que possuem portas associadas a serviços sejam expostas diretamente na Internet.
O IPv6 é compatível com o IPv4 ?
O IPv6 não é compatível com o IPv4. Para resolver o problema da compatibilidade entre IPv6 e IPv4 utilizamos técnicas de tunelamento e tradução. No entanto, o IPv6 tem compatibilidade direta com os protocolos amplamente usados na Internet como por exemplo : TCP,UDP,OSPF,BGP e DNS.
IPv6 não tem checksum.
Uma das modificações inseridas no IPv6 foi a retirada do campo checksum. O campo checksum no IPv4 causava um grande consumo de recursos nos roteadores intermediários. Isso porque, a cada salto o checksum deveria ser recalculado.
Além disso, os criadores do IPv6 argumentavam que se alguém desejasse ter um controle de erros como checksum, deveria fazer isso na camada de transporte. Isso porque os protocolos da camada de transporte (TCP e UDP) já possuem campos de checksum que podem ser usados
Por que o campo checksum precisava ser recalculado a cada salto nos roteadores?
Isso acontecia porque a cada salto, os roteadores têm que decrementar o campo TTL e por consequência isso altera os valores do cabeçalho IP. Uma vez alterado os valores do cabeçalho IP, temos que recalcular um novo checksum para que esse nosso checksum seja compatível com o cálculo do novo cabeçalho IP.
Qual o limite de saltos, TTL, do IPv6?
Um outro ponto que gerou confusão na criação do IPv6 foi o tamanho do campo TTL. Isso porque um campo com 8 bits proporcional 255 saltos. Dessa forma, alguns cientistas, argumentaram que o um campo com 255 saltos pode ser pequeno para uma rede que tende a ser gigantesca e abarcar IoT com a utilização do IPv6 por cada dispositivo conectado à Internet.
O argumento de que 255 saltos é pouco foi rebatido pelos desenvolvedores do IPv6 utilizando o argumento de que mesmo aumentando as redes não deveríamos ter muitos saltos entre uma origem e o destino pois isso afetaria a performance.
Além disso, os desenvolvedores do IPv6 argumentavam que um TTL de 255 é um freio natural para pacotes que tenham ficado em loop na Internet e são destruídos quando o TTL chega a 0.
Consequentemente, se aumentássemos muito o campo TTL, teríamos que lidar com pacotes perdidos em loops durando mais tempo e consumindo mais recursos.
Qual o tamanho máximo do pacote IPv6?
O tamanho máximo do pacote IPv6 foi designado para ter 64KB. No entanto, podemos usar o campo Hop-by-Hop para permitir aumentar o tamanho do pacote e criar os jumboframes.
Vale a pena usar criptografia no IPv6?
Esse é um ponto que gera discussão entre os especialistas e sua utilização vai depender da necessidade. Alguns especialistas argumentam que a utilização de criptografia no IPv6 facilita a vida de programadores que não tem a necessidade de se preocupar com a segurança dos dados de suas aplicações.
Por outro lado, alguns especialistas argumentam que a segurança deveria ser implementada em camadas mais altas e consequentemente ter mais flexibilidade no uso de algoritmos de criptografia e tamanhos de chaves.
Veja mais:
O que é protocolo de roteamento ?
Como funciona a camada de rede
Protocolo HTTP – Como funciona?
https://www.arin.net/reference/research/statistics/
Juliana Mascarenhas
Data Scientist and Master in Computer Modeling by LNCC.
Computer Engineer
Tutorial Instalar VNC em Linux Ubuntu
O acesso remoto é uma ferramenta indispensável para administradores e usuários que precisam gerenciar servidores…
Tutorial: Instale seu Servidor DNS no Linux com Bind9 Passo a Passo
Nesse tutorial vamos dar todo o passo a passo para que você instale uma configuração…
SSH: Como criar chave pública
Nesse tutorial vamos ensinar a criar e configurar o acesso a um servidor SSH usando…
Socket em Python criando chat UDP
Tutorial para a criação de um chat simples utilizando sockets em UDP em Python 3….
Socket em Python, criando um Chat
Tutorial para a criação de um chat simples utilizando sockets TCP em Python 3. O…
Como usar apt get com proxy
Ao longo dos tempos sempre me deparo nos laboratórios de rede com a necessidade de…