Capítulo 7: Conectividade e Redes
7.2 Endereçamento IPv6
7.2.1 Introdução ao IPv6
O IPv6 foi desenvolvido principalmente para suprir a falta de endereços IPv4. Hoje, todo novo host que "nasce" na internet, "nasce" com IPv6 e não mais com IPv4. Na verdade, nasce com IPv4 também porém, muitos provedores pela falta de endereços IPv4, utilizam técnicas de NAT como o CGNAT para permitir que esses hosts possam se comunicar utilizando endereços IPv4.
NOTA
Aqui, utilizaremos os termos "host" e "nó" (node) para nos referir a qualquer elemento de rede que possua um endereço IP e tenha a capacidade de se comunicar dentro da rede.
O IPv6 foi desenvolvido com base no IPv4, mas eles são incompatíveis entre si. Isso significa que uma máquina que opera exclusivamente com IPv4 não consegue se comunicar com uma máquina que utiliza apenas IPv6, e vice-versa.
Quando analisamos um endereço IPv6, a principal diferença em relação ao IPv4, à primeira vista, é a quantidade de bits disponíveis para endereçamento.
Como visto no capítulo anterior, um endereço IPv4 possui 32 bits, enquanto um endereço IPv6 é formado por 128 bits. Com 128 bits disponíveis para representar os endereços, temos um total de aproximadamente 340 undecilhões de endereços disponíveis para uso.

Diferentemente do IPv4, a quantidade de endereços disponíveis no IPv6 é um número absurdamente grande. Por ter muitos endereços disponíveis, algumas soluções técnicas, como o uso de NAT (Network Address Translation), tornam-se desnecessárias no IPv6.
Essa é uma outra diferenciação entre IPv4 e IPv6: no IPv6, não há compartilhamento de endereços por meio de NAT (Network Address Translation). Com a abundância de endereços disponíveis no IPv6, a ideia é promover a conectividade direta entre os dispositivos de rede, alinhando-se ao projeto original da Internet (comunicação fim-a-fim).
Devido ao maior número de bits disponíveis, sua representação passa a ser de outra forma. O endereço é composto por oito conjuntos de quatro caracteres hexadecimais, separados por dois-pontos, sendo esses conjuntos conhecidos como hexadecatetos.

Um caractere hexadecimal é representado por números de 0 a 9 e letras de A a F. Isso significa que um caractere hexadecimal pode representar valores decimais que variam de 0 a 15.
Utilizar a base binária ou mesmo a base decimal para representar um endereço IPv6 é inviável. Por essa razão, optou-se pela base hexadecimal, que proporciona uma representação mais compacta dos valores binários, uma vez que cada caractere hexadecimal corresponde a 4 bits:

A partir desses detalhes, a compreensão de um endereço IPv6 e seu conjunto numérico pode ser resumida da seguinte forma:

Para simplificar a representação, os endereços IPv6 podem ser escritos eliminando os zeros iniciais de cada conjunto hexadecimal, começando sempre da direita para a esquerda:

Além disso, grupos de zeros podem ser eliminados completamente. Por exemplo, o endereço que representa o localhost ou loopback, pode ser escrito da seguinte forma:

NOTA
Um conjunto de zeros, independentemente do tamanho, pode ser representado usando apenas dois-pontos ::. No entanto, essa abreviação pode ser utilizada apenas uma vez em um endereço.
A representação de prefixos de rede, por meio da notação CIDR, utilizada no IPv4, é aplicada da mesma forma no IPv6 para identificar a parte do endereço que representa a rede e a parte que representam os hosts:

Por fim, é importante ressaltar que a RFC 4291 recomenda que os prefixos que identificam a rede não devem ultrapassar /64. Isso significa que, em um espaço de 128 bits, recomenda-se sempre reservar 64 bits para a parte que identifica a rede e os 64 bits restantes para a identificação das interfaces de rede. Essa divisão é essencial para o funcionamento da autoconfiguração do IPv6, a qual será detalhada mais adiante.

