sábado, 9 de agosto de 2014

Desvendando o IPv6

Fiquei um tempo fora daqui, o tempo (vulgo organização) estava pequeno.
Novos projetos surgem e ao mesmo tempo os antigos continuam em andamento!

Decidi aproveitar o blog para publicar meus estudos sobe o IPv6, uma realidade muito mais próxima de nós do que pensamos. Tem uma bibliografia bem legal e indico o livro do Samuel Henrique Bucke Brito chamado "IPv6 O Novo Protocolo da Internet" com uma linguagem bacana e bem fácil de entender. Além dele, temos já os materiais atualizados do CCNA 5.0 que já tratam do assunto com mais profundidade e as atualizações da maioria dos livros de redes que temos no mercado.

Uma breve introdução ao IPv6:


O IPv6 é um protocolo totalmente novo com relação ao IPv4, trazendo um cabeçalho com aprimoramentos e introduzindo novos serviços. Ele tem 4 vezes o tamanho em bits do IPv4 o que mostra a quantidade de endereços possíveis que podemos ter com esse novo protocolo. Lembre-se que o crescimento é exponencial ou seja, a cada bit a mais temos a duplicação da quantidade.
São 340 undecilhões de endereços possíveis (!!!!). Entenda, é muita coisa. São 79 trilhões de vezes o IPv4, composto por 4.294.967.296 de endereços. 
O motivo principal que podemos apresentar para a migração do IPv4 para o IPv6 é a questão do espaço destinado ao endereçamento. O IPv4, hoje praticamente esgotado não dará conta das novas tendências apresentadas para nós como a Internet de Todas as Coisas onde qualquer coisa poderá se comunicar na rede, desde que tenha um endereço para isso.
No final das contas não é só isso que justifica embora esse motivo seja muito importante. Podemos também justificar a migração com alguns pontos interessantes:
  • O IPv6 prevê a acomodação de serviços convergentes (e não é isso que a Internet de todas as coisas precisa?) Serviços interagindo pelo mesmo meio como streaming de vídeo em tempo real, VoIP, entre outros serviços possíveis. Isso significa um protocolo voltado para a qualidade do serviço prevendo a coexistência desses serviços.
  • O IPv6 permite a mobilidade dos usuários pois eles podem ser contatados em qualquer rede por meio de seu IP. Isso significa que cada pessoa pode ter seu próprio IP, como se fosse um RG. Esse é o MIPv6.
  • Possui um cabeçalho mais simplificado com tamanho fixo com um sistema de endereçamento hierárquico que simplifica o processamento nos roteadores.
  • Ele dispensa a adoção do NAT, protocolo usado no IPv4 para traduzir vários endereços privados em um endereço público.
 Não se assuste com o endereço. Ele assusta quando visto pela primeira vez. Quem está acostumado com um endereço como 192.168.10.5/24 e se depara com 2001:0db8:f000::/64 assusta um pouco mas a lógica é exatamente a mesma. Sem segredos como veremos aqui.

O cabeçalho IPv6:


Como protocolo, o IP tem a importante função de ser um ponto comum entre as camadas de serviços e as camadas de rede TCP/IP. Entenda que a camada de Internet do TCP/IP é um funil com relação às demais pois, se partirmos das aplicações, todas elas são transportadas pelo IP e se partirmos do meio físico, o IP é transportado por diversos frames de acordo com o meio físico usado. Lembre-se, tudo é IP, até detergente :-).
Podemos considerar como uma das evoluções do IPv6 com relação ao IPv4 a disposição dos campos do seu cabeçalho. O IPv4 possui 12 campos e seu tamanho varia de 20 a 60 bytes por causa de um campo adicional para opções. 

Cabeçalho IPv4
O cabeçalho IPv6 possui um formato otimizado com 8 campos e seu tamanho é fixo em 40 bytes. Esse tamanho fixo auxilia os roteadores pois não precisam mais analisar o campo IHL referente ao tamanho do cabeçalho do pacote em questão.

Cabeçalho IPv6
O cabeçalho IPv6 possui um campo novo chamado Identificador de Fluxo responsável por adicionar a funcionalidade de QoS que pode associar vários pacotes de um mesmo tipo em um único fluxo, muito útil para aplicações multimídia que precisem de streaming. Alguns outros campos foram renomeados com relação ao IPv4 com segue:

Campos IPv4 que sofreram mudanças em seus nomes para IPv6


O cabeçalho IPv6 pode ser simplificado desta forma pois não possui o campo elástico de opções (IPv4). As funcionalidades que eram contempladas por esse campo ficaram sob responsabilidade dos chamados cabeçalhos de extensão. Uma diferença muito importante é que estes cabeçalhos extras não precisam ser processados pelos roteadores intermediários durante a transmissão dos pacotes. O cabeçalho principal IPv6 é enxuto, contendo apenas as funcionalidades essenciais para sua função.
Neste caso, o campo "Próximo Cabeçalho" surge exatamente para apontar quem virá, se um cabeçalho de extensão ou o cabeçalho da próxima camada.

Cabeçalhos de Extensão:


Existem várias possibilidades de cabeçalhos de extensão a serem encadeados com o principal, cada qual com seu código de identificação a ser inserido no campo "Próximo Cabeçalho" e sua ordem. De acordo com a RFC2460:
  1. Cabeçalho padrão IPv6
  2. Hop-by-Hop (0)
  3. Destination Options (60)
  4. Routing Header (43)
  5. Fragment Reader (44)
  6. Authentication Header (51)
  7. Encapsulation Security Payload (50)
  8. Destination Options (60)
  9. Mobility (135)
  • Ausência de Próximo Cabeçalho (59)
  • ICMPv6 (58)
  • UDP (17)
  • TCP (6)

Hop-By-Hop: Este é o único cabeçalho de extensão que é analisado pelos roteadores intermediários e sempre deve ser o primeiro após o principal. Este cabeçalho é usado para o roteamento de tráfego multicast.
Destination Options: Este cabeçalho pode aparecer duas vezes, por isso não errei ao colocá-lo na posição 3 e 8 na lista acima. Uma antes do cabeçalho de roteamento e outra antes do cabeçalho da camada superior. As opções aqui transmitidas são definidas para serem analisadas pelo destinatário do pacote dependendo da aplicação que gerou a transmissão.
Routing Header: Inicialmente designado para informações de direcionamento dos pacotes por roteadores intermediários. Com a RFC5095 esse cabeçalho tornou-se obsoleto e foi reaproveitado com um novo cabeçalho denomiado "Routing Type 2" onde os campos foram reaproveitados para o cabeçalho "Mobility" usado para o MIPv6.
Fragment Header: A fragmentação do pacote ocorre apenas quando o MTU (Maximum Transfer Unit) dele for maior que o máximo permitido pelo meio. Essa operação, quando usamos o protocolo IPv4 ocorre no próprio roteador onde esse tamanho excedente fora identificado. No IPv6, a responsabilidade dessa fragmentação fica por conta da origem do tráfego. Quando um roteador intermediário recebe pacotes que ultrapassem o MTU, o mesmo envia uma mensagem informando que o pacote excede o tamanho.
Authentication Header (RFC2402) e Encapsulation Security Payload (RFC2406): São cabeçalhos referentes a segurança (IPSec) que se tornam nativos no IPv6 enquanto no IPv4 precisavam ser implementados. São soluções referentes a autenticação, integridade e confidencialidade por meio de criptografia.

O Endereço IPv6


Escrito em hexadecimal, dividido em 8 grupos com 16 bits cada que somados nos fornecem os 128 bits totais. Um endereço IPv6 é escrito como:

2001:0db8:acdc:cafe:f0f0:faca:1234:9800

É indiferente utilizarmos letras maiúsculas ou minúsculas ou seja, não é case sensitive com o sistema Linux. Tanto faz escrevermos as letras F e f. São a mesma. Optou-se por usar o sistema hexadecimal por ser a forma mais curta de se escrever o endereço. Se fôssemos escrever esse endereço em binário, ficaria da seguinte forma:

2001:0db8:acdc:cafe
0010000000000001:0000110110111000:1010110011101100:1100101011111110
f0f0:faca:1234:9800
1111000011110000:1111101011001010:0001001000110100:1001100000000000

O endereço é tão grande que precisei dividir em duas partes para caber aqui.
As regras importantes para o entendermos o formato são as seguintes:

  • Embora cada grupo possua 4 dígitos hexadecimais, zeros à esquerda são desnecessários, então neste endereço de exemplo podemos dizer que o 0db8 pode ser escrito apenas como db8.
  • Quando possuímos grupos de zeros contínuos, podemos escrevê-los da seguinte forma:
2001:0db8:0000:0000:0000:0000:0000:00ff
2001:db8:0:0:0:0:0:ff
2001:db8::ff

Note, as três formas são corretas para escrevermos o endereço. Os zeros à esquerda são ocultados permanecendo apenas um deles. Quando temos um conjunto contínuo de zeros ainda podemos substituí-los por :: para ocultá-los. Essa regra de abreviação com :: só pode ser usada uma vez como podemos ver:
2001:0db8:0000:0000:0000:ffff:0000:0000
2001:db8::ffff:0:0 ou 2001:db8::ffff:0000:0000

Não podemos escrever 2001:db8::ffff:: 

Como no IPv4, o IPv6 também possuí máscara e sem ela ele não teria significado nenhum. É a máscara que identifica a parte do endereço que indica a rede/subrede e a parte que identifica o host de fato. Usando o IPv4 tínhamos duas opções para identificação da máscara:
  • Decimal: 255.255.255.0
  • CIDR: /24
Para o IPv6 a notação CIDR é mandatória sendo que, por exemplo, um prefixo /64 indica que os primeiros 64 bits do endereço são identificadores da rede (bit em 1):
ffff:ffff:ffff:ffff:0000:0000:0000:0000
Por causa da grande quantidade de endereços, de acordo com a RFC4291 todas as redes locais devem ser necessariamente /64 independentemente da quantidade de hosts. 
A estrutura do endereço segue a seguinte lógica:


Na próxima parte desse material vamos falar sobre os tipos de endereços IPv6 e sobre como calcular subredes IPv6! Aguardem!!



P





2 comentários: