# Neighbor Discovery Protocol

O Protocolo de Descoberta de Vizinhos (NDP), ou simplesmente Descoberta de Vizinhos (ND), é um protocolo do conjunto de protocolos de Internet usado com a versão 6 do Protocolo de Internet (IPv6).$^{(§1)}$ Ele opera na camada de internet do modelo de Internet, e é responsável por reunir várias informações necessárias para a comunicação de rede, incluindo as configurações de conexões locais, servidores de nomes de domínio, e gateways.
O protocolo define cinco tipos de pacotes da versão 6 do Protocolo de Mensagens de Controle da Internet (ICMPv6) para executar funções para a versão 6 do Protocolo de Internet (IPv6) semelhantes aos protocolos de Resolução de Endereços (ARP) e de Descoberta de Roteadores e de Redirecionamento de Roteadores do Protocolo de Mensagens de Controle da Internet (ICMP) para a versão 4 do Protocolo de Internet (IPv4). Ele fornece muitas melhorias em relação às suas contrapartes da versão 4 do Protocolo de Internet (IPv4).$^{(§3.1)}$ Por exemplo, ele inclui a Detecção de Vizinhos Inacessíveis (NUD), melhorando assim a robustez da entrega de pacotes na presença de roteadores ou links com falhas, ou nós móveis.
A extensão de Descoberta de Vizinhos Inversa (IND) do protocolo permite que os nós determinem e anunciem um endereço da versão 6 do Protocolo de Internet (IPv6) correspondente a um determinado endereço da camada de enlace, semelhante ao Protocolo de Resolução de Endereços Inversa (InARP) para a versão 4 do Protocolo de Internet (IPv4).
O Protocolo de Descoberta de Vizinhos Segura (SEND), uma extensão de segurança do Protocolo de Descoberta de Vizinhos (NDP), usa Endereços Gerados Criptograficamente (CGA) e a Infraestrutura de Chave Pública de Recursos (RPKI) para fornecer um mecanismo alternativo para proteger o Protocolo de Descoberta de Vizinhos (NDP) com um método criptográfico independente da Segurança do Protocolo de Internet (IPsec). O Proxy de Descoberta de Vizinhos (ND Proxy) fornece um serviço semelhante ao do Protocolo de Resolução de Endereços em Proxy (Proxy ARP) da versão 4 do Protocolo de Internet (IPv4) e permite a ponte entre vários segmentos de rede dentro de um único prefixo de sub-rede quando a ponte não pode ser feita na camada de enlace.

## Funções

O NDP define cinco tipos de pacote ICMPv6 para fins de solicitação de roteador, anúncio de roteador, solicitação de vizinho, anúncio de vizinho e redirecionamentos de rede.

### Solicitação de roteador (Tipo 133)

    Com as mensagens de solicitação de roteador, os hosts fazem consultas para localizar roteadores em um link anexado. Os roteadores que encaminham pacotes que não foram endereçados a eles, geram anúncios de roteador imediatamente após o recebimento dessa mensagem em vez de no próximo horário agendado.

### Anúncio do roteador (Tipo 134)

    Periodicamente, ou em resposta a uma mensagem de solicitação de roteador, os roteadores anunciam suas presenças juntos fornecendo diversos parâmetros de link e Internet.

### Solicitação de vizinho (Tipo 135)

    As solicitações de vizinho são usadas pelos nós para determinar o endereço da camada de link de um vizinho ou para verificar se um vizinho ainda pode ser acessado por meio de um endereço de camada de link em cache.

### Anúncio de vizinho (Tipo 136)

    Anúncios de vizinho são usados pelos nós para responder a uma mensagem de solicitação de vizinho.

### Redirecionar (Tipo 137)

    Os roteadores podem informar aos hosts sobre um roteador de primeiro salto melhor para um destino.
Essas mensagens são usadas para fornecer as seguintes funcionalidades:
* Descoberta de roteador: os hosts podem localizar roteadores que residem em links anexados.
* Descoberta de prefixo: os hosts podem descobrir os prefixos de endereço que estão no link para links anexados.
* Descoberta de parâmetro: os hosts podem encontrar os parâmetros de link (a unidade máxima de transmissão por exemplo).
* Configuração automática de endereço: configuração opcional de endereços sem estado das interfaces de rede.
* Resolução de endereço: mapeamento entre endereços IP e endereços de camada de link.
* Determinação do próximo salto: os hosts podem encontrar roteadores do próximo salto para um destino.
* Detecção de inacessibilidade de vizinho (NUD): determina que um vizinho não está mais acessível no link.
* Detecção de endereço duplicado (DAD): os nós podem verificar se um endereço já está em uso.
* Atribuição de opções de servidor DNS recursivo (RDNSS) e lista de pesquisa DNS (DNSSL) por meio de anúncio de roteador (RA). Este é um padrão proposto desde 2010 e atualizado em março de 2017, mas não é compatível com todos os clientes.
* Redirecionamento de pacotes para fornecer uma rota de próximo salto melhor para determinados destinos.
A IANA mantém uma lista de todas as opções NDP atuais à medida que são publicadas.

## Exemplo

Dois computadores, A e B, estão conectados à mesma rede de área local sem nenhum gateway ou roteador interveniente. A tem um pacote para enviar ao endereço de Protocolo de Internet (IP) 2001:db8::55, que por acaso é o endereço de B.
Antes de enviar o pacote para B, A cria um endereço de multicast de nó solicitado anexando os 24 bits menos significativos do endereço de B ao prefixo ff02::1:ff00:0/104, que é ff02::1:ff00:55 e cria um endereço de Controle de Acesso ao Meio (MAC) de multicast de nó solicitado anexando os 24 bits menos significativos do endereço de multicast de nó solicitado de B ao prefixo 33:33:FF:xx:xx:xx, que é 33:33:FF:00:00:55. A envia uma mensagem de solicitação de vizinho solicitando uma resposta para 2001:db8::55 (endereço de Protocolo de Internet (IP) de destino ff02::1:ff00:55 e endereço de Controle de Acesso ao Meio (MAC) de destino 33:33:FF:00:00:55), que é aceita por B, que está escutando em seu próprio endereço de multicast de nó solicitado na rede de área local. B responde com uma mensagem de anúncio de vizinho contendo seus endereços de Controle de Acesso ao Meio (MAC) e de Protocolo de Internet (IP). A recebe a resposta e envia o pacote no link com o endereço de Controle de Acesso ao Meio (MAC) de B.
Normalmente, os nós de rede mantêm um cache de consulta que associa endereços de Protocolo de Internet (IP) e de Controle de Acesso ao Meio (MAC). Neste exemplo, se A tivesse a consulta armazenada em cache, então não precisaria transmitir a solicitação do Protocolo de Descoberta de Vizinhos (NDP). Além disso, quando B recebesse a solicitação, ele poderia armazenar em cache a consulta para A, de modo que se B precisasse enviar um pacote para A mais tarde, ele não precisaria usar o Protocolo de Descoberta de Vizinhos (NDP) para consultar seu endereço de Controle de Acesso ao Meio (MAC). Finalmente, quando A recebe a resposta do Protocolo de Descoberta de Vizinhos (NDP), ele pode armazenar em cache a consulta para futuras mensagens endereçadas ao mesmo endereço de Protocolo de Internet (IP).