NOTA
Um prefixo é a parte do endereço onde os bits têm valores fixos.
7.2.2 Tipos de Endereços
No IPv6, existem três tipos de endereços utilizados para diferentes formas de comunicação entre os dispositivos da rede. São eles:
Unicast
Um endereço do tipo Unicast é utilizado para identificar de maneira única uma interface de rede dentro de uma rede. Isso significa que um pacote de dados enviado para um endereço do tipo Unicast será entregue a uma única interface de rede.
Na imagem abaixo, é possível observar que cada host da rede possui um endereço IPv6 único e exclusivo, permitindo que os computadores se comuniquem entre si de maneira individual, um-para-um:

Multicast
Endereços do tipo Multicast são utilizados para comunicação com um grupo de hosts (multicast group) ou um grupo de interfaces de rede (VNICs). Esses endereços estão contidos no prefixo FF00::/8, o que significa que todos os endereços que começam com FF são sempre do tipo Multicast.
A RFC 4291, na seção "2.7. Multicast Addresses", define que um endereço do tipo Multicast serve como um identificador para um grupo de interfaces de rede, geralmente localizadas em diferentes nós. Além disso, as comunicações do tipo Multicast são sempre do tipo um-para-todos.

Diferentemente do IPv4, no IPv6 não existe endereço de broadcast e dessa forma, o protocolo ARP (Address Resolution Protocol), que faz uso de endereços broascast, também deixa de existir. Mais adiante, você verá que essas funcionalidades são substituídas pelo protocolo NDP (Neighbor Discovery Protocol), que utiliza endereços do tipo multicast para realizar a descoberta dos demais hosts da rede (vizinhos).
NOTA
A comunicação do tipo Multicast é essencial para o funcionamento do IPv6. Para que a rede IPv6 opere corretamente, é necessário que esse tipo de comunicação funcione. Por exemplo, se, por algum motivo, o firewall de um host na rede for configurado para bloquear as comunicações do tipo Multicast, isso impedirá o seu funcionamento em uma rede IPv6.
Anycast
Anycast é uma forma seletiva de comunicação que direciona os pacotes de dados para o nó mais próximo dentro de um grupo de nós. Os pacotes são enviados da origem para o destino mais próximo (menor custo). É importante mencionar que os pacotes de dados também podem ser enviados de uma origem para um grupo de destinos mais próximos, um-para-o-mais-próximo.
Um exemplo de comunicação do tipo Anycast é a resolução de nomes DNS. Na imagem abaixo, é possível observar que os servidores compartilham o mesmo endereço IP (sim, isto é possível no IPv6). Quando o notebook precisa resolver um nome, o roteador seleciona o servidor mais próximo, com o menor custo, para atender a essa solicitação:

NOTA
Ao contrário dos endereços do tipo Unicast e Multicast, os endereços do tipo Anycast não possuem um prefixo específico.
7.2.3 Endereços Unicast
Assim como no IPv4, o IPv6 também possui endereços do tipo privado, que são utilizados exclusivamente para comunicação em redes locais (não roteáveis), e endereços IP públicos, também conhecidos como endereços válidos, que são usados para comunicação na Internet (roteáveis).
Embora existam endereços do tipo privado e público, a proposta é sempre utilizar os endereços IP públicos, independentemente de o host precisar ou não se comunicar com a Internet. Isso pode parecer estranho à primeira vista, pois estamos acostumados com o mundo IPv4, onde toda a rede interna é uma rede privada que deve ser endereçada com IPs privados (RFC 1918) e, para acessar a Internet, a rede interna precisa compartilhar o único IP público fornecido pelo provedor de acesso por meio de técnicas de NAT (Network Address Translation).
NOTA
É importante ressaltar novamente que, no IPv6, não se utiliza NAT para a comunicação na Internet. Não há necessidade de compartilhar um único endereço público entre uma rede de endereços privados. Com a abundância de endereços IPv6 disponíveis, seu provedor de serviços de Internet atribuirá mais de um endereço a você. Na verdade, o provedor fornece um prefixo de rede que pode ser distribuído entre os dispositivos da sua rede local.
Outro aspecto importante relacionado aos endereços em uma rede IPv6 é que o protocolo IPv6 foi projetado para suportar múltiplos endereços de diferentes tipos em uma única interface de rede. A imagem abaixo exibe o resultado do comando ipconfig, mostrando a presença de vários endereços IPv6 em uma interface de rede de um sistema operacional Windows:

Embora os termos público e privado sejam comuns no contexto do IPv4, no IPv6 utiliza-se o termo escopo do endereço (address scope). O escopo refere-se a uma área da rede onde o endereço é único e relevante. De acordo com a RFC 4007, o escopo é definido como um intervalo topológico dentro do qual o endereço pode ser utilizado como um identificador exclusivo para uma interface de rede ou um conjunto de interfaces.
No IPv6, existem três tipos de escopos:
-
Link-Local
- Endereços que são acessíveis apenas dentro de um link de dados específico.
-
Site-Local
- Endereços que são acessíveis dentro de um site ou organização, utilizados por toda uma empresa e suas filiais, por exemplo.
-
Global
- Endereços com alcance mundial ou global, que podem ser roteados na Internet.

Abaixo está o resultado do comando ifconfig de um sistema operacional Linux, que exibe o escopo dos endereços IPv6:

NOTA
Para obter mais informações sobre o escopo dos endereços IPv6, consulte a RFC 4007 - IPv6 Scoped Address Architecture.
A seguir, serão apresentados os tipos de endereços Unicast classificados de acordo com o seu escopo.
GUA (Global Unicast Addresses)
Endereços do tipo GUA (Global Unicast Addresses) são identificados pelo prefixo 2000::/3 e são equivalentes aos endereços públicos/válidos do IPv4 (escopo global) . No IPv6, todo dispositivo que deseja acessar a Internet necessita de um endereço do tipo GUA.
Diferentemente do IPv4, o IPv6 oferece uma abundância de endereços disponíveis, permitindo que cada host que precise se comunicar na Internet tenha seu próprio endereço público exclusivo. Assim, por exemplo, se em uma rede com dez hosts e os dez hosts precisam se comunicar com a Internet, cada um dos dez terá o seu próprio endereço do tipo GUA. O IPv6 restabelece o modelo de comunicação Fim-a-Fim, que é o princípio original da Internet.

Formato dos Endereços GUA
De acordo com a RFC 4291, os endereços do tipo GUA possuem o seguinte formato:

-
Bits Fixos
- O três primeiros bits
001do endereço são fixos e representa o prefixo2000::/3. Assim, os endereços do tipo GUA estão contidos na faixa que vai de2000:0:0:0:0:0:0até3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff.
- O três primeiros bits
-
Global Routing Prefix
- Prefixo de roteamento global, utilizado para identificar o tamanho do prefixo atribuído a uma rede.
-
Subnet ID
- Identificação da sub-rede, utilizada para identificar um enlace em uma rede.
-
Interface ID
- Identifica de maneira única uma interface de rede dentro da sub-rede. Como mencionado anteriormente, é recomendado utilizar 64 bits para a parte que identifica as interfaces de rede.
Políticas de Alocação e Designação
A gestão e alocação dos prefixos IPv6 em nível mundial é feita pela IANA (Internet Assigned Numbers Authority). Esta por sua vez, aloca um prefixo /12 para cada RIR (Registros Regionais de Internet), como a ARIN (American Registry for Internet Numbers), APNIC (Asia-Pacific Network Information Centre), LACNIC (Latin America and Caribbean Network Information Centre), entre outros.
Na América Latina, que fica sob a gestão do LACNIC, o prefixo 2800::/12, alocado pela IANA, é dividido e distribuído entre os países da região. No Brasil, o NIC.br é responsável pelo gerenciamento do prefixo 2804::/16. A partir desse prefixo, o NIC.br aloca prefixos para provedores de acesso à Internet (ISP - Internet Service Provider), empresas e organizações, instituições de ensino e pesquisa, além de entidades governamentais.

NOTA
O NIC.br também gerencia prefixos menores, como 2001:1280::/25 e 2001:1280::/25, que são provenientes de alocações antigas. Para mais informações, consulte a página Endereçamento do NIC.br.
A partir do prefixo 2804::/16, o NIC.br segue suas próprias políticas de alocação:
1. A alocação mínima para provedores de serviços de Internet (ISPs) é um prefixo /32. No entanto, alocações maiores podem ser realizadas mediante a apresentação de uma justificativa de utilização.
2. Prefixos /56 a /64 para usuários domésticos. No entanto, o NIC.br recomenda que os provedores de acesso atribuam prefixos /56 a esses usuários.
3. Para usuários móveis pode-se utilizar um prefixo /64, pois geralmente uma única rede é suficiente.
4. Prefixo /48 para usuários corporativos. Empresas maiores podem receber mais de um prefixo /48.
Para se ter uma ideia, a partir de um prefixo /32, temos 32 bits disponíveis para criar sub-redes (64 - 32 = 32 bits). Isso permite a criação de até quatro bilhões de sub-redes diferentes (2^32 = 4.294.967.296).
Em um prefixo /48, há 16 bits para a criação de sub-redes (64 - 48 = 16 bits), o que representa um total de 65.536 sub-redes possíveis (2^16 = 65,536).
Já em um prefixo /56, temos 8 bits para criar sub-redes (64 - 56 = 8 bits), resultando em um total de 256 sub-redes disponíveis (2^8 = 256).
Observe que a alocação e a subdivisão para a criação das sub-redes ocorrem nos primeiros 64 bits de um endereço IPv6. Os 64 bits restantes são utilizados para identificar as interfaces de rede, permitindo endereçar aproximadamente dezoito quatrilhões de interfaces de rede dentro de uma sub-rede (2 ^ 64 = 18.446.744.073.709.551,616).
NOTA
É bastante provável que o seu provedor de acesso forneça um prefixo /56 para que você possa acessar a Internet. Como você verá, o OCI também disponibiliza um prefixo /56 nas VCNs com sub-redes públicas configuradas para IPv6.
ULA (Unique Local IPv6 Unicast Addresses)
Endereços do tipo ULA (Unique Local IPv6 Unicast Addresses), também conhecidos de forma abreviada como Local IPv6 Address, são identificados pelo prefixo FC00::/7 e são equivalentes aos endereços privados do IPv4 (escopo site-local).
Esses endereços são utilizados exclusivamente para comunicação interna de um site e não devem aparecer ou ser roteados na Internet. Provedores de acesso à Internet bloqueiam esse tipo de endereço da mesma forma que ocorre com os endereços privados do IPv4 (RFC 1918).
Como sabemos, a funcionalidade do NAT (Network Address Translation) para acesso à Internet a partir de uma rede interna IPv4 não se aplica a redes IPv6. Em uma interface de rede IPv6, é possível ter simultaneamente um endereço do tipo GUA (Global Unicast Addresses) e um endereço do tipo ULA. O sistema operacional geralmente escolhe automaticamente o endereço apropriado com base no tipo de comunicação que está sendo realizada.
Em resumo, o GUA é preferencial para comunicação com a Internet, enquanto o ULA é preferencial para comunicação interna, dentro de um site.
NOTA
Consulte a RFC 6724 - Default Address Selection for Internet Protocol Version 6 (IPv6) para obter mais informações sobre a utilização dos algoritmos de seleção de endereços, que são definidos com base no tipo de comunicação que o host irá realizar.
Formato dos Endereços ULA
De acordo com a RFC 4193, os endereços do tipo ULA possuem o seguinte formato:

-
Bits Fixos
- Os sete primeiros bits
1111110do endereço são fixos e representa o prefixoFC00::/7, que identifica endereços do tipo ULA. Este prefixo por sua vez foi dividido em dois/8:FC00::/8eFD00::/8.
- Os sete primeiros bits
-
L Flag
- A L Flag (ou Local Flag) é utilizada para identificar se o prefixo de endereços é global ou local. Um valor de
0indica que o prefixo é destinado ao uso global, enquanto um valor1indica que o prefixo é para uso local.
- A L Flag (ou Local Flag) é utilizada para identificar se o prefixo de endereços é global ou local. Um valor de
-
Global ID
- Os
40 bitssão utilizados para identificar a sua rede. Você verá que, recomenda-se que esses bits sejam gerados por meio de algoritmos específicos que produzem valores pseudo-aleatórios.
- Os
-
Subnet ID
- Os
16 bitssão utilizados para identificar uma sub-rede dentro de um site e podem ser escolhidos livremente.
- Os
-
Interface ID
- Os
64 bitssão utilizados para identificar as interfaces de rede dentro de uma sub-rede. É recomendado utilizar todo o espaço de64 bitspara endereçar as interfaces de rede, nem menos nem mais.
- Os
L Flag
Para criar redes IPv6 usando prefixos privados de sua escolha, é necessário que o bit L Flag tenha o valor 1. A especificação dos endereços ULA estabelece que, quando esse bit está definido como 0, o endereço representa um prefixo global. Por outro lado, um valor de 1 indica que o prefixo é destinado ao uso privado.
A utilização do valor do bit em 0, que define o prefixo global FC00::/8, não foi amplamente aceita, pois a intenção é que esses prefixos sejam administrados e alocados a partir das autoridades de Internet com a finalidade de garantir que não haja conflitos de endereços privados entre as organizações em todo o mundo. Em outras palavras, neste caso, para utilizar um prefixo destinado ao endereçamento privado em sua rede, é necessário solicitá-lo a uma autoridade de Internet, em vez de escolher um prefixo qualquer de sua escolha.
Já para definir prefixos de uso local, é necessário que o bit L Flag esteja configurado com o valor 1, resultando no prefixo FD00::/8. Esses prefixos, destinados ao uso privado, estão contidos na faixa que vai de FD00:0:0:0:0:0:0 até FDff:ffff:ffff:ffff:ffff:ffff:ffff:ffff, podendo ser representados de forma abreviada como FD00::/8.

Esse é o prefixo que você deve utilizar para suas redes privadas IPv6: FD00::/8.
Global ID
A porção do endereço Global ID, composta por 40 bits, é utilizada para identificar o prefixo de uso privado e exclusivo de uma organização. Como mencionado anteriormente, os valores para a porção Global ID foram projetados para serem administrados por autoridades da Internet.
A ideia inicial parecia boa, pois, ao utilizar prefixos únicos, as organizações poderiam evitar problemas de endereçamento ao integrar redes, como endereços de VPN que se sobrepõem, entre outros. No entanto, o processo de solicitação de prefixos privados se torna burocrático e por isso não foi amplamente aceito.
Neste caso, a recomendação e a proposta aceita é que a geração da porção Global ID seja realizada por meio de algoritmos específicos que produzem valores pseudo-aleatórios. Essa abordagem, de certa forma, garante uma baixa probabilidade de que diferentes organizações utilizem o mesmo prefixo.
NOTA
Consulte a seção 3.2.2. Sample Code for Pseudo-Random Global ID Algorithm da RFC 4193 para obter mais detalhes sobre o algoritmo proposto para a geração de prefixos pseudo-aleatórios.
Um site que eu particularmente gosto para gerar prefixos pseudo-aleatórios é o rovaughn.com/ipv6-subnet-generator. Ele fornece como resultado os valores para Global ID e Subnet ID:

Apenas para complementar a explicação, também é possível utilizar a linha de comando para gerar prefixos de rede:
NOTA
Embora os valores aleatórios gerados pelo exemplo de linha de comando acima sejam fáceis de reproduzir, é importante mencionar que esse método não está em conformidade com as recomendações do algoritmo proposto pela RFC 4193.
Subnet ID
Subnet ID, composto por 16 bits, é a parte que identifica as sub-redes dentro do prefixo. Para se ter uma ideia, com 16 bits, é possível ter até 65.536 sub-redes.

Existem alguns métodos para calcular sub-redes IPv6, visto que há um grande número de bits disponíveis para essa finalidade. É possível iniciar a criação das sub-redes a partir dos bits mais à direita, à esquerda ou até mesmo do meio do endereço.
Abaixo, serão apresentados alguns exemplos de sub-redes criadas a partir do prefixo ULA fde3:50e0:8c08::/48:



Para simplificar a criação de sub-redes IPv6, existe o script ipv6gen. Esse script permite especificar a alocação das sub-redes utilizando os bits mais à direita (-r), à esquerda (-l) ou a partir do meio do endereço (-m).
Abaixo está um exemplo de geração de prefixos utilizando os bits mais à direita (-r):
NOTA
O script ipv6gen pode ser baixado diretamente do site https://code.google.com/archive/p/ipv6gen/.
Interface ID
Interface ID é a parte do endereço que identifica individualmente cada interface de rede dentro de uma sub-rede. Como já mencionado, recomenda-se que essa porção tenha 64 bits. Com 64 bits, é possível ter até 18 quintilhões de endereços de rede dentro de uma única sub-rede.

