IPv6 para Programadores

O crescimento da Internet

A Internet como a conhecemos hoje teve as suas origens na ARPANET [1], a primeira rede a implementar o conjunto de protocolos IP (Internet Protocol) [2], do qual o mais conhecido é o TCP (Transmission Control Protocol) [3].

Pretendia-se um protocolo que transmitisse informação, dividida em pacotes de tamanho reduzido, e cuja gestão de rede fosse descentralizada, já que em tempo de Guerra Fria havia a possibilidade de destruição de partes da rede.

Foi utilizada a versão 4 do protocolo IP (IPv4). Na altura estimava-se um número reduzido de máquinas ligadas à rede, mas 40 anos depois a situação é bem diferente:

Data Utilizadores ligados à Internet
1995-12 16 M
2000-12 361 M
2005-12 1018 M
2010-09 1971 M
2015-12 (est.) 3353 M

Fonte: http://www.internetworldstats.com/emarketing.htm

No início dos anos 1990s, e até hoje, dá-se um crescimento continuado do número de pessoas ligadas à Internet, que actualmente se situa perto de 50% da população mundial. Adicionalmente, cada utilizador tem mais que um aparelho (computador, telemóvel, etc.). Mais recentemente (e apesar de o conceito não ser novo), surge a Internet of Things, cuja ideia é ligar todos os aparelhos do dia-a-dia à Internet (televisão, frigorífico, carro, elevador, relógio, roupa, animal de estimação, etc.).

O protocolo IPv4 tem uma grave limitação de endereçamento: só suporta 232 ou 4294967296 endereços (teóricos) mas devido a limitações técnicas, apenas se podem atribuir pouco mais de 3000 milhões, ou seja, há actualmente menos endereços públicos disponíveis que o número de utilizadores e máquinas/dispositivos.

A IANA (Internet Assigned Numbers Authority) é a entidade responsável pela atribuição de endereços IPv4 e IPv6, assim como outras numerações (e.g. portas dos protocolos TCP e UDP, etc.). Esta, por sua vez, delega em 5 RIRs (Regional Internet Registries). O RIPE NCC é responsável pela atribuição de endereços na Europa (incluindo toda a Rússia) e Médio Oriente. Esta é a lista de endereços IPv4 actualmente disponíveis:

IPv4: disponibilidade de endereços

Nota: Um bloco “/8” corresponde a 224 ou 16777216 endereços

Fonte: http://www.potaroo.net/tools/ipv4/plotend.png (2015-12)

Devido a uma política conservadora de atribuição de endereços, assim como de recuperação de endereços não utilizados, a disponibilidade do RIPE tem-se mantido estável, actualmente com cerca de 15 milhões de endereços IPv4 disponíveis. Já a ARIN, o RIR da América do Norte, esgotou totalmente há alguns meses. Isto significa que os operadores que pretendam ligar-se à internet nesse continente terão que comprar os blocos de endereços num mercado especial (com custos muito elevados).

IPv6, o sucessor do IPv4

Desde o final dos anos 1980s que este problema tem sido analisado. Várias alternativas para substituição do IPv4 foram propostas:

Versão IP (*) Nome Estado
0 a 3 Internet Protocol tests Experimental / Obsoleta
4 Internet Protocol Version 4 (IPv4) Ainda em funcionamento
5 Internet Stream Protocol Experimental
6 Internet Protocol Version 6 (IPv6) Em funcionamento / Actual
7 TP/IX Experimental / Obsoleta
8 PIP Experimental / Obsoleta
9 TCP and UDP with Bigger Addresses (TUBA) Experimental / Obsoleta
10 a 15 Reservada Reservada

(*) Corresponde ao campo de Versão do cabeçalho dum pacote IP, cuja dimensão é 4 bits.

Após vários anos de debate e análise, as instituições que geriam a internet optaram pelo IPv6 como melhor alternativa ao IPv4. Devido à lenta adopção do IPv6, foi também criado o protocolo NAT (Network Address Translation) [4] que permite partilhar um único endereço IPv4 público com vários dispositivos que usam endereçamento privado (e.g. 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, entre outros).

