Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

02 - Representação de Endereços

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Representação de Endereços IPv6

Diferente do IPv4, que usa decimal separado por pontos (ex: 192.168.1.1), o IPv6 é representado em hexadecimal separado por dois-pontos (:). A notação foi definida na RFC 4291 e refinada para padronização canônica pela RFC 5952 (A Recommendation for IPv6 Address Text Representation), que elimina ambiguidades na escrita.

1. Estrutura Básica

Um endereço IPv6 completo tem 32 caracteres hexadecimais, divididos em 8 grupos de 4 dígitos (conhecidos como hextetos ou quartets). Cada dígito hexa representa 4 bits, então: $8 \times 4 \times 4 = 128$ bits.

Exemplo de formato completo:

2001:0db8:0000:0000:0008:0800:200c:417a

Cada hexteto corresponde a 16 bits. Os primeiros 64 bits normalmente identificam o prefixo de rede (rota), enquanto os últimos 64 bits compõem o Interface ID.


2. Regras de Simplificação (RFC 5952)

Para facilitar a leitura e escrita humana, a RFC 5952 define duas regras obrigatórias de compressão, que devem ser aplicadas sempre que possível.

Regra 1: Omissão de Zeros à Esquerda (Leading Zeros)

Dentro de cada grupo de 4 dígitos, os zeros à esquerda podem (e devem, na forma canônica) ser omitidos. Cada hexteto é representado com pelo menos 1 dígito.

Forma expandida Forma comprimida
:0db8: :db8:
:0000: :0:
:0800: :800:
:0042: :42:
:0001: :1:

Aplicando a Regra 1 ao endereço exemplo:

2001:db8:0:0:8:800:200c:417a

Regra 2: Compressão de Zeros (:: - Double Colon)

Uma sequência contínua de um ou mais grupos compostos apenas por zeros pode ser substituída por dois pontos duplos (::).

IMPORTANTE: Esta regra só pode ser aplicada uma única vez por endereço. Se houver duas ou mais sequências de zeros, deve-se comprimir a maior delas; em caso de empate, comprime-se a primeira (esquerda). A regra garante que o número de grupos omitidos seja computável: $8 - \text{grupos visíveis} = \text{grupos omitidos}$.

Aplicando as Regras 1 e 2 ao exemplo:

2001:db8::8:800:200c:417a

Exemplos de Compressão Passo a Passo

Endereço expandido Após Regra 1 Forma canônica (RFC 5952)
2001:0db8:0000:0000:0000:0000:0000:0001 2001:db8:0:0:0:0:0:1 2001:db8::1
fe80:0000:0000:0000:021a:2bff:fe3c:4d5e fe80:0:0:0:21a:2bff:fe3c:4d5e fe80::21a:2bff:fe3c:4d5e
0000:0000:0000:0000:0000:0000:0000:0000 0:0:0:0:0:0:0:0 ::
0000:0000:0000:0000:0000:0000:0000:0001 0:0:0:0:0:0:0:1 ::1
2001:0db8:abcd:0012:0000:0000:0000:0000 2001:db8:abcd:12:0:0:0:0 2001:db8:abcd:12::

Resolução Inversa: Expandindo ::

Para expandir um endereço comprimido de volta à forma completa, conta-se o número de hextetos visíveis e completa-se com 0000 até atingir 8 grupos.

Exemplo: 2001:db8::1 tem 3 hextetos visíveis (2001, db8, 1). Logo, $8 - 3 = 5$ hextetos de zeros a inserir entre db8 e 1:

2001:0db8:0000:0000:0000:0000:0000:0001

3. Endereços Especiais

Loopback (Localhost)

  • Completo: 0000:0000:0000:0000:0000:0000:0000:0001
  • Comprimido: ::1

Equivalente ao 127.0.0.1 do IPv4. Usado para testes locais da pilha TCP/IP.

Não Especificado (Unspecified Address)

  • Completo: 0000:0000:0000:0000:0000:0000:0000:0000
  • Comprimido: ::

Equivalente ao 0.0.0.0 do IPv4. Usado por um host antes de obter seu próprio endereço (ex: pacote DHCPv6 SOLICIT de origem).


4. Representação de Rede (Prefixo CIDR)

No IPv6, não existem máscaras de sub-rede no formato decimal (255.255.255.0). Usa-se exclusivamente a notação CIDR para indicar o tamanho do prefixo.

Exemplo:

2001:db8:abcd:12::/64
  • O /64 indica que os primeiros 64 bits identificam a rede e os 64 bits restantes identificam a interface (Interface ID).

Padrões Comuns de Prefixo

Prefixo Significado RFC
/128 Host único —
/127 Ponto-a-ponto entre roteadores (RFC 6164) RFC 6164
/64 Sub-rede padrão (exigido para SLAAC) RFC 4291
/56 Atribuição típica para clientes residenciais RIPE/RIRs
/48 Atribuição típica para sites/empresas RFC 4291
/32 Alocação a ISPs (LIR) políticas RIR
/12 Alocação a TIER-1 / IANA IANA

5. IPv6 em URLs (RFC 3986)

Como o IPv6 usa : como separador, isso entra em conflito com a sintaxe de URL (http://host:porta/caminho). A solução definida pela RFC 3986 é envolver o endereço IPv6 em colchetes [ ].

Sintaxe Exemplo
HTTP com porta http://[2001:db8::1]:8080/index.html
HTTPS https://[2001:db8::1]/
SSH ssh user@[2001:db8::1]
Ping ping 2001:db8::1 (sem colchetes, pois não há porta)
Curl curl -v "http://[2001:db8::1]:8080/"

Os colchetes nunca fazem parte do endereço em si — servem apenas como delimitador na URL. Ferramentas de DNS (registro AAAA), ping, traceroute, ip não usam colchetes.


6. Identificadores de Zona (Zone ID)

Em hosts multihoming (várias interfaces) e quando se usa Link-Local (fe80::/10), o mesmo endereço fe80::1 pode existir em múltiplas interfaces do mesmo host. Para desambiguar, usa-se o Zone ID (RFC 4007), separado por %:

fe80::1%eth0
fe80::1%eth1
fe80::1%2     (Windows: ID numérico da interface)

O Zone ID é local ao host e nunca trafega pela rede.


7. Comparação Visual: IPv4 vs IPv6

Aspecto IPv4 IPv6
Base numérica Decimal Hexadecimal
Separador Ponto (.) Dois-pontos (:)
Comprimento típico 7–15 caracteres 15–39 caracteres
Campos 4 octetos (8 bits cada) 8 hextetos (16 bits cada)
Loopback 127.0.0.1 ::1
Não especificado 0.0.0.0 ::
Máscara 255.255.255.0 (decimal) /24 (CIDR) — sempre CIDR

Apesar de mais longo, o IPv6 é mais legível para máquinas: o hexadecimal mapeia diretamente para bits (4 bits por dígito), enquanto o decimal exige conversão para binário a cada octeto.


8. Boas Práticas e Armadilhas Comuns

  • Sempre use a forma canônica RFC 5952 em configurações e logs: minúsculas, sem zeros à esquerda, com :: aplicado uma única vez na maior sequência de zeros.
  • Nunca use :: mais de uma vez: 2001:db8::1::5 é inválido.
  • Em scripts de validação, use ipcalc, python ipaddress ou sipcalc para normalizar entradas.
  • Em firewalls e ACLs, normalize antes de comparar — 2001:0DB8::1 e 2001:db8::1 devem ser tratados como o mesmo endereço.
  • Em documentação, use sempre o prefixo reservado para exemplos: 2001:db8::/32 (RFC 3849). Nunca use endereços reais em exemplos.

Exemplo Python (normalização canônica)

import ipaddress
addr = ipaddress.IPv6Address('2001:0DB8:0000::1')
print(addr.compressed)  # 2001:db8::1
print(addr.exploded)    # 2001:0db8:0000:0000:0000:0000:0000:0001

9. Conclusão

A representação de endereços IPv6 pode parecer intimidadora à primeira vista, mas é estruturada e regular. As duas regras de compressão (RFC 5952) reduzem endereços longos a formas compactas legíveis. A padronização da forma canônica garante interoperabilidade entre sistemas operacionais, ferramentas de rede e logs. Dominar a leitura, escrita e expansão de endereços IPv6 é pré-requisito para qualquer engenheiro que opere redes modernas, configure firewalls, depure tráfego ou planeje sub-redes na era pós-IPv4.