Um endereço completo ULA apresenta o seguinte formato:

Link-Local IPv6 Unicast Addresses
Endereços do tipo Link-Local são identificados pelo prefixo FE80::/10 e são equivalentes aos endereços APIPA (Automatic Private IP Address) do IPv4 (169.254.0.0/16).
Diferentemente dos endereços APIPA, que são gerados automaticamente por um host quando ele não consegue obter um endereço IP de um servidor DHCP, os endereços Link-Local do IPv6 são sempre gerados automaticamente para cada interface de rede que suporte IPv6. Esses endereços são obrigatórios e sempre estão presentes.
Os endereços do tipo Link-Local são válidos apenas dentro da rede local, ou seja, são restritos a um único link e não devem ser propagados para fora da rede (escopo link-local). Eles desempenham um papel importante na rede IPv6, sendo fundamentais principalmente para operações de Autoconfiguração de Endereço e Descoberta de Vizinhança (Neighbor Discovery Protocol), que serão exploradas mais adiante. Se esses endereços não estiverem disponíveis ou se o tráfego entre os hosts da rede local que utilizam esses endereços não for permitido, a rede IPv6 não funcionará corretamente.
Formato dos Endereços Link-Local

-
Bits Fixos
- Os dez primeiros bits
1111111010do endereço são fixos e representa o prefixoFE80::/10, que identifica endereços do tipo Link-Local.
- Os dez primeiros bits
-
54 Bits
- Os próximos
54 bitsdo endereço têm um valor fixo de zero. Portanto, o prefixo completo é definido comofe80:0000:0000:0000::/64.
- Os próximos
-
Interface ID
- Os
64 bitsrestantes são utilizados para identificar as interfaces de rede e são gerados automaticamente pelo host com base no MAC Address da interface correspondente.
- Os
Geração dos Endereços Link-Local
Endereços Link-Local são gerados automaticamente pelo sistema operacional do host quando uma interface de rede que suporte o protocolo IPv6 é ativada.
A parte que identifica a Interface ID do endereço, é gerada com base no MAC Address da interface de rede através do método mais comum denominado EUI-64.
Para entender como essa geração é realizada, será usado como exemplo o endereço MAC Address 02:00:17:01:ed:ff de uma interface de rede qualquer. É importante notar que o MAC Address é um identificador de 48 bits (ou 6 bytes) dividido em duas partes:

-
OUI (Organizationally Unique Identifier)
- Os primeiros
24 bitsou3 bytesidentificam o fabricante do dispositivo. Essa numeração é gerenciada pelo IEEE (Institute of Electrical and Electronics Engineers), que é responsável por atribuir esses identificadores únicos às empresas que fabricam dispositivos de rede.
- Os primeiros
-
ID do Dispositivo
- Os últimos
24 bitsou3 bytesde um endereço MAC são gerenciados e definidos pelo fabricante do dispositivo, que controla a atribuição de identificadores únicos para cada dispositivo que produz.
- Os últimos
A partir do endereço MAC, o protocolo IPv6 utiliza um método chamado 64-bit Extended Unique Identifier ou EUI-64 para gerar endereços Link-Local únicos em uma rede. Para isso, o protocolo IPv6 aproveita a estrutura dos endereços MAC para realizar a criação de um endereço IPv6 exclusivo. De forma simplificada, o processo segue os seguintes passos:
1. O sétimo bit do primeiro byte é invertido. Se estiver definido como zero, ele se torna um. Se estiver definido como um, ele se torna zero:

2. O valor FFFE é inserido no meio do endereço:

3. Por fim, usa-se o prefixo FE80::/64 junto com a parte do endereço que identifica a interface de rede (0000:17FF:FE01:EDFF):

