monero.press

Protocolo IP

Neste exato momento, uma quantidade incalculável de pequenos pacotes de dados está atravessando o planeta. Cada mensagem enviada, cada foto aberta e cada segundo de vídeo assistido é picotado em pedaços que viajam de forma independente, pulando de equipamento em equipamento até chegar ao destino. Na demonstração abaixo, você pode ajustar o volume de tráfego com o controle deslizante e arrastar a cena para mudar o ângulo de visão:

Os blocos coloridos são pacotes, e os discos azulados por onde eles passam são roteadores. A cor de cada pacote indica para qual computador ele está indo. Repare que nenhum roteador conhece o caminho completo: cada um lê o endereço de destino escrito no pacote, escolhe por qual cabo mandá-lo e o entrega a um vizinho, que repete o processo.

As regras que definem como esses endereços funcionam e como cada pacote deve ser tratado pelo caminho formam o Protocolo da Internet, o IP (do inglês Internet Protocol). Ele é a camada comum que une redes muito diferentes entre si. Funciona sobre cabos de cobre, fibras ópticas, Wi‑Fi e redes de celular, e sobre ele funcionam a web, o e‑mail, as chamadas de vídeo e praticamente tudo o que fazemos on‑line.

Neste guia, vamos construir o IP a partir do zero. Começaremos com dois computadores ligados por um fio e, passo a passo, chegaremos aos endereços, às máscaras, às tabelas de roteamento, ao conteúdo de um pacote bit a bit e aos mecanismos que mantêm tudo funcionando quando as coisas dão errado.

Bits num fio

Vamos começar pelo cenário mais simples possível: dois computadores ligados por um único cabo. Para que um converse com o outro, o transmissor precisa variar alguma grandeza física ao longo do tempo, e o receptor precisa medi-la. Num cabo de cobre, essa grandeza é a tensão elétrica; numa fibra óptica, é a intensidade da luz.

Se os dois lados combinarem que um nível alto significa 1, que um nível baixo significa 0 e que cada símbolo dura um intervalo fixo de tempo, qualquer informação pode ser transmitida como uma sequência de bits. Abaixo, o computador da esquerda envia a palavra Oi para o da direita, numa versão extremamente desacelerada. O controle ajusta a taxa de transmissão, ou seja, quantos bits são enviados por segundo:

Com uma taxa maior, cada bit dura menos tempo e, por isso, ocupa um trecho menor do cabo. Já a velocidade com que o sinal percorre o cabo não muda: tanto no cobre quanto na fibra, ela fica em torno de dois terços da velocidade da luz, cerca de 200 000 quilômetros por segundo. Uma conexão mais rápida não faz o primeiro bit chegar antes. Ela coloca mais bits no fio a cada segundo, e por isso uma mensagem inteira termina de chegar mais cedo.

Mas como o texto Oi virou bits? Cada caractere é convertido em um ou mais bytes, grupos de 8 bits, seguindo uma tabela de codificação. Hoje a mais comum é a UTF‑8, na qual letras sem acento ocupam um byte, e letras acentuadas, como á ou ç, ocupam dois. Digite qualquer coisa no campo abaixo para ver os bytes e os bits correspondentes:

Todo tipo de informação digital, seja texto, imagem ou som, acaba virando uma longa sequência de bytes. Daqui em diante, não vamos nos preocupar com o que esses bytes significam. Para a rede, eles são apenas carga a ser transportada.

Pacotes

Com dois computadores e um fio, a vida é simples: tudo o que sai de um lado chega ao outro. Redes reais, porém, têm muitos participantes dividindo os mesmos cabos. Imagine três computadores que precisam enviar dados através de uma mesma ligação. Dois deles estão transferindo arquivos grandes, e o terceiro quer enviar apenas uma mensagem curta.