O IPv6 trouxe algumas melhorias. Estas são apenas algumas:

  • Endereçamento maior:
    • Permite 2128 ou 340282366920938463374607432768211456 endereços, o suficiente para atribuir um endereço a cada átomo do universo;
    • Efectivamente apenas 264 ou 18446744073709551616 endereços são atribuídos publicamente, mas mesmo assim mais que suficientes;
    • Os outros 264 endereços (ou mais) são atribuídos por cliente, também suficientes para todas as nossas necessidades em dispositivos IoT;
    • NAT é desnecessário: todos os dispositivos têm endereço IPv6 público.
  • Transmissão mais rápida:
    • Não se dá fragmentação de pacotes (i.e., necessidade de dividir os pacotes se excederem a MTU [5] de cada troço da rede por onde passa). A MTU típica de cada pacote em redes Ethernet é de 1500 bytes, embora seja possível usar Jumbo Frames até 9000 bytes. O tamanho máximo de cada pacote é obtido quando se inicia uma ligação (usando Path MTU Discovery [6]), evitando a fragmentação de pacotes e reduzindo assim a latência;
    • A checksum dos pacotes de IPv4 incluíam todos os campos do cabeçalho, o que obrigava a recalcular em cada hop (nó da rede). Em IPv6 a checksum aplica-se apenas aos campos do cabeçalho que não se alteram desde a origem até ao destino, evitando a necessidade de recalcular, reduzindo também a latência;
    • Simplificação do hardware em consequência da não fragmentação e de não necessitar de recalcular a checksum.
  • Routing mais eficiente:
    • O Routing em IPv4 implicava gerir uma lista significativa de blocos por cada AS (Autonomous System, ou seja, as atribuições de cada operador). Já em IPv6, como as atribuições são bastante grandes, cada operador tem tipicamente um único bloco;
    • Sem NAT não existe necessidade de tradução de endereços públicos/privados.

O IPv4 será descontinuado num futuro próximo, ficando apenas a funcionar o IPv6.

IPv6 para tótós

O protocolo IPv6 foi originalmente publicado no RFC1883 [7], e actualizado pelo RFC2460 [8], entre outros. Aqui fica o resumo que qualquer profissional de informática deve saber.

Consoante o tipo de ligação disponível, há várias alternativas para acesso aos mundos IPv4 e IPv6:

  • Apenas IPv4 nativo:
    • É possível ligar a IPv6 utilizando Túneis [9] (6in4, 6to4/Teredo, 6RD, etc.).
  • IPv4 + IPv6 nativos (chamado Dual Stack):
    • Acesso directo sem túneis;
    • Acesso IPv4 pode eventualmente utilizar NAT para partilhar um endereço público com vários dispositivos com endereços IPv4 privados.
  • Apenas IPv6 nativo:
    • É possível ligar a IPv4 utilizando túneis e outros métodos (NAT64/DNS64, 464XLAT, DS-Lite, etc.)
    • Muito utilizado na Ásia onde não é viável facultar endereços IPv4 públicos aos utilizadores;
    • A título de curiosidade, a infraestrutura interna do Facebook tem exclusivamente endereçamento IPv6, só os frontends suportam IPv4.

Formato dos endereços IPv6:

  • 128 bits;
  • 32 dígitos hexadecimais (0-9, A-F), case insensitive;
  • 8 grupos de 4 dígitos hexadecimais usando : como separador;
  • Em cada grupo, os 0 à esquerda podem ser omitidos;
  • :: significa que todos os dígitos num ou mais grupos seguidos são 0. Só pode ser utilizado uma vez;
  • / define o scope da subnet – usa dígitos em decimal (0 a 128);
  • % define a interface física por onde passa a comunicação;
  • Os endereços podem ser envolvidos em parêntesis rectos se necessário, em particular quando se usam números das portas.

O mesmo endereço IPv6 pode ser escrito de várias formas. Aqui fica um exemplo (os espaços estão presentes apenas para facilitar a leitura e não devem ser utilizados):

  • DNS: FCCN.PT (registo AAAA)
  • Endereço: 2001:0690:0A00:1036:1113:0000:0000:0247/128
  • Reduzido: 2001: 690: A00:1036:1113:   0:   0: 247/128
  • Canónico: 2001: 690: A00:1036:1113::          247
  • Alocação da rede: 2001: 690::/29
  • Com um interface: 2001: 690:A00:1036:1113::247%21
  • Com uma porta: [2001:690:A00:1036:1113::247]:80 (HTTP)

Também o PTR (pointer record – usado para reverse DNS, ou seja, para obter o endereço DNS a partir do endereço de IP) muda em IPv6:

  • PTR:     4.2.0.0.0.0.0.0.0.0.0.3.1.1.1.6.3.0.1.0.0.a.0.0.9.6.0.1.0.0.2.ip6.arpa. IN PTR FCCN.PT.

Em IPv4 os operadores entregam normalmente um endereço público nas casas/empresas, mas com IPv6 é entregue uma rede inteira. O mínimo é um /64, mas alguns operadores entregam uma gama maior, como /60 ou /56. Os clientes podem assim gerir as suas subnets como entenderem:

IPv6: subnetting

À semelhança de IPv4, existem alguns endereços especiais em IPv6. Por exemplo, o ::1 é equivalente ao 127.0.0.1 ou LOCALHOST:

Addresses Range Scope
Loopback ::1 host
Link Local fe80::/10 link
Unique Local fc00::/7 global
Global Unicast 2000::/3 global
6to4 2002::/16 global
Multicast ff00::/8 variable
Teredo 2001::/32 global

Publicado na edição 51 (PDF) da Revista PROGRAMAR.