Internet Protocol 6
Introdução
Na década de 1990 a World Wide Web sofreu um grande bum, com muitas empresas entrando na Internet e solicitando IP para entrar nesse grande mercado que é a Internet, servidores e provedores de acessos precisavam cada um possuir um único IP em todo o mundo para trafegar na rede, com isso, notou-se que a quantidade de endereços IPv4 iria acabar em breve, não existia (e nem vai existir) uma quantidade suficiente de endereços IPv4 para permitir uma escalabilidade da Internet com a quantidade total de endereços IPv4 existente e com o crescimento da dessa grande rede, esse era um problema iminente.
Foi então que Internet Engineering Task Force (IETF) decide criar um novo Protocolo de Internet, este teria que fornecer uma quantidade de endereços superior ao seu antecessor e ainda corrigir algumas falhas que o mesmo possuía. A criação teve inicio na década de 1990 e o projeto do IPv6 foi finalizado em 6 de junho de 2012.
Vale ressaltar que o projeto como um todo foi finalizado, mas ainda sofre atualizações quando necessário para tornar a Internet um lugar cada vez melhor.
Internet Engineering Task Force (IETF)
O IETF é uma grande comunidade internacional aberta de designers de rede, operadores, fornecedores e pesquisadores preocupados com a evolução da arquitetura da Internet.
O propósito da IETF é desenvolver e manter padrões para tecnologias que são usadas para fornecer serviço de internet ou para fornecer serviços sobre a internet.
ICANN
A ICANN (Internet Corporation for Assigned Names and Numbers) é uma organização internacional sem fins lucrativos que é responsável por coordenar e gerenciar o sistema de nomes de domínio (DNS) da Internet. A ICANN foi criada em 1998 para supervisionar a atribuição de nomes de domínio, endereços IP e outros identificadores exclusivos na Internet. A organização trabalha para garantir a estabilidade e segurança do sistema de nomes de domínio da Internet, além de promover a concorrência e a inovação no setor de registradores de nomes de domínio.
A ICANN trabalha com outras organizações, como os Registros de Domínio de Primeiro Nível (TLDs) e os Registros Regionais da Internet (RIRs), para garantir que o sistema de nomes de domínio da Internet esteja funcionando de forma adequada e segura em todo o mundo. Em resumo, a ICANN coordena a alocação e a atribuição de nomes na zona raiz do Sistema de Nomes de Domínio (DNS), coordena o desenvolvimento e a implementação de políticas relacionadas a registros de nomes de domínio de segundo nível em Domínios Genéricos de Primeiro Nível (gTLDs), promove a coordenação da operação e a evolução do sistema de servidor de nomes da raiz do DNS, Coordena a alocação e a atribuição no nível mais alto de números de Protocolo da Internet (IP) e números de Sistemas Autônomos e colabora com outras entidades, conforme apropriado, para fornecer os registros necessários para o funcionamento da Internet, de acordo com as especificações das organizações de desenvolvimento de padrões de protocolo da Internet.
Como são muitas coisas par fazer, a ICANN delega algumas dessas responsabilidades operacionais para a IANA. Os RIRs trabalham em conjunto com a IANA para garantir a distribuição e alocação justa e eficiente dos recursos de endereçamento de Internet em suas respectivas regiões geográficas.
Internet Assigned Numbers Authority (IANA)
A IANA (Internet Assigned Numbers Authority) hoje é administrada pela ICANN e possui a responsabilidade pela coordenação da atribuição de parâmetros técnicos de protocolo da Internet, pela administração de certas responsabilidades associadas ao gerenciamento de zona raiz do DNS da Internet e pela alocação de endereços IP da Internet.
Assim, a ICANN trabalha em conjunto com a IANA para garantir que o sistema de nomes de domínio da Internet e os recursos de endereçamento de Internet sejam gerenciados de forma eficiente e segura em todo o mundo. Para facilitar a distribuição de blocos de endereços IP em todo o mundo, a IANA delega a distribuição de endereços para os RIRs.
Com essa hierarquia, cria-se um sistema de gestão mais simplificado na distribuição mundial, onde cada RIR é responsável por um continente (tendo exceções), com isso, o sistema de distribuição dos blocos não fica totalmente unificado em apenas uma instituição, sendo dividido em cinco instituições, mas todas ela possuem relação direta com a IANA.
IR - Internet Registry
Um Registro Internet (IR) é uma organização responsável pela alocação de espaços de endereços IPV4 a seus membros ou clientes e do registro dessa distribuição. Os IRs estão classificados de acordo com sua função principal e alcance territorial dentro da estrutura hierárquica delineada na figura abaixo.
A imagem abaixo (Retirada de www.lacnic.net) mostra a relação entre a IANA e os RIRs/NIRs/LIRs.
RIR - Regional Internet Registry
O RIR (Regional Internet Registry) é uma organização que é responsável por gerenciar a distribuição e alocação de recursos de endereçamento de Internet em uma determinada região geográfica. Os RIRs são responsáveis por distribuir endereços IP (Internet Protocol) e números de sistemas autônomos (AS) para provedores de serviços de Internet, organizações e indivíduos em sua região. A IANA delega recursos da Internet para os RIRs, que acabam seguindo políticas regionais de delegação de recursos para seus clientes, que incluem provedores de Internet e Sistemas Autônomos. Como dito, cada RIR é responsável por um continente ou mais como é o caso do APNIC.
Existem atualmente cinco RIRs que são responsáveis por diferentes regiões do mundo:
RIR | Descrição |
---|---|
AFRINIC | Região da Africa. |
APNIC | Região da Ásia e Pacífico (engloba a Oceania). |
ARIN | Região do Canada, USA, e algumas ilhas do Caribe. |
LACNIC | Região da América Latina e algumas ilhas do Caribe. |
RIPE NCC | Região da Europa, Oriente Médio e Asia central. |
Os RIRs trabalham em colaboração com a ICANN e a IANA (Internet Assigned Numbers Authority) para garantir a coordenação efetiva e eficiente da alocação de endereços IP e números AS em todo o mundo. Eles também trabalham em conjunto com os registros de domínio de primeiro nível (TLDs) para garantir a estabilidade e segurança da infraestrutura da Internet.
A imagem abaixo (Retirada de secbitrez.files.wordpress.com) mostra a relação entre a IANA e os RIRs:
NIR - National Internet Registry
Os NIRs (National Internet Registry - Registro Nacional da Internet) são organizações que estão sob um determinado RIR, foram criadas para ajudar os RIRs a gerenciar a alocação e gestão dos recursos de numeração IP em um país e/ou continente, por exemplo, o NIC.br é o NIR responsável pelo Brasil, o JPNIC é o NIR responsável pelo Japão. É importante ressaltar que alguns países podem ter o seu próprio NIR, ou compartilhar um NIR com outros países vizinhos, seguindo a política e a estrutura organizacional adotada em cada país.
Os NIRs são uma forma de descentralização da gestão dos recursos de numeração IP, permitindo que cada país ou região possa ter uma entidade responsável por gerenciar e alocar seus próprios recursos de numeração IP, seguindo as políticas estabelecidas pelos RIRs. Isso permite uma maior eficiência e agilidade na gestão dos recursos, além de permitir que cada país ou região tenha um maior controle sobre seus próprios recursos de numeração IP.
Segue alguns dos NIRs existente:
NIR | Descrição |
---|---|
NIC.br | Responsável pela gestão dos recursos de numeração IP no Brasil. |
NIC Chile | Responsável pela gestão dos recursos de numeração IP no Chile. |
NIC Argentina | Responsável pela gestão dos recursos de numeração IP na Argentina. |
NIC Colombia | Responsável pela gestão dos recursos de numeração IP na Colômbia. |
NIC Mexico | Responsável pela gestão dos recursos de numeração IP no México. |
CIRA | Responsável pela gestão dos recursos de numeração IP no Canadá. |
KRNIC | Responsável pela gestão dos recursos de numeração IP na Coreia do Sul. |
JPNIC | Responsável pela gestão dos recursos de numeração IP no Japão. |
TWNIC | Responsável pela gestão dos recursos de numeração IP em Taiwan. |
HKIRC | Responsável pela gestão dos recursos de numeração IP em Hong Kong. |
CNNIC | Responsável pela gestão dos recursos de numeração IP na China. |
LIR - Local Internet Registry
Um LIR (Local Internet Registry) é uma organização que recebeu um bloco de endereços IP por um registro regional da Internet (RIR) e que atribui a maior parte desse bloco a seus próprios clientes. Ele atribui principalmente espaço de endereço aos usuários dos serviços de rede que fornece. Os LIRs são geralmente Provedores de Serviços de Internet (ISPs), cujos clientes são principalmente usuários finais e possivelmente outros ISPs. É necessário ser membro de um RIR para se tornar um LIR.
Um provedor de serviços de Internet (ISP) é uma organização que fornece acesso à Internet. Os provedores de serviços de Internet podem ser de propriedade da comunidade e sem fins lucrativos ou de propriedade privada e com fins lucrativos.
Alocação de endereços Globais
Como foi explicado acima, os endereços globais estão sob a administração da IANA que no caso do IPv6 acaba distribuindo um /12
para cada um dos cinco RIR. O LACNIC trabalha com o bloco 2800::/12
. O NIC.br, usa o bloco 2804::/16
(que é parte do LACNIC). A alocação mínima para ISPs fornecida pelo NIC.br é um bloco /32
, no entanto, alocações maiores podem ser feitas mediante apresentação de justificativa de utilização. Já as empresas recebem um /48
e os usuários finais deveriam receber um /64
a /56
.
Vale notar que a recomendação da RFC 4291 informa qe os prefixos IPv6 nunca devem ultrapassar /64
para assegurar o funcionamento de autoconfiguração utilizado na identificação dos hosts. Com isso, uma empresa que receber um /48
poderá criar 65.356 sub-redes.
Endereçamento IPv6
O IPv6 possui um total de 128 bits (contra 32 bits do IPv4), separados em 8 grupos de 16 bits cada (chamado de hexadecateto), onde cada grupo é separado por :
, a notação agora é em Hexadecimal e cada Hexadecimal possui um peso de 4 bits, enquanto que o IPv4 possui a notação em decimal.
No IPv6 não temos mais a parte de Rede e Host como era no IPv4, na verdade ainda tem, mas foi renomeado para Prefixo (Rede) e Interface (Host).
Tipos de endereços
Existem três tipos de endereços no IPv6:
Multicast
Identifica um grupo de Hosts (a comunicação é de um para vários)
Anycast
Identifica apenas um Host dentro de um grupo, sendo este o que estiver mais próximo (a comunicação é de um para um dentre muitos).
Unicast
Identifica apenas um único Hosts (a comunicação é de um para um).
O endereço de Broadcast foi removido do IPv6, o que mais se assemelha ao broadcast no IPv6 é o endereço ff02::1
, mais conhecido como All-Nodes sendo do tipo Multicast, com ele podemos enviar um pacote para todas as interfaces de todos os equipamentos que estão no mesmo domínio de colisão.
Unicast
Identifica apenas uma única interface de um equipamento. O tipo Unicast possui alguns tipos de endereços:
Global
É um endereço roteado na Internet, se assemelha aos endereços públicos IPv4.
Foi definido um2000::/3
para englobar todos os endereços roteáveis na Internet, tendo início em2000::
e terminando em3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
.
Link local
Esse tipo de endereço é gerado automaticamente para ser usado exclusivamente dentro do enlace, ou seja, é um endereço local. É por meio desse endereço que o SLAAC (Stateless Address Auto-configuration) acontece (é usado esse tipo de endereço para comunicação), esse endereço é usado para Descoberta de Vizinhança no âmbito geral (comunicação com todo tipo de nó no enlace).
Processo de criação e atribuição do endereço de Link Local a interface?
Assim que um host é iniciado ele envia um NS (Neighbor Solicitation) para o endereço Solicited Node que ele mesmo cria usando seu endereço MAC, isso é feito para verificar se o endereço já sendo usado na Rede, caso o host solicitante não receba resposta, isso significa que o endereço não está em uso.
Todo endereço de Link Local possui um endereço Solicited Node atrelado a ele, sendo esse Solicited Node um endereço Multicast.
Com o endereço livre, o host vai usar um processo chamado de EUI-64 para criar o endereço de Link Local e atrelar o Solicited Node ao Link Local. Com o Link Local devidamente atrelado a interface o host pode então começar outros processos de comunicação na Rede.
O endereço de Link Local se assemelha ao apipa do IPv4, tendo o prefixo
FE80::/64
no IPv6.
Unique Local Address (ULA)
Os endereços IPv6 ULA são equivalentes aos endereços IPv4 privados, e não devem ser roteados na Internet. Foi usado um endereço
FC00::/7
para essa finalidade. A preferencia sempre deve ser usar endereços públicos, salvos algumas exceções como as impressoras ou Redes onde não devem ter acesso a Internet. O blocoFC00::/7
foi divido em dois blocos/8
:FC00:/8
Esse bloco deve ser alocado por uma Autoridade da Internet responsável por atribuir um identificador global aleatório. Mas o endereços ULA não devem ser roteados na Internet e como não se chegou num consenso esse bloco está marcado como "indefinido".FD00:/8
Esse bloco por outro lado é o mais próximo que temos dos endereços IPv4 privados e pode ser usado da mesma forma. Para seguir uma recomenda de não usar endereços óbvios é recomendado pela RFC 4193 o uso de um algoritmo pseudo-aleatório no momento de gerar o identificador global. A ideia desse algoritmo é cada empresa tenha seu identificado privado único,
Anycast
Anycast é um endereço Unicast configurado em várias interfaces, a diferença é a forma de configuração para informar que se trata de um endereço Anycast e com isso temos a vantagem de sempre nos conectarmos ao endereço que está mais próximo de nós, essa tecnologia é muito utilizada por CDNs. Toda essa tecnologia de encaminhamento é de exclusividade do roteador.
Além dos CDNs é possível usar em servidores Proxy, Web, DNS, balanceamento de carga entre outras tecnologias.
Multicast
Diferente do IPv4 que usava o Multicast em ocasiões muito específicas, o IPv6 precisa do Multicast para sobreviver, já que muito das comunicações utiliza endereços Multicast.
Para utilização do Multicast foi reservado o endereço ff00::/8
e pode ser consultado mais detalhes na RFC 3306, no entando, sempre que ver um endereço começando em FF já saiba que se trata de um Multicast.
Seu grande beneficio é a criação de grupos de interfaces
Qualquer host funcional dentro de uma rede IPv6 funcional automaticamente faz parte de um grupo Multicast conhecido como Multicast-all-nodes no qual é utilizado o endereço ff02::1
, esse endereço é o responsável por eliminar o Broadcast das redes IPv6, já que ele identifica todos os hosts da rede que estão dentro do mesmo domínio de colisão (ou broadcast como gosto de chamar).
Outro grupo muito usado é o Multicast-all-routers no qual é usado o endereço ff02::2
, esse endereço é usado para comunicação com todas as interfaces dos roteadores.
Com essa estrutura é possível formar alguns grupos padronizados de endereçamento Multicast, vamos ver alguns endereços Multicast especificados na RFC 2375 e RFC 4291.
Endereço | Escopo | Descrição |
---|---|---|
ff01::1 | Interface | Todas as interfaces (all-nodes) |
ff01::2 | Interface | Todas os roteadores (all-routers) |
ff02::1 | Enlace | Todas os nós (all-nodes) |
ff02::2 | Enlace | Todas os roteadores (all-routers) |
ff02::5 | Enlace | Roteadores OSPFv3 |
ff02::6 | Enlace | Roteadores OSPFv3 (designados) |
ff02::7 | Enlace | Roteador RIPng |
ff02::a | Enlace | Protocolo EIGRP (Cisco) |
ff02::d | Enlace | Todas os roteadores PIM |
ff02::1:2 | Enlace | Agentes DHCP |
ff02::1:ffXX:XXXX | Enlace | Solicited-node |
ff05::2 | Site | Todos os roteadores (all-routers) |
ff05::1:3 | Site | Servidores DHCP em um site |
ff05::1:4 | Site | Agentes DHCP em um site |
ff0X::101 | Variado | Network Time Protocol (NTP) |
Endereços especiais
Existem alguns endereços e blocos IPv6 especiais e alguns alguns outros obsoletos, são eles:
Localhost -
::1
(O CIDR foi omitido sendo::1/128
) e o endereço completo seria0:0:0:0:0:0:0:1
.Rota default -
::/0
(Similar ao IPv4 0.0.0.0/0), tendo o endereço completo0:0:0:0:0:0:0:0/0
.6to4 - Usa a faixa
2002::/16
, usado para fazer tradução de endereços.Documentação - Foi reservado um bloco para documentação, para que dessa forma não fosse exporto nenhum endereço IPv6 público, o bloco é
2001:DB8::/32
.IPv4 mapeado - Usado para transição entre IPv4 e IPv6, é utilizado para criar um mapeamento entre um endereço IPv4 para IPv6, o endereçamento fica assim:
Na representação acima foi utilizado um endereço IPv4 privado, mas na Internet você verá ou utilizará endereços IPv4 públicos.
Link-Local Unicast - É um tipo de endereço IP usado em redes de computadores para comunicação dentro de uma rede local específica, como uma rede local (LAN) ou uma sub-rede local. Este tipo de endereço é usado principalmente para comunicação entre dispositivos na mesma rede local e não é roteado pela Internet. Os endereços link-local são identificados pelo prefixo
FE80::/10
.Global Unicast - Endereços IPv6 Global Unicast são usados para identificar de forma exclusiva dispositivos ou interfaces de rede em todo o mundo na Internet. Eles são o equivalente IPv6 dos endereços IPv4 públicos.
Calculando endereços
Vamos aprender a calcular endereços IPv6 e entender como funciona o processo. Primeiro lembre-se de que um endereço IPv6 possui 128 bits ao todo, sendo 64 bits reservados para Interface (destinado ao uso dos Hosts), lembre-se disso, pois o IPv6 foi projetado para sempre ter um /64 destinado a Interface, caso essa boa prática não seja seguida pode ser que as coisas não funcionem bem.
Vamos separar um endereço IPv6 em CIDR de 16 bits cada:
Endereço: 2001:0db8:cafe:dado:faca:ca5a:f0ca:dead
1 hexadecateto | 2001: = /16
2 hexadecateto | 2001:0db8: = /32
3 hexadecateto | 2001:0db8:cafe: = /48
4 hexadecateto | 2001:0db8:cafe:dado: = /64
5 hexadecateto | 2001:0db8:cafe:dado:faca: = /80
6 hexadecateto | 2001:0db8:cafe:dado:faca:ca5a: = /96
7 hexadecateto | 2001:0db8:cafe:dado:faca:ca5a:f0ca: = /112
8 hexadecateto | 2001:0db8:cafe:dado:faca:ca5a:f0ca:dead = /128
O endereço IPv6 usa Hexadecimal em sua composição, isso significa que cada caractere é equivalente a 4 bits, sendo que temos 16 bits dentro de um hexadecateto (conjunto de 4 caracteres hexadecimal), então vamos aprender a calcular:
Como só vamos precisar de 3 bits (CIDR /3), vamos sempre pegar da esquerda para a direita, como cada hexadecateto possui 16 bits, vamos reservar apenas 3 do primeiro hexadecateto, ou seja, vamos trabalhar apenas com o 2001.
O exemplo acima mostra o processo de resolução convertendo cada caractere dentro do hexadecateto em binário, depois disso é congelado os 3 primeiros bits. Os números convertidos em binários são: 0010000000000001. Após ter eles assim, vamos separar os três primeiros bits: 0010000000000001.
Para ficar mais fácil de visualizar segue os valores em binário para cada algarismo hexadecimal já separando os três primeiros bits:
2 = 0010 | 0 = 0000 | 0 = 0000 | 1 = 0001
Existem duas formas de se trabalhar com o endereçamento dessa forma, uma delas é não mexer nesses três primeiros bits (em vermelho), nesse caso vamos descobrir onde a rede começa e onde ela termina. A outra forma é mexer apenas no penúltimo bit dos bits reservados, com isso vamos descobrir onde a próxima rede começa.
Calculando o Começo/Final da Rede (sem mexer nos bits reservados)
Nesse caso, vamos alterar o 4° bit em diante, já que os três primeiros não podem ser alterados, no momento temos isso '0010' que representa o numero 2 em hexadecimal.
Primeiro vamos expandir o endereço para vermos ele completo: 2000:0000:0000:0000:0000:0000:0000:0000/3
Agora vamos isolar os três primeiros bits e transformar todos os bits que são 0 em 1. Assim conseguimos saber onde a rede começa.
Vejamos o endereço completo convertido em binário:
Com isso basta converter para hexadecimal novamente, mas antes se lembre da regra de conversão:
2⁰ = 1
2¹ = 2
2² = 4
2³ = 8
Agora pegamos cada hexadecateto em binário e elevamos cada bit de acordo com a posição, sempre começando da direita para a esquerda:
2³ | 2² | 2¹ | 2⁰ | Total |
---|---|---|---|---|
0 | 0 | 1 | 0 | 2 |
Temos que fazer isso com todos os hexadecatetos, no caso, o cálculo final seria: 2000:0000:0000:0000:0000:0000:0000:0000
que é o endereço inicial da Rede.
Agora converta todos os bits 0 em 1 (mantendo os três primeiros intactos) para sabermos o endereço final da Rede:
Agora pegamos cada hexadecateto em binário e elevamos cada bit de acordo com a posição, sempre começando da direita para a esquerda:
2³ | 2² | 2¹ | 2⁰ | Total |
---|---|---|---|---|
0 | 0 | 1 | 1 | 3 |
Temos que fazer isso com todos os hexadecatetos, no caso, o cálculo final seria: 3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
que é o endereço final da Rede.
Calculando a próxima Rede (mexendo nos bits reservados)
Agora vamos mudar apenas o penúltimo bit (começando da direita para a esquerda ou o segundo bit se começar da esquerda para a direita) dos bits reservados para calcular a próxima rede, o que temos é isso:
2³ | 2² | 2¹ | 2⁰ | Total |
---|---|---|---|---|
0 | 0 | 1 | 0 | 2 |
0010 = 2 em hexadecimal
O que vamos fazer é setar o penúltimo bit para positivo (igual a 1) e todos os demais vamos desativar (setando eles com 0):
2³ | 2² | 2¹ | 2⁰ | Total |
---|---|---|---|---|
0 | 1 | 0 | 0 | 4 |
0100 = 4 em hexadecimal
Isso nos informa que a próxima rede começa em 4000::/3
. Esse foi um exemplo simples, vamos praticar um pouco mais.
ICMP versão 6
O ICMPv6 (Internet Control Message Protocol version 6) é uma versão aprimorada do protocolo ICMPv4, foi especificado na RFC 4443. A nova versão faz tudo o que sua versão anterior poderia fazer, mas novas funcionalidades foram incrementadas, com a chegada do ICMPv6 alguns protocolos se uniram ao ICMPv6, sendo assim, deixando de existir. Os protocolos são:
ARP (Address Resolution Protocol)
O objetivo é mapear os endereços físicos através do endereços lógicos (Traduz de IPv6 para MAC).RARP (Reverse Address Resolution Protocol)
É o inverso do ARP, mapeando os endereços lógicos para endereços físicos (Traduz de MAC para IPv6).IGMP (Internet Group Management Protocol)
Atua com o gerenciamento de membros de grupos multicast.
O ICMPv6 é um protocolo de camada 3, mas é encapsulado dentro do pacote IP. Isso significa que firewalls operando na camada de rede, com o IPv6, podem bloquear funções extremamente básicas como a descoberta dos vizinhos e a autoconfiguração. O ICMPv6 é usado por nós IPv6 para relatar erros encontrados no processamento de pacotes e para executar outras funções da camada da Internet, como diagnósticos (ICMPv6 "ping"). O ICMPv6 é parte integrante do IPv6, e o protocolo base (todas as mensagens e comportamentos exigidos por esta especificação) DEVE ser totalmente implementado por cada nó IPv6.
Cada mensagem ICMPv6 é precedida por um cabeçalho IPv6 e zero ou mais cabeçalhos de extensão IPv6. O cabeçalho ICMPv6 é identificado por um valor de Next Header com valor de 58 no cabeçalho imediatamente anterior. (Isso é diferente do valor usado para identificar ICMP para IPv4.)
As mensagens ICMPv6 têm o seguinte formato geral:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ Message Body +
| |
O campo type
indica o tipo da mensagem. Seu valor determina o formato dos dados restantes. O campo code
depende do tipo de mensagem. Ele é usado para criar um nível adicional de granularidade de mensagem. O campo Checksum
é usado para detectar corrupção de dados na mensagem ICMPv6 e partes do cabeçalho IPv6.
As mensagens ICMPv6 são agrupadas em duas classes:
Mensagens de erro
As mensagens de erro são identificadas como tal por um zero no bit de ordem superior de seus valores de campo de tipo de mensagem. Assim, as mensagens de erro possuem tipos de mensagens de 0 a 127.Mensagens informativas
Mensagens informativas têm tipos de mensagem de 128 a 255.
mensagens de erro e mensagens informativas. As mensagens de erro são identificadas como tal por um zero no bit de ordem superior de seus valores de campo de tipo de mensagem. Assim, as mensagens de erro possuem tipos de mensagens de 0 a 127; mensagens informativas têm tipos de mensagem de 128 a 255.
Segue apenas os tipos de mensagem, não vou colocar os códigos de cada tipo, os códigos dão um detalhe a mais do problema, mas existem muitos códigos para cada tipos de mensagem, para ver a lista completa veja no site da IANA:
Tipo de mensagem | Descrição |
---|---|
1 | Destination Unreachable |
2 | Packet Too Big |
3 | Time Exceeded |
4 | Parameter Problem |
128 | Echo Request (Requisição do ping) |
129 | Echo Reply (Resposta do ping) |
135 | Neighbor Solicitation |
136 | Neighbor Advertisement |
141 | Inverse Neighbor Discovery Solicitation Message |
142 | Inverse Neighbor Discovery Advertisement Message |
148 | Certification Path Solicitation Message |
149 | Certification Path Advertisement Message |
O campo de MTU do IPv6 é fixo em 1280 bytes.
NDP - Neighbor Discovery Protocol
O NDP é um protocolo usado no IPv6 para a descoberta e configuração de vizinhos em uma rede local. O NDP desempenha um papel importante no funcionamento do IPv6, fornecendo várias funcionalidades essenciais. Seu funcionamento se da por meio do ICMPv6 e por causa disso, possui alguns tipos de mensagens reservados para ele:
Tipo de mensagem | Descrição |
---|---|
133 | Router Solicitation (RS). Usado pelos hosts para encontrar os roteadores da Rede. |
134 | Router Advertisement (RA). Enviado pelos roteadores da Rede para que os hosts saibam quem é o router. |
135 | Neighbor Solicitation (NS). Enviado para obter informações de vizinhança. |
136 | Neighbor Advertisement (NA). Enviado por um host como resposta a uma solicitação (NS). |
137 | Redirect. |
Alguns dos recursos do NDP incluem:
Descoberta de vizinhos (Neighbor Discovery)
O NDP permite que os dispositivos IPv6 descubram os endereços MAC (Media Access Control) dos dispositivos vizinhos em sua rede local. Isso é feito por meio de mensagens de solicitação (Neighbor Solicitation) e de resposta (Neighbor Advertisement).Autoconfiguração de endereços (Address Autoconfiguration)
O NDP permite que os dispositivos IPv6 configurem automaticamente seus endereços IPv6 em uma rede local sem a necessidade de servidores de configuração ou DHCP (Dynamic Host Configuration Protocol). Isso é feito por meio de mensagens de solicitação de roteador (Router Solicitation) e de anúncio de roteador (Router Advertisement).Roteamento sem estado (Stateless Address Autoconfiguration - SLAAC)
O NDP permite que os roteadores anunciem informações de prefixo e parâmetros de rede em mensagens de anúncio de roteador (Router Advertisement). Os dispositivos IPv6 podem usar essas informações para configurar seu endereço IPv6 e obter informações de roteamento sem depender de um protocolo de roteamento dinâmico.Redirecionamento (Redirection)
O NDP permite que um roteador informe a um dispositivo IPv6 uma rota mais eficiente para um destino específico por meio de mensagens de redirecionamento (Redirection). Isso pode ajudar a otimizar o tráfego na rede.Detecção de endereço duplicado (Duplicate Address Detection - DAD)
O NDP fornece um mecanismo para que um dispositivo IPv6 verifique se um endereço que deseja configurar já está em uso na rede. Isso é feito por meio de mensagens de solicitação de endereço (Address Solicitation) e de anúncio de endereço (Address Advertisement).
As mensagens RS são usadas pelos Hosts que desejam encontrar roteadores na rede local, para dessa forma aprender o prefixo que deva ser usado no processo de autoconfiguração (SLAAC) do endereço global. Já os roteadores enviam mensagens RA para anunciá-los periodicamente. As mensagens NS é originada por um host na rede local que deseja obter informações sobre outro vizinho da rede, já o vizinho responde com mensagens NA. Existe três ocasiões onde mensagens NS/NA serão usadas:
- Resolução de endereços físicos;
- Detecção de endereços duplicados;
- Detecção de atividade no vizinho.
Descoberta de Roteadores e Prefixos
Quando uma máquina (um host) ingressa na rede, ele envia uma mensagem RS (Router Solicitation) para descobrir quem são os Roteadores da Rede local. O host faz isso originando um pacote ao endereço ff02::2
que é destinada a Multicast-all-routers, dessa forma os Roteadores da Rede respondem com uma mensagem ICMPv6 do tipo RA (Router Advertisement) para o endereço IPv6 Link-Local do host que solicitou. Dentro da mensagem RA temos informações sobre o prefixo da rede e o endereço do Gateway que deve ser usado pelo Host.
DHCPv6 normalmente não geram mensagens informando o gateway da rede, apenas o prefixo que deva ser usado, por isso, além de usar um DHCPv6 também temos que usar uma aplicação capaz de responder o endereço do Gateway da rede.
Isso pode ser feito usando o RADVD.
Uma mensagem RA é enviada periodicamente como informado acima, em mensagens periódicas essa mensagem é enviada para o destino ff02::1
que é multicast-all-nodes.
Resolução de endereços físicos
Quando os dispositivos estão se comunicando dentro da mesma rede local, eles utilizam o endereço MAC em vez do endereço IP. O endereço IP é usado para identificar exclusivamente um host em diferentes redes, permitindo a comunicação entre redes diferentes. No entanto, dentro de uma mesma rede local, a comunicação é feita com base no endereço físico do dispositivo, conhecido como endereço MAC.
O endereço MAC é um identificador único atribuído a cada placa de rede durante a fabricação. Ele é composto por uma sequência de 48 bits (geralmente representados em notação hexadecimal) e é usado na camada de enlace de dados para identificar exclusivamente um dispositivo em uma rede local. O endereço MAC é utilizado pelos dispositivos na mesma rede para enviar e receber pacotes diretamente uns dos outros, sem a necessidade de roteamento.
No IPv6 a responsabilidade de Resolução de endereços lógicos em endereços físicos é responsabilidade do NDP, por meio de mensagens ICMPv6 do tipo 135 e 136. Nesse cenário é o Sistema Operacional que mantém essa tabela, switches também possuem uma tabela desse tipo.
Quando uma máquina deseja se comunicar com outra no mesmo enlace mas não sabe o endereço MAC, primeiro o Host que deseja se comunicar enviar uma mensagem para o multicast-solicited-node do host, imaginemos que o IPv6 do host B seja 2001:db8:cafe::20, o endereço usado pelo host A será ff02::1:ff00:0020.
A mensagem Solicited-node usa o formato
ff02::1:ffXX:XXXX
, ondeXX:XXXX
são os últimos 24 bits do endereço IPv6.
O campo target também é preenchido com o IPv6, para evitar de duas máquinas no mesmo enlace terem os mesmos últimos 24 bits, também é preenchido o campo source-link-layer-address com o endereço MAC do solicitante. Quando o host B recebe o NS com seu endereço IPv6, ele responde uma mensagem NA com o seu endereço MAC no campo source-link-layer-address, destinado ao endereço do host A. Após o host A receber a mensagem ele já é capaz de criar uma nova associação na tabela de vizinha assim como o host B.
Detecção de endereços duplicados
Endereços IP duplicados são um problema, já que seria difícil saber para quem entregar, de fato, seria entregue no enlace local usando o MAC, mas para outras redes seria uma problema grande, mesmo dentro da rede local poderia acabar entregando para o host errado. O NDP implementa o DAD (Duplicate Address Detection), antes de atribuir qualquer endereço IPv6 para uma interface.
Antes de um host configurar um endereço IPv6 numa interface, ele vai gerar uma mensagem NS com o endereço multicast-solicited-node gerado a partir do endereço que seria atribuído a sua interface. O endereço de origem é configurado como sendo ::
(já que ele não possui endereço), o IPv6 completo é colocado no campo target. Se algum host responder um NA gerado a partir do NS, o host saberá que o endereço IPv6 já está em uso, se não receber nenhum NA após um período, o endereço pode ser usado.
Detecção de atividades no vizinho
É usado para tentar detectar se um Roteador se tornou inativo por meio de mensagens NS/NA. Após detectar uma falha, o host envia 3 mensagens NS tendo o endereço unicast do roteador como destino. Se depois de um tempo o host receber um NA, significa que o Roteador está operacional novamente e nada de mais acontece, se não receber nada o host exclui a relação de IPv6/MAC da tabela e procura por um novo Roteador na rede.
Redirecionamento de porta
A mensagem ICMPv6 do tipo 137 é usada por roteadores para informar os hosts que existe outro roteador na rede que pode encaminhar os pacotes para um dado destino por meio de um caminho melhor.
EUI-64
Muitas vezes os endereços Unicast são gerados automaticamente usando o Extended Unique Identifier (EUI) que
a
Exercícios 1
Divida o prefixo 2001:db8::/32
em 2 novos prefixos /33
.
Resolução
Primeiro comece expandindo o endereçamento para ter mais de 32 bits: 2001:db80:0000::
. Agora vamos mexer apenas no 33° bit, mantendo os 32 bits iniciais travados (Vamos mexer apenas no 33° bit porque vamos criar um /33).
Com isso vamos mexer apenas no bit em azul: 2001:db80:0000::
Separando o 3° hexadecateto, que é onde começa o 33° bit, vamos mexer apenas no 33° bit para calcular onde começa a Rede nova. Calculando inicio da Rede:
3° hexadecateto | 2³ | 2² | 2¹ | 2⁰ | Total |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
Nesse caso não existe mudança então a sub-rede começa em 2001:db80:0000::/33
.
Agora calcule onde começa a outra sub-rede (é mais fácil do que calcular onde termina a sub-rede atual e depois onde começa a nova sub-rede). Agora vamos mudar apenas o bit em azul para calcular a próxima rede, o que temos é isso:
3° hexadecateto | 2³ | 2² | 2¹ | 2⁰ | Total |
---|---|---|---|---|---|
Valor original | 0 | 0 | 0 | 0 | 0 |
Bit azul em 1 | 1 | 0 | 0 | 0 | 8 |
Isso nos informa que a próxima rede começa em 2001:db80:8000::/33
, ou seja, a sub-rede acima termina em 2001:db80:7fff:ffff:ffff:ffff:ffff:ffff:/33
Agora calcule o final da sub-rede 2001:db80:8000::/33
:
3° hexadecateto | 2³ | 2² | 2¹ | 2⁰ | Total |
---|---|---|---|---|---|
Valor original | 1 | 0 | 0 | 0 | 8 |
Bits em 1 | 1 | 1 | 1 | 1 | 15 |
Mantemos os 33 primeiros bits travados e setamos os outros em 1. Após calcular temos o final em:
2001:db80:ffff:ffff:ffff:ffff:ffff:ffff:/33
.
Com isso temos:
Prefixo inicial: 2001:db80::/32
Início da primeira sub-rede: 2001:db80:0000::/33
Fim da primeira sub-rede: 2001:db80:7fff:ffff:ffff:ffff:ffff:ffff:/33
Início da segunda sub-rede: 2001:db80:8000::/33
Fim da segunda sub-rede: 2001:db80:ffff:ffff:ffff:ffff:ffff:ffff:/33
Exercícios 2
Divida o prefixo 2001:db8:c000::/34
em 4 novos prefixos.
Resolução
Dica, um /32 gera dois /33 ou quatro /34 e por ai vai, essa é a regra. Para gerar quatro novos prefixos a partir de um /34 vamos gerar quatro /36. Um /34 pode gerar dois /35, ou quatro /36, ou oito /37 e por ai vai.
Vamos mexer apenas no 35° e 36° bit, mantendo os 34 bits iniciais travados (Vamos mexer apenas no 35° e 36° bit porque vamos criar um /36, um bit adiciona 2 sub-redes, então se mexermos em 2 bits vamos adicionar 4 sub-redes).
Com isso vamos mexer apenas no algarismo em azul que contém os bits 35, 36, 37 e 38: 2001:db80:C000::
Para formar o algarismo C em hexadecimal temos a conversão:
Algarismo em hexadecimal | 2³ | 2² | 2¹ | 2⁰ | Total em decimal |
---|---|---|---|---|---|
C | 1 | 1 | 0 | 0 | 12 |
Ou seja, C em hexadecimal equivale a 1100 em binário.
Os bits 35 e 36 são os dois primeiros bits de 1100
, já os dois últimos são equivalente a 37 e 38. Nesse caso para calcular o início da sub-rede é só manter como está: 2001:db80:C000::/36
.
Já para calcular o restante vamos travar os bits 35 e 36 já que eles estão setados como 1 e vamos mudar apenas os bits 37 e 38:
Início da primeira sub-rede: 11 | 00 = C
Início da segunda sub-rede: 11 | 01 = D
Início da terceira sub-rede: 11 | 10 = E
Início da quarta sub-rede: 11 | 11 = F
Agora fica fácil de vermos onde começa as sub-redes, mudando apenas o algarismo em azul: 2001:db80:C000::
Com isso temos:
Prefixo inicial: 2001:db8:c000::/34
Início da primeira sub-rede: 2001:db80:C000::/36
Início da segunda sub-rede: 2001:db80:D000::/36
Início da terceira sub-rede: 2001:db80:E000::/36
Início da quarta sub-rede: 2001:db80:F000::/36
Exercícios 3
Divida o prefixo 2001:db8:cd00::/40
em 2 novos prefixos.
Resolução
Para gerar dois novos prefixos a partir de um /40 vamos criar duas sub-redes /41.
Com isso vamos mexer apenas no algarismo em azul que contém os bits 41, 42, 43 e 44: 2001:db80:cd00::
Vamos mexer apenas no 41° bit, mantendo os 40 bits iniciais travados (Vamos mexer apenas no 41° bit porque vamos criar um /41, um bit adiciona 2 sub-redes).
Para formar o algarismo 0 em hexadecimal temos a conversão:
Algarismo em hexadecimal | 2³ | 2² | 2¹ | 2⁰ | Total em decimal |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
Ou seja,
0
em hexadecimal equivale a0000
em binário.
Nesse caso, para calcular o início da sub-rede é só manter como está: 2001:db80:CD00::/41
.
Já para calcular a próxima rede vamos mexer apenas no bit 41, já que ele é zero e com isso vamos saber qual a próxima sub-rede:
Início da primeira sub-rede: 0 | 0 00 = 0
Início da segunda sub-rede: 1 | 0 00 = 8
Agora fica fácil de vermos onde começa as sub-redes, mudando apenas o algarismo em azul: 2001:db80:cd00::
Com isso temos:
Prefixo inicial: 2001:db8:cd00::/40
Início da primeira sub-rede: 2001:db80:cd00::/41
Início da segunda sub-rede: 2001:db80:cd80::/41
Exercícios 4
Divida o prefixo 2001:db8:cd00::/40
em 4 novos prefixos. Além de dividir, aponte os intervalos de cada sub-rede.
Resolução
Para gerar quatro novos prefixos a partir de um /40 vamos criar quatro sub-redes /42.
Com isso vamos mexer apenas no algarismo em azul que contém os bits 41, 42, 43 e 44: 2001:db80:cd00::
Vamos mexer apenas nos 41° e 42° bit, mantendo os 40 bits iniciais travados. Para formar o algarismo 0 em hexadecimal temos a conversão:
Algarismo em hexadecimal | 2³ | 2² | 2¹ | 2⁰ | Total em decimal |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 |
Ou seja,
0
em hexadecimal equivale a0000
em binário.
Nesse caso, para calcular o início da sub-rede é só manter como está: 2001:db80:CD00::/42
.
Já para calcular a próxima rede vamos mexer apenas no bit 41° e 42°, já que eles são zero e com isso vamos saber qual a próxima sub-rede:
Início da primeira sub-rede: 00 | 00 = 0
Início da segunda sub-rede: 01 | 00 = 4
Início da terceira sub-rede: 10 | 00 = 8
Início da quarta sub-rede: 11 | 00 = C
Agora fica fácil de vermos onde começa as sub-redes, mudando apenas o algarismo em azul: 2001:db80:cd00::
Com isso temos:
Prefixo inicial: 2001:db8:cd00::/40
Início da primeira sub-rede: 2001:db80:cd00::/42
Fim da primeira sub-rede: 2001:db80:cd3f:ffff:ffff:ffff:ffff:ffff:/33
Início da segunda sub-rede: 2001:db80:cd40::/42
Fim da segunda sub-rede: 2001:db80:cd7f:ffff:ffff:ffff:ffff:ffff:/33
Início da terceira sub-rede: 2001:db80:cd80::/42
Fim da terceira sub-rede: 2001:db80:cdbf:ffff:ffff:ffff:ffff:ffff:/33
Início da quarta sub-rede: 2001:db80:cdc0::/42
Fim da quarta sub-rede: 2001:db80:cdff:ffff:ffff:ffff:ffff:ffff:/33
Exercícios 5
Divida o prefixo 2001:db8:cafe::/40
em 8 novos prefixos. Além de dividir, aponte os intervalos de cada sub-rede.
Resolução
Para gerar oito novos prefixos a partir de um /40 vamos criar oito sub-redes /43. Você pode se acostumar com esse método ou simplesmente calcular, quanto é 2ˣ=8 ?
Nesse caso a resposta é 3 (2³ = 8), ou seja, precisamos pegar emprestado 3 bits para criar 8 sub-redes, ou seja, um /40 vira um /43.
O algarismo que contém o bit 43 é o algarismo f
, que engloba os algarismos de 41 até 44.
Algarismo em hexadecimal | 2³ | 2² | 2¹ | 2⁰ | Total em decimal |
---|---|---|---|---|---|
F | 1 | 1 | 1 | 1 | 15 |
Ou seja,
F
em hexadecimal equivale a1111
em binário.
Com isso vamos mexer apenas no algarismo em azul que contém os bits 41, 42, 43 e 44: 2001:db80:cafe::
O prefixo 2001:db8:cafe::/40
representa uma rede maior que abrange um conjunto de endereços IP. Ao dividir essa rede maior em sub-redes menores, utilizamos uma notação chamada "CIDR" para indicar o tamanho da sub-rede. Nesse caso, estamos criando oito sub-redes com uma notação /43
, o que significa que estamos reservando 43 bits para a parte de rede e 64 bits para a parte de host.
Sabendo disso, para criar as sub-redes não vamos mais usar o endereço 2001:db8:cafe::/40
e sim o prefixo 2001:db8:ca00::/40
(já é a primeira sub-rede).
Para criar as oito sub-redes, incrementamos esses quatro bits para obter os endereços iniciais de cada sub-rede. Olhando para os quatro bits mais à direita do prefixo, que no caso era "1111" (representando o algarismo hexadecimal f
) e agora é "0000" (representando o algarismo hexadecimal 0
), substitua esses quatro bits pelas oito combinações possíveis, sempre deslocando o bit 1 para a esquerda.
# Para a primeira sub-rede deixamos como está, sem setar o bit mais da direita para 1.
Início da primeira sub-rede: 0000 = 0
Início da segunda sub-rede: 0010 = 2
Início da terceira sub-rede: 0100 = 4
Início da quarta sub-rede: 0110 = 6
Início da quinta sub-rede: 1000 = 8
Início da sexta sub-rede: 1010 = A
Início da sétima sub-rede: 1100 = C
Início da oitava sub-rede: 1110 = E
Agora fica fácil de vermos onde começa as sub-redes, mudando apenas o algarismo em azul: 2001:db80:cdfe::
Com isso temos:
Prefixo inicial: 2001:db8:cafe::/40
Início da primeira sub-rede: 2001:db80:ca00::/43
Fim da primeira sub-rede: 2001:db80:ca1f:ffff:ffff:ffff:ffff:ffff:/43
Início da segunda sub-rede: 2001:db80:ca20::/43
Fim da segunda sub-rede: 2001:db80:ca3f:ffff:ffff:ffff:ffff:ffff:/43
Início da terceira sub-rede: 2001:db80:ca40::/43
Fim da terceira sub-rede: 2001:db80:ca5f:ffff:ffff:ffff:ffff:ffff:/43
Início da quarta sub-rede: 2001:db80:ca60::/43
Fim da quarta sub-rede: 2001:db80:ca7f:ffff:ffff:ffff:ffff:ffff:/43
Início da quinta sub-rede: 2001:db80:ca80::/43
Fim da quinta sub-rede: 2001:db80:ca9f:ffff:ffff:ffff:ffff:ffff:/43
Início da sexta sub-rede: 2001:db80:caa0::/43
Fim da sexta sub-rede: 2001:db80:cabf:ffff:ffff:ffff:ffff:ffff:/43
Início da sétima sub-rede: 2001:db80:cac0::/43
Fim da sétima sub-rede: 2001:db80:cadf:ffff:ffff:ffff:ffff:ffff:/43
Início da oitava sub-rede: 2001:db80:cae0::/43
Fim da oitava sub-rede: 2001:db80:caff:ffff:ffff:ffff:ffff:ffff:/43
Fontes
https://ii.blog.br/category/tcpip/iana-ipv4/
https://eui64-calc.princelle.org/
https://www.calculadora-online.xyz/converter-binario-hexadecimal.php
https://www.site24x7.com/pt/tools/ipv6-sub-rede-calculadora.html
http://www.gestioip.net/cgi-bin/subnet_calculator.cgi
https://mesonpi.cat.cbpf.br/ipv6/textos/sobre_%20ipv6/5.htm
https://en.wikipedia.org/wiki/Solicited-node_multicast_address
https://ipv6.br/post/enderecamento/
https://www.cloudflare.com/pt-br/learning/network-layer/what-is-mtu/