Se cada um enviar tudo de uma vez, num único bloco, os outros precisam esperar ele terminar. A solução adotada pela internet é quebrar os dados em pedaços pequenos, chamados pacotes, e intercalar no mesmo fio os pacotes de todo mundo. Na demonstração abaixo, o controle ajusta o tamanho máximo dos pacotes, e as barras mostram o progresso de cada transferência:

Com pacotes enormes, a mensagem curta fica presa atrás dos dois arquivos grandes. Com pacotes menores, todos avançam ao mesmo tempo, e ela chega quase imediatamente. Há ainda outra vantagem: se um pacote for corrompido no caminho, basta reenviar esse pedaço, e não o arquivo inteiro.

Repare na faixa mais escura na frente de cada pacote. Além dos dados, todo pacote carrega informações de controle, como o destino, num trecho chamado cabeçalho. Os dados em si são a carga útil (payload). Como cada pacote leva seu próprio cabeçalho, pacotes pequenos demais gastam uma fração maior do enlace com cabeçalhos, e as transferências grandes demoram um pouco mais para terminar. Na prática, as redes usam pacotes de tamanho intermediário, tipicamente de até 1 500 bytes.

Essa ideia, chamada comutação de pacotes, foi proposta de forma independente nos anos 1960 por Paul Baran, nos Estados Unidos, e por Donald Davies, no Reino Unido. Ela contrasta com a comutação de circuitos da rede telefônica tradicional, na qual cada ligação reserva um caminho exclusivo de ponta a ponta durante toda a conversa, mesmo nos momentos de silêncio.

Endereços

Quando vários computadores dividem uma rede, cada pacote precisa indicar quem é o destinatário. Redes locais como Ethernet e Wi‑Fi usam para isso o endereço MAC, um número de 48 bits gravado na placa de rede pelo fabricante e normalmente escrito como seis pares de dígitos hexadecimais: 3c:22:fb:9a:10:e4.

Endereços MAC são únicos, mas não dizem nada sobre onde o dispositivo está. Eles funcionam como o CPF: identificam alguém com precisão, mas não ajudam um carteiro a encontrar sua casa. Numa rede local isso não é problema, porque o equipamento que interliga os computadores, o switch, simplesmente memoriza em qual porta cada endereço apareceu. Mas e numa rede do tamanho do planeta?

Na demonstração abaixo, um roteador precisa saber como chegar a todos os computadores de quatro redes. A pilha ao lado dele representa sua tabela de encaminhamento, com uma camada para cada linha. Alterne entre endereços planos, como o MAC, e endereços hierárquicos, em que a primeira parte identifica a rede e a segunda identifica o computador dentro dela. O controle muda a quantidade de computadores em cada rede:

Com endereços planos, o roteador precisa de uma linha para cada computador, e a tabela cresce junto com a rede. Com endereços hierárquicos, basta uma linha por rede: todos os endereços que começam com 3. seguem pelo mesmo cabo, não importa quantos computadores existam lá. A internet tem bilhões de dispositivos, mas as tabelas dos grandes roteadores têm cerca de um milhão de linhas, uma para cada bloco de endereços anunciado entre as redes que a compõem. Só a segunda abordagem é viável.

O CEP funciona do mesmo jeito. O primeiro dígito indica uma região do país: 0 para a Grande São Paulo, 2 para o Rio de Janeiro e o Espírito Santo, 9 para o Rio Grande do Sul, e assim por diante. Os dígitos seguintes vão refinando a localização. Um centro de triagem em Porto Alegre que recebe uma carta com CEP começando em 0 sabe que ela deve seguir para São Paulo, sem precisar conhecer a rua de destino. O endereço IP aplica exatamente essa ideia.

O endereço IPv4

A versão do IP usada na internet desde 1983, o IPv4, tem endereços de 32 bits. Para facilitar a leitura, eles são escritos como quatro números decimais separados por pontos, cada um correspondendo a 8 bits, um octeto. Clique nos bits abaixo para ligá-los ou desligá-los, ou digite um endereço no campo:

