Notação de endereço IPv6: o que realmente funciona na prática
Endereços IPv6 parecem assustadores à primeira vista, mas a notação é mais simples do que a maioria das pessoas imagina. A forma canônica completa tem oito grupos de quatro dígitos hexadecimais separados por dois pontos, como 2001:0db8:0000:0000:0000:ff00:0042:8329. Ninguém escreve assim no dia a dia. A regra de compressão permite dois tipos de abreviação. Primeiro, zeros à esquerda em cada grupo podem ser suprimidos. O grupo 0042 vira 42, e 0db8 vira db8. Segundo, uma sequência consecutiva de grupos totalmente zerados pode ser substituída por dois pontos duplos (::). Isso significa que o mesmo endereço acima pode ser escrito como 2001:db8::ff00:42:8329. Mais limpo, mais rápido de ler.
qual notação de endereço ipv6 é válida
Esta é a pergunta que aparece com frequência em fóruns técnicos, e a resposta direta é: qualquer forma que respeite as regras da RFC 4291 é válida. Endereços com compressão de zeros à esquerda, compressão de grupos nulos com ::, ou ambas combinadas, são todos aceitáveis desde que a conversão para a forma expandida gere exatamente oito grupos de quatorze bits. A parte que causa confusão é o uso do ::. Ele só pode aparecer uma vez em um único endereço. Se você tentar usar duas vezes, como em 2001:db8::1::2, o endereço fica ambíguo porque o parser não sabe quantos grupos zero cada :: representa. Isso é inválido e a maioria dos sistemas rejeita sem warning claro.
Outro detalhe que poucos mencionam: letras hexadecimais podem ser maiúsculas ou minúsculas sem diferença funcional. FE80:0000::1 é idêntico a fe80::1. Sistemas resolvem ambos da mesma maneira. Endereços de loopback, que na forma expandida são 0000:0000:0000:0000:0000:0000:0000:0001, têm uma notação comprimida especial amplamente adotada: ::1. Note que a forma :: seria tecnicamente válida mas representa todos os zeros, que é o endereço de loopback em si. Para diferenciação prática, ::1 é o padrão universally reconhecido.
Anotações com sufixo de prefixo também são comuns e válidas. Escrever 2001:db8::ff00:42:8329/48 indica que os primeiros 48 bits representam a rede e o resto identifica o host. Isso não altera a validade da notação do endereço em si, apenas adiciona informação sobre a sub-rede. Link-local addresses merecem atenção especial porque aparecem em toda configuração prática. Elas começam com fe80 e são normalmente acompanhadas de um identificador de interface (scope ID) separado por porcentagem. Algo como fe80::aede:48ff:fe01:3a2b%eth0. O sufixo %eth0 informa qual interface de rede o link-local se aplica. Sem esse sufixo, o endereço é tecnicamente válido como notação, mas praticamente inútil em sistemas com múltiplas interfaces porque o roteador não sabe a qual interface encaminhar o pacote.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Um problema que encontrei na prática envolve migração de configurações entre sistemas. Migrei um servidor onde os endereços IPv6 estavam documentados na forma expandida, com todos os grupos completados em quatro dígitos hexadecimais. Ao importar para um novo sistema de automação que usava bibliotecas de parsing modernas, recebi erros de validação. O problema era que o endereço fe80:0000:0000:0000:0a00:27ff:fe0e:5b54 foi salvo sem compressão alguma, e a biblioteca esperava a forma comprimida. Nenhuma das duas é inválida, mas o sistema de validação que estava usando tinha uma lógica rígida demais que aceitava apenas uma das formas. A solução foi converter tudo para a forma expandida via script Python antes de passar para a ferramenta, usando a função ipaddress.IPv6Address que normaliza automaticamente. Isso mostra um ponto importante que raramente é destacado: ferramentas de validação podem ter comportamento inconsistentes quanto à forma aceita. Sempre testei em pelo menos dois interpretadores diferentes antes de confiar cegamente na validação de um sistema específico.
Endereços IPv4-mapped e IPv4-compatible também existem mas estão essencialmente obsoletos. A notação ::ffff:192.0.2.1 ainda é reconhecida por alguns sistemas para interoperabilidade, mas a RFC 4291 recomenda contra o uso de mapped addresses em novos projetos. A forma IPv4-compatible, como ::192.0.2.1, também está descontinuada pela RFC 4291 e não deve ser usada. Um erro comum de iniciante é acreditar que qualquer sequência de zeros pode ser comprimida com ::. Se você tiver dois blocos separados de zeros, como em 2001:0:0:1:0:0:0:1, só consegue comprimir um deles. Você pode escolher comprimir o segundo bloco e escrever 2001:0:0:1::1, ou comprimir o primeiro e escrever 2001::1:0:0:0:1, mas nunca comprimir ambos. A escolha afeta qual bloco fica com zeros explícitos no endereço final.
Grupos de apenas um dígito também são válidos após compressão de zeros à esquerda. O grupo 0a00 pode ser escrito simplesmente como a00, e 0001 vira 1. O limite é quatro dígitos hexadecimais no máximo por grupo, mas nunca mais do que isso. O uso de notações válidas mas obscuras pode causar problemas em ferramentas legacy. Endereços com muitos grupos comprimidos manualmente, como 2001:0db8:0:0:0:0:0:1 escrito como 2001:db8::1, funcionam perfeitamente em sistemas modernos mas alguns scripts antigos de configuração de firewall falham ao processar a forma comprimida. Nesses casos, expandir manualmente para a forma completa resolve. Leva mais tempo mas elimina ambiguidades em sistemas sensíveis.
Na prática, a forma mais usada e recomendada é a compressão máxima permitida usando :: uma única vez para o maior bloco consecutivo de zeros, e supressão de zeros à esquerda em todos os grupos restantes. Isso produz endereços curtos, legíveis e amplamente compatíveis com qualquer implementador moderno de pilha IPv6.