NOTA
Na imagem acima, os zeros da parte que identifica o prefixo da rede foram omitidos para economizar espaço. No sistema operacional, o endereço exibido seria FE80::17FF:FE01:EDFF.
7.2.4 Neighbor Discovery Protocol (NDP)
No IPv4, utiliza-se o protocolo ARP e endereços do tipo broadcast para localizar e possibilitar a troca de dados entre dispositivos conectados ao mesmo link de dados. Já no IPv6, essas funções foram substituídas pelo protocolo Neighbor Discovery Protocol (NDP) que opera sobre o protocolo ICMPv6. Em vez de endereços broadcast, o IPv6 utiliza endereços do tipo multicast para realizar essas operações.
NOTA
O protocolo Neighbor Discovery Protocol (NDP) está especificado na RFC 4861 e o protocolo ICMPv6 está especificado na RFC 4443.
De maneira análoga ao ARP, o protocolo Neighbor Discovery Protocol (NDP) utiliza um conjunto de mensagens e processos para facilitar a comunicação entre dispositivos conectados no mesmo link de dados, permitindo a "descoberta da vizinhança". Para isso, ele trabalha com cinco diferentes tipos de mensagens:
-
- Quando um host se torna ativo na rede, ele envia mensagens do tipo RS para descobrir os roteadores IPv6 disponíveis.
-
- O roteador, por sua vez, envia mensagens do tipo RA, não apenas em resposta a solicitações do tipo RS, mas também de forma periódica para anunciar sua presença na rede. Essas mensagens contêm informações importantes sobre qual prefixo de rede que um host pode utilizar, informações de roteamento, MTU (Maximum Transmission Unit) e se o host deve ou não prosseguir com o processo de autoconfiguração de seu endereço IP.
-
- Os hosts enviam mensagens do tipo NS para solicitar o endereço da camada de enlace de um host de destino (MAC Address).
-
- Utilizado para informar aos hosts da rede sobre a existência de um roteador alternativo que é mais preferencial ou mais próximo do host.
Assim como a tabela ARP que é mantida pelo sistema operacional, o protocolo NDP também possui a sua própria tabela, cuja função também é associar endereços da camada de enlace aos seus respectivos endereços da camada de rede. No sistema operacional Linux, essa tabela pode ser consultada utilizando o seguinte comando:
Cada linha exibe o endereço de rede (IPv6), a interface de rede pela qual o endereço pode ser alcançado, o endereço da camada de enlace _(MAC Address)_e seu status, que pode apresentar um dos seguintes valores:
-
REACHABLE
- O endereço está acessível e é possível comunicar-se com ele.
-
STALE
- O endereço foi acessado anteriormente, mas não recentemente.
-
DELAY
- O endereço foi utilizado recentemente, mas o sistema está aguardando um intervalo antes de enviar novos pacotes para evitar congestionamento.
-
PROBE
- O sistema está verificando se o endereço ainda está ativo, geralmente após ter estado em STALE.
-
FAILED
- O endereço não está acessível.
-
PERMANENT
- A entrada é estática e não será verificada ou removida automaticamente pelo sistema.
Para o sistema operacional Windows, o comando equivalente é apresentado a seguir:
Autoconfiguração
Autoconfiguração é o termo que descreve a capacidade de um host de atribuir a si mesmo um endereço de rede, sem depender da presença de um servidor DHCP ativo na rede. Esse método, que é extremamente útil e presente no IPv6, é conhecido como SLAAC (Stateless Address Autoconfiguration), ou simplesmente autoconfiguração stateless. Assim como no IPv4, hosts IPv6 também podem contar com um servidor DHCPv6 ativo na rede, e esse modo de configuração é denominado autoconfiguração stateful.
NOTA
O processo de autoconfiguração stateless é especificado na RFC 4862. Por outro lado, o DHCPv6 está especificado na RFC 8415.
Por fim, é importante mencionar que a configuração de endereços IPv6, independentemente de ser stateless, stateful ou manual, é validada por mais um processo do protocolo NDP, denominado Duplicate Address Detection. Esse processo tem a função de identificar endereços duplicados entre os dispositivos que compartilham o mesmo link de dados.
NOTA
Para mais detalhes sobre a funcionalidade que detecta endereços duplicados, consulte a seção 5.4. Duplicate Address Detection da RFC 4862.