Cada bit de um octeto tem um peso, que é uma potência de 2: da esquerda para a direita, 128, 64, 32, 16, 8, 4, 2 e 1. O valor do octeto é a soma dos pesos dos bits ligados, e por isso cada um dos quatro números vai de 0 a 255.

Com 32 bits, existem 232 = 4 294 967 296 endereços possíveis, pouco mais de 4 bilhões. Parecia muito em 1981, quando o IPv4 foi especificado. Hoje há mais pessoas no mundo do que endereços, e cada pessoa costuma ter vários aparelhos conectados. Veremos mais adiante como a internet lida com essa escassez.

Prefixos e máscaras

Um endereço IP tem duas partes. A primeira, o prefixo de rede, identifica a rede. A segunda, o identificador de host, identifica um dispositivo dentro dela. Host é o nome técnico de qualquer dispositivo que envia ou recebe pacotes: computadores, celulares, servidores.

A fronteira entre as duas partes não é fixa. Ela é indicada por um número depois de uma barra: em 192.0.2.10/24, os primeiros 24 bits formam o prefixo, e os 8 restantes identificam o host. Arraste o controle para mudar o tamanho do prefixo e veja o que acontece com a rede:

Cada bit a mais no prefixo divide a rede pela metade. Uma rede /24 abrange 256 endereços; uma /16, 65 536; uma /8, mais de 16 milhões. Dois endereços de cada rede são reservados: o primeiro, com todos os bits de host em 0, identifica a própria rede, e o último, com todos em 1, é o endereço de broadcast, usado para falar com todos os dispositivos da rede ao mesmo tempo. Por isso uma rede /24 comporta 254 dispositivos, e não 256.

A mesma fronteira pode ser escrita como uma máscara de rede: um número de 32 bits com 1 em todas as posições do prefixo e 0 nas demais. A máscara de uma rede /24 é 255.255.255.0, forma que você provavelmente já viu nas configurações de rede do seu computador.

Até 1993, a fronteira era determinada pelos primeiros bits do próprio endereço, num esquema de classes: redes de classe A tinham prefixo /8; as de classe B, /16; e as de classe C, /24. Uma empresa que precisasse de 2 000 endereços recebia uma classe B inteira, com 65 536, e desperdiçava quase todos. O CIDR (Classless Inter-Domain Routing) aboliu as classes e permitiu prefixos de qualquer tamanho. É por isso que a notação com barra também é chamada de notação CIDR.

Um mapa de todos os endereços

Seria bom ver o espaço de endereços do IPv4 inteiro de uma vez. Não dá para enfileirar 4 bilhões de endereços numa linha, mas podemos dobrar essa linha dentro de um quadrado. O ideal é dobrá-la de um jeito que endereços numericamente próximos fiquem próximos também no desenho.

A curva de Hilbert faz exatamente isso. Ela é construída de forma recursiva: um quadrado é dividido em quatro partes, visitadas numa trajetória em forma de U. Depois, cada parte é subdividida da mesma forma, com o U girado para que o fim de um trecho se conecte ao começo do seguinte. Aumente a ordem da curva para ver o processo:

As quatro cores mostram que a curva de cada ordem é formada por quatro cópias da curva da ordem anterior. A curva de ordem n visita 4n células; com ordem 16, são 416 = 232 células, uma para cada endereço IPv4. Como cada nível da recursão corresponde a 2 bits do endereço, todo bloco com prefixo de tamanho par vira um quadrado, e todo bloco com prefixo de tamanho ímpar vira um retângulo em que um lado tem o dobro do outro.

Abaixo está o espaço inteiro do IPv4, desenhado pixel a pixel pela placa de vídeo. Cada quadrado numerado é um bloco /8, com cerca de 16,8 milhões de endereços. Passe o cursor sobre o mapa para ver os endereços, clique ou toque para escolher um, e arraste o controle para destacar o bloco que contém o endereço escolhido, do /0 ao /32:

As regiões coloridas são blocos com funções especiais. A faixa 127.0.0.0/8 é a de loopback: pacotes enviados para esses endereços nunca saem do próprio computador. Os blocos 10.0.0.0/8, 172.16.0.0/12 e 192.168.0.0/16 são privados, reservados para redes internas; voltaremos a eles adiante. O bloco 224.0.0.0/4 é usado para multicast, o envio de um mesmo pacote a um grupo de destinatários, e 240.0.0.0/4 foi reservado para um uso futuro que nunca chegou. Vários endereços usados como exemplo neste guia, como 192.0.2.10 e 203.0.113.80, vêm de blocos reservados para documentação.

Todo o resto, em cinza, é espaço público, distribuído entre provedores e organizações por cinco registros regionais. O da América Latina e do Caribe é o LACNIC, com sede em Montevidéu. No Brasil, os endereços são distribuídos pelo NIC.br.

Roteamento

Com endereços hierárquicos, levar um pacote até o destino se divide em dois casos. Se o destino está na mesma rede do remetente, o pacote pode ser entregue diretamente. Se não está, ele é entregue a um roteador, um equipamento ligado a mais de uma rede, que se encarrega de passá-lo adiante.

Para saber em qual caso está, o computador aplica a máscara de rede ao próprio endereço e ao endereço de destino usando a operação E bit a bit: cada bit do resultado é 1 somente se os dois bits correspondentes forem 1. Na prática, isso apaga a parte de host e deixa só o prefixo. Se os dois prefixos forem iguais, o destino está na mesma rede. Escolha um destino e ajuste o tamanho do prefixo da rede:

O roteador que recebe os pacotes destinados a outras redes é o gateway padrão. Numa casa, esse papel é do aparelho instalado pelo provedor, e o endereço dele aparece nas configurações de rede, geralmente algo como 192.168.0.1 ou 192.168.1.1.

A tabela de roteamento

Um roteador tem várias interfaces, cada uma ligada a uma rede diferente, e uma tabela de roteamento que associa prefixos a interfaces. Quando um pacote chega, o roteador compara o endereço de destino com cada prefixo da tabela. Muitas vezes mais de uma linha serve. Nesse caso, vence a mais específica, ou seja, a de prefixo mais longo. Escolha um destino para o pacote:

A linha 0.0.0.0/0 tem prefixo de tamanho zero e, portanto, combina com qualquer endereço. É a rota padrão, usada quando nenhuma outra serve, e normalmente aponta para o provedor de internet. A regra do prefixo mais longo permite que um roteador tenha uma regra geral para um bloco grande e exceções para partes dele, como na hierarquia do CEP.

Salto a salto

Nenhum roteador conhece o caminho inteiro. Cada um sabe apenas qual é o próximo salto (next hop) para cada destino. Arraste o controle para acompanhar um pacote que sai de um computador doméstico em direção a um servidor e veja, em cada etapa, qual linha de qual tabela decidiu o caminho:

Quem preenche essas tabelas? Em redes pequenas, um administrador pode configurá-las à mão. Na internet, elas são preenchidas automaticamente por protocolos de roteamento: roteadores vizinhos trocam mensagens contando quais redes conseguem alcançar e a que custo. Dentro de uma mesma organização são comuns protocolos como o OSPF. Entre as quase 80 mil redes independentes que compõem a internet, os chamados sistemas autônomos, o protocolo usado é o BGP. Esses protocolos merecem um guia próprio. Para o IP, basta saber que as tabelas existem e que cada roteador consulta a sua.

O cabeçalho

Chegou a hora de abrir um pacote. Todo pacote IPv4 começa com um cabeçalho de pelo menos 20 bytes, ou 160 bits, dividido em campos de tamanho fixo. Na ilustração abaixo, cada bloco é um bit de um cabeçalho real: os blocos altos são 1, e os baixos, 0. Cada campo tem sua própria cor. Arraste para girar, passe o cursor sobre os campos e use o controle para separá-los:

Por convenção, o cabeçalho é desenhado em linhas de 32 bits, lidas da esquerda para a direita e de cima para baixo, na ordem em que os bits são transmitidos. Clique em um campo do diagrama abaixo para ver o que ele faz e onde fica no pacote de exemplo, mostrado byte a byte, em hexadecimal, na parte de baixo:

Vale a pena passar rapidamente por cada campo:

Depois deles podem vir opções, raramente usadas hoje. Repare também no que não está no cabeçalho: não há número de sequência, confirmação de recebimento nem nada que garanta a entrega. Voltaremos a esse ponto.

Tempo de vida

Tabelas de roteamento são configuradas por pessoas e por programas, e ambos erram. Suponha que o roteador A ache que o caminho para certa rede passa por B, que B ache que passa por C, e que C ache que passa por A. Um pacote para essa rede ficaria girando em círculos para sempre e, com novos pacotes entrando no laço, os enlaces acabariam completamente congestionados.

Para evitar isso, todo pacote carrega o contador TTL (Time To Live, tempo de vida). Cada roteador que recebe o pacote subtrai 1 desse valor. Se o resultado for zero, o pacote é descartado em vez de encaminhado. Use o controle para escolher o TTL inicial do pacote que entra no laço abaixo:

O nome vem da ideia original de medir o tempo de vida em segundos. Na prática, todo roteador subtrai 1, e o campo virou uma contagem de saltos. Os sistemas operacionais costumam usar valores iniciais como 64 (Linux, macOS, Android) ou 128 (Windows), mais que suficientes para atravessar a internet, onde os caminhos raramente passam de 30 saltos.

Ao descartar um pacote por TTL esgotado, o roteador envia ao remetente uma pequena mensagem de erro usando o ICMP (Internet Control Message Protocol), um protocolo auxiliar do IP. A mensagem diz “tempo excedido” e, detalhe importante, tem como origem o endereço do próprio roteador que a enviou.

Traceroute

Esse detalhe permite um truque engenhoso. Envie um pacote com TTL 1: o primeiro roteador do caminho o descarta e responde com um ICMP, revelando seu endereço. Envie outro com TTL 2: agora quem responde é o segundo roteador. Repetindo o processo, dá para descobrir o caminho inteiro. É isso que faz a ferramenta traceroute (tracert, no Windows). Aumente o TTL das sondas:


O tempo entre o envio da sonda e a chegada da resposta, em milissegundos, dá uma ideia da distância até cada roteador. Você pode rodar traceroute ou tracert num terminal para ver o caminho real que seus pacotes fazem até algum site. Alguns roteadores não respondem a sondas e aparecem apenas como asteriscos.

Checksum

Bits podem ser corrompidos no caminho por interferência elétrica ou falhas de hardware. Um bit trocado no endereço de destino mandaria o pacote para o lugar errado, e um erro no campo de comprimento confundiria o receptor. Para detectar esses problemas, o cabeçalho IPv4 inclui um checksum, uma soma de verificação.

O cálculo é simples. O cabeçalho é dividido em palavras de 16 bits, com o campo do checksum temporariamente zerado, e as palavras são somadas. Sempre que a soma passa de 16 bits, o “vai um” que sobra na frente é somado de volta ao resultado. No final, todos os bits são invertidos, e esse é o valor gravado no campo. Arraste o controle para acompanhar a soma:

Quem recebe o pacote faz a mesma soma, agora incluindo o checksum. Como o checksum é o inverso da soma de todo o resto, o resultado de um cabeçalho intacto é FFFF, com os 16 bits em 1. Clique em qualquer bit do cabeçalho abaixo para simular um erro de transmissão:

Esse método é fácil de calcular, mas não é infalível: dois erros que se compensam passam despercebidos. Tente trocar o mesmo bit em duas palavras diferentes, um de 0 para 1 e outro de 1 para 0. Para o cabeçalho, a proteção é suficiente. A carga útil é protegida por outras verificações, feitas pelas camadas de cima e de baixo.

Como o TTL muda a cada salto, cada roteador precisa atualizar o checksum antes de reenviar o pacote. É pouco trabalho por pacote, mas roteadores de grande porte encaminham centenas de milhões de pacotes por segundo. O IPv6, como veremos, abandonou esse campo.

Fragmentação

Cada tecnologia de enlace tem um tamanho máximo de quadro. Na Ethernet, a carga útil de um quadro pode ter até 1 500 bytes. Esse limite é chamado de MTU (Maximum Transmission Unit, unidade máxima de transmissão). O IPv4 permite pacotes de até 65 535 bytes. O que acontece, então, quando um pacote maior que a MTU precisa atravessar um enlace?

No IPv4, o roteador pode fragmentar o pacote: dividir os dados em pedaços menores e dar a cada pedaço uma cópia do cabeçalho. Todos os fragmentos recebem a mesma identificação. A flag MF (More Fragments, mais fragmentos) fica ligada em todos, menos no último. E o deslocamento indica em que posição do pacote original começam os dados de cada fragmento, medido em unidades de 8 bytes. Ajuste o tamanho do pacote e a MTU do segundo enlace:

tamanho do pacote
MTU do enlace 2

Os fragmentos seguem viagem como pacotes independentes e só são remontados no destino final. Se um único fragmento se perder, todo o pacote original é descartado. Por isso, a fragmentação é evitada sempre que possível.

O remetente pode ligar a flag DF (Don't Fragment, não fragmente). Nesse caso, o roteador que precisaria fragmentar descarta o pacote e responde com uma mensagem ICMP que informa a MTU do enlace seguinte. O remetente passa então a enviar pacotes menores. Essa técnica, a descoberta da MTU do caminho, é usada pela maioria das conexões atuais. Ligue a opção DF na demonstração acima para ver o que acontece.

Melhor esforço

Até aqui, todos os pacotes chegaram ao destino. Mas o IP não promete isso. Ele oferece um serviço de melhor esforço: cada roteador tenta encaminhar cada pacote, mas, se não conseguir, simplesmente o descarta, sem avisar ninguém.

A causa mais comum de perda é o congestionamento. Um roteador pode receber pacotes mais rápido do que consegue enviá-los por um enlace de saída. Os pacotes em excesso esperam numa fila, na memória do roteador, mas a memória é finita. Na demonstração abaixo, ajuste a taxa de chegada de pacotes; a saída tem capacidade fixa:

Enquanto a taxa de chegada fica bem abaixo da capacidade, a fila quase não se forma. Quando ela se aproxima da capacidade, a fila cresce e cada pacote demora mais para sair. Quando passa da capacidade, a fila enche, e todo pacote que chega é descartado. É por isso que, numa rede congestionada, primeiro as coisas ficam lentas, e depois começam a falhar.

Pacotes também podem chegar fora de ordem. Dois pacotes consecutivos podem seguir caminhos diferentes, por exemplo quando uma rota muda no meio de uma conversa, e o segundo pode ultrapassar o primeiro. Abaixo, os pacotes ímpares seguem pelo caminho de cima, e os pares, pelo caminho de baixo, cujo atraso você pode ajustar:

Isso pode parecer um defeito, mas é uma escolha deliberada. Garantir entrega e ordem exigiria que cada roteador guardasse informações sobre cada conversa que passa por ele. Mantendo o núcleo da rede simples, o trabalho pesado fica nas pontas. O TCP, protocolo que roda nos computadores de origem e de destino por cima do IP, numera os dados, confirma o recebimento, reenvia o que se perdeu e reordena o que chegou embaralhado. Aplicações que preferem rapidez a garantias, como chamadas de voz e jogos, podem usar o UDP, que entrega os pacotes do jeito que chegam.

Esse princípio de manter a rede simples e colocar a inteligência nas extremidades é conhecido como argumento fim a fim, e muitos o consideram uma das razões do sucesso da internet: como a rede faz muito pouco, é possível criar aplicações novas sem pedir permissão a ninguém no meio do caminho.

Camadas

O IP não sabe nada sobre cabos, frequências de rádio ou fibras ópticas. Para levar um pacote até o próximo salto, ele depende de uma tecnologia de enlace. Do outro lado, também não sabe nada sobre páginas web ou mensagens: apenas carrega bytes. Essa divisão de responsabilidades é organizada em camadas, cada uma usando os serviços da camada de baixo:

O desenho lembra uma ampulheta. No topo, há incontáveis aplicações; na base, dezenas de tecnologias de transmissão; no gargalo, um único protocolo. Qualquer aplicação funciona sobre qualquer rede, desde que as duas falem IP. Quando surgiu o Wi‑Fi, nenhuma aplicação precisou mudar, e quando surgiram as chamadas de vídeo, nenhum cabo precisou ser trocado.

Na prática, cada camada embrulha os dados que recebe da camada de cima com seu próprio cabeçalho, num processo chamado encapsulamento. Arraste o controle para encapsular uma mensagem:

O quadro Ethernet também leva um campo no final, o FCS (Frame Check Sequence), uma verificação de erros que cobre o quadro inteiro e é bem mais robusta que o checksum do IP.

O quadro vale para um único enlace. Em cada salto, o roteador remove o quadro, examina o pacote IP, decrementa o TTL e coloca o pacote num quadro novo, adequado ao enlace seguinte. Os endereços IP de origem e destino permanecem os mesmos do início ao fim, enquanto os endereços MAC mudam a cada salto. Arraste o controle para acompanhar o pacote:

Para montar cada quadro, é preciso saber o endereço MAC do próximo salto. Quem faz essa ponte entre os dois tipos de endereço é o ARP (Address Resolution Protocol). O computador envia a toda a rede local uma pergunta como “quem tem o endereço 192.168.1.1?”, e somente o dono desse endereço responde, informando seu MAC. A resposta fica guardada por alguns minutos numa tabela, para que a pergunta não precise ser repetida a cada pacote:

Escassez e NAT

Quatro bilhões de endereços não foram suficientes. Em fevereiro de 2011, a IANA, organização que coordena a distribuição global, entregou os últimos blocos livres aos registros regionais, que foram esgotando os seus nos anos seguintes. O LACNIC distribuiu seus últimos endereços IPv4 em agosto de 2020. Hoje, quem precisa de endereços IPv4 costuma comprá-los ou alugá-los de quem tem sobrando.

A internet sobreviveu a isso graças a um remendo muito bem-sucedido. As faixas privadas que vimos no mapa, como 192.168.0.0/16, podem ser usadas por qualquer rede interna, repetidas em milhões de casas e empresas, porque nunca aparecem na internet pública. Seu celular, seu notebook e sua TV provavelmente têm endereços como 192.168.1.20, e os aparelhos do seu vizinho também.

Para que esses aparelhos alcancem a internet, o roteador da casa faz NAT (Network Address Translation, tradução de endereços de rede). Ele troca o endereço de origem privado de cada pacote que sai pelo seu próprio endereço público e anota a troca numa tabela. Quando a resposta volta, ele consulta a tabela e desfaz a troca no endereço de destino. Para distinguir conversas diferentes, também troca a porta, um número de 16 bits que o TCP e o UDP usam para identificar cada conversa dentro de um mesmo aparelho. Use os botões para iniciar conexões:

Um efeito colateral do NAT é que pacotes vindos de fora sem uma conversa correspondente na tabela não têm para onde ir e são descartados. Isso oferece alguma proteção, mas também atrapalha aplicações que precisam receber conexões, como jogos on‑line e chamadas de vídeo, que recorrem a técnicas elaboradas para contorná-lo. Muitos provedores, inclusive no Brasil, aplicam ainda um segundo nível de NAT dentro da própria rede, o CGNAT, usando a faixa 100.64.0.0/10, de modo que muitos clientes dividem um mesmo endereço público.

IPv6

A solução definitiva para a escassez é o IPv6, especificado na década de 1990. Seus endereços têm 128 bits, o que dá 2128 ≈ 3,4 × 1038 endereços, cerca de 340 undecilhões. É o suficiente para dar mais de 600 sextilhões de endereços a cada metro quadrado da superfície da Terra.

Endereços IPv6 são escritos como oito grupos de quatro dígitos hexadecimais separados por dois-pontos, como 2001:0db8:0000:0000:0000:ff00:0042:8329. Como isso é longo, há duas regras de abreviação: zeros à esquerda de cada grupo podem ser omitidos, e uma única sequência de grupos zerados pode ser trocada por ::. O endereço acima vira 2001:db8::ff00:42:8329. Edite o endereço abaixo ou escolha um exemplo:

Normalmente, os primeiros 64 bits identificam a rede, e os últimos 64 identificam o dispositivo. Uma única rede local IPv6 tem 264 endereços, mais de quatro bilhões de vezes o tamanho de toda a internet IPv4.

O cabeçalho também foi redesenhado. Alterne entre as duas versões na ilustração abaixo:

O cabeçalho IPv6 tem tamanho fixo de 40 bytes, e a maior parte dele é ocupada pelos dois endereços. Vários campos desapareceram. Não há checksum, porque as camadas de enlace e de transporte já verificam erros. Os roteadores não fragmentam mais pacotes, tarefa que ficou apenas com o remetente. As opções passaram para cabeçalhos de extensão, encadeados pelo campo Próximo cabeçalho, que substituiu o campo Protocolo. O TTL passou a se chamar Limite de saltos, que é o que ele sempre foi na prática. E o novo campo Rótulo de fluxo permite marcar os pacotes de uma mesma conversa. Repare também que os 32 bits de cada endereço IPv4 cabem no fim de um endereço IPv6, como nos endereços ::ffff:192.0.2.10, usados para representar endereços IPv4 dentro do IPv6.

A transição é lenta porque as duas versões não são compatíveis entre si: um aparelho que só fala IPv4 não consegue conversar diretamente com um que só fala IPv6. Por isso, a maioria dos aparelhos hoje usa as duas ao mesmo tempo, num arranjo chamado pilha dupla. Segundo as medições do Google, o IPv6 passou de 50% dos acessos pela primeira vez em março de 2026. No Brasil, essa marca foi atingida antes: segundo o NIC.br, com base nos mesmos dados, mais da metade dos usuários brasileiros já usava IPv6 no início de 2024.

Palavras finais

O IP é um protocolo modesto. Ele não garante entrega nem ordem, não sabe o que está carregando e não se lembra de nenhum pacote depois que ele passa. Essa modéstia é justamente o que o tornou universal. Por exigir tão pouco das redes de baixo e prometer tão pouco às aplicações de cima, ele pôde ser implementado em praticamente qualquer coisa que transmita bits, de satélites a lâmpadas inteligentes.

Enquanto esta página carregava, dezenas de pacotes atravessaram o caminho entre um servidor e o seu aparelho. Em cada roteador, um endereço foi comparado com uma tabela, um contador foi decrementado e uma soma foi refeita, sem que ninguém precisasse planejar o trajeto de antemão. É uma ideia simples, repetida bilhões de vezes por segundo em escala planetária.

Leituras adicionais

Os endereços de exemplo vêm das faixas reservadas para documentação (RFC 5737 e RFC 3849) e das faixas privadas (RFC 1918); os endereços MAC são fictícios.