Neighbor Discovery

Neighbor Discovery (ND) es un protocolo de IPv6, y es equivalente al protocolo Address Resolution Protocol (ARP) en IPv4, aunque se distingue porque también incorpora funcionalidades de ICMP. 

Utiliza mensajes especiales de ICMPv6 construyendo así una manera simple para que los terminales aprendan las direcciones IPv6 de los vecinos de la capa de enlace. Consiste en un mecanismo con el cual un nodo que se acaba de conectar a la red, descubre la presencia de otros nodos en el mismo enlace, además de ver sus direcciones IP. Otra de las grandes funcionalidades de este protocolo es que se ocupa de mantener limpios los cachés dónde se almacena la información relativa al contexto de la red a la que está conectado un nodo. Así, cuando una ruta hacia cierto nodo falla, el enrutador correspondiente buscará rutas alternativas. Basándose también en los mensajes ICMPv6 se permite un mecanismo de auto-configuración.

Tipos de enlaces 
Existen diferentes tipos de capas de enlaces con diferentes propiedades:
 Con capacidad de multidifusión: es un enlace que soporta enviar paquetes a un subconjuto o a todos los vecinos.
 Punto a punto: es un enlace que conecta dos interfaces. Estos enlaces tienen capacidad de multidifusión y tienen dirección del tipo enlace-local (unicast).
 Multi-acceso de no difusión (NBMA): es un enlace que soporta más de dos interfaces conectados, pero no tiene capacidad de multidifusión, por lo tanto deberá proveer un mecanismo que le de esta capacidad.
 Medio compartido: es un enlace que permite la comunicación directa entre varios nodos, pero los nodos conectados se configuran de tal manera que no disponen de información de prefijo completa para todos los destinos de enlace. Es decir, en la capa de red, los nodos en el mismo enlace pueden no saber que son vecinos, por lo tanto, se comunicarán a través de un enrutador.
 MTU variable: es un enlace que tiene una MTU definida. Por defecto se comunicará a través de un enrutador.
 Accesibilidad asimétrica: es un enlace dónde se da accesibilidad reflexiva y/o transitiva.
 Reflexiva: Un nodo A alcanza a un nodo B, pero no viceversa.
 Transitiva: Un nodo A alcanza a un nodo B, un nodo B alcanza a un nodo C, pero el nodo A no alcanza al nodo C directamente.

Tipos de direcciones 
En Neighbor Discovery se hace uso de diferentes direcciones de IPv6 todas ellas definidas en RFC4291.
 Multidifusión a todos los nodos: es una dirección del tipo enlace-local para alcanzar a todos los nodos, y es FF02::1.
 Multidifusión a todos los routers: es una dirección del tipo enlace-local para alcanzar a todos los enrutadores, y es FF02::2.
 Link-Local: Es una dirección unicast que sirve para alcanzar a los vecinos, siendo de la forma FE80::/10. Cada interfaz de un enrutador debe tener direcciones de este tipo.
 Sin especificar: Es la dirección 0::0 y se suele utilizar no como destino, sino como origen cuando un nodo aún no sabe su propia dirección.

Mensajes ICMPv6 
Un host no puede empezar a utilizar una red hasta que no conoce la identidad de al menos un enrutador local. Estos mensajes proporcionarán un medio por el que un host puede localizar a un enrutador y aprender importantes parámetros relacionados con el funcionamiento de la red local.

Solicitud de router (Router Solicitation): se genera un mensaje de este tipo cada vez que una interfaz de un nodo es activado, para así pedir a los enrutadores que se anuncien (Router Advertisement).

Anunciación de router (Router Advertisement): es generado automáticamente por los enrutadores al recibir una solicitud de router, o periódicamente para mantener informados a los nodos.

Solicitud de vecino (Neighbor Solicitation): son utilizadas por los nodos para determinar la dirección MAC de un vecino, o para verificar que un vecino sigue siendo accesible a través de una dirección MAC que se encuentra en caché. También es utilizado para detectar direcciones IP duplicadas.

Anunciación de vecino (Neighbor Advertisement): se genera automáticamente al recibir una solicitud de vecino, o se genera cuando se va a realizar un cambio en la dirección MAC (reemplazar el host por otro).

Redirección (Redirect): se genera cuando un nodo quiere informar a un enrutador de una mejor ruta hacia un destino. Estos mensajes siempre son unicast.

Tipos de Mensajes de Opciones 
Existen cinco tipos de mensajes de información ICMPv6 definidos y utilizados por Neighbor Discovery. En el campo de opciones de cada uno de los mensajes Neighbor Discovery se pueden insertar uno o más de estos mensajes de información. El nombre puede que no sea el más apropiado ya que solo en algunos casos estos mensajes son opcionales. Por ejemplo, en un Neighbor Advertisement se tiene que introducir en el campo de opciones la dirección MAC de la resolución, y sin esta opción el mensaje no tendría sentido.

Cada opción tiene una estructura basada en el clásico "tipo, longitud y valor". El campo de tipo indica la opción, la longitud indica la longitud para que el dispositivo que procese la opción pueda determinar dónde termina esta. Por último el campo de valor contiene la información relativa a la opción utilizada. Algunas opciones son utilizadas solo en un tipo de mensaje ICMPv6, mientras otras son incorporadas por más de un tipo de mensaje. Por lo tanto, son componentes modulares que pueden ser utilizados en distintos tipos de mensajes según se necesite.

Dirección MAC de Origen (Source Link-Layer Address) tiene el siguiente formato:

Dirección MAC del Objetivo (Target Link-Layer Address) tiene el siguiente formato:

Información de Prefijo (Prefix Information) tiene el siguiente formato:

Cabecera Redireccionada (Redirected Header) tiene el siguiente formato:

Opción de MTU (MTU Option) tiene el siguiente formato:

Funcionalidades de descubrimiento Host-Router 
Este es uno de los principales grupos de funcionalidades de Neighbor Discovery ya que facilitan el descubrimiento de enrutadores locales e intercambian información entre ellos y los hosts. Estas funcionalidades se distinguen en cuatro específicas y están diseñadas para su uso en los mensajes Router Solicitation y Router Advertisement:
 Router Discovery (Descubrimiento de Enrutador): es el método por el cual los hosts localizan enrutadores en la red local.
 Prefix Discovery (Descubrimiento de Prefijo): los hosts utilizan esta función para determinar en qué red se encuentran. A su vez esta función indica como diferenciar entre destinos locales o distantes a la red local y si intentar la entrega directa o indirecta de datagramas.
 Parameter Discovery (Descubrimiento de Parámetros): es el método por el cual un host aprende parámetros importantes sobre la red local y/o enrutadores, como por ejemplo la MTU del enlace local.
 Address Autoconfiguration (Auto-configuración de dirección): los hosts en IPv6 son capaces de configurarse automáticamente, pero esto requiere información que es proporcionada por un enrutador. 
Para proporcionar todas estas funcionalidades es necesario que los enrutadores y los hosts realicen una serie de tareas:

Funcionalidades de descubrimiento Host-Host 
Este es otro de los principales grupos de funcionalidades de Neighbor Discovery está asociado con información determinante y la comunicación entre nodos (normalmente hosts). Algunas de las siguientes funciones también puede ser utilizada entre un enrutador y un host, pero este grupo no fue específicamente diseñado para ello. Estas funcionalidades se distinguen en cuatro específicas:
 Address Resolution (Resolución de dirección): es el proceso por el cual un dispositivo obtiene la dirección de capa 2 (MAC) de otro dispositivo de la red local a partir de su dirección de capa 3 (IPv6)
 Next-Hop Determination (Determinación del siguiente salto): es el método por el cual se consulta el destino del datagrama IP y así se determina dónde se debe enviar a continuación. 
 Neighbor Unreachability Detection (Detección de vecino inalcanzable): es el proceso que determina si un vecino puede ser o no contactado.
 Duplicate Address Detection (Detección de direcciones duplicadas): determina si la dirección que un dispositivo desea utilizar ya existe en la red.
El envío de datagramas IP puede ser dividido en dos métodos:
 Envío indirecto: requiere que los enrutadores presten ayuda a los hosts a través de las funcionalidades Host-Enrutador.
 Envío directo: el envío es desde un host a otro host en la misma red. No requiere el uso de enrutadores, pero necesitará funciones que involucren la determinación del siguiente salto comunicado directamente entre hosts.
Para proporcionar todas estas funcionalidades es necesario que los hosts realicen una serie de tareas:

Funcionalidad de redirección 
Una de las mayores responsabilidades de Neighbor Discovery es la de la función de redirección. Es utilizada por un enrutador para informar a un host de una mejor ruta para enviar los datagramas a un destino concreto.

Los enrutadores son responsables de detectar situaciones en las cuales un host de la red local ha tomado una decisión ineficaz de encaminamiento para el primer salto, y debe actuar para corregir esto. Por ejemplo, considérese una red que está formada por dos enrutadores, R1 y R2. Un host A quiere enviar un datagrama al dispositivo B de otra red que está conectada a A a través del enrutador R2. Si A envía un datagrama a R1, R1 sabrá que tiene que pasar por R2, y por lo tanto se lo enviará. Viendo que R2 también estaba en la red local, R1 se da cuenta de que A ha tomado una mala decisión ya que el datagrama tenía que haber sido enviado directamente al enrutador R2, no a R1.
Como respuesta, R1 creará un mensaje Redirect. Este mensaje le indicará a A que cualquier datagrama con ese destino deberá ser enviado a través de R2.

Solamente los enrutadores enviarán mensajes Redirect. Los hosts son responsables de esperar estos mensajes, y cuando les lleguen procesarlos. Cuando un host procesa la información de un mensaje Redirect actualizará su caché en de acuerdo a esto.

Véase también 

 IPv6
 ICMPv6
 DHCPv6
 MTU

Referencias 
 IPv6 Router Advertisement Deep Dive 
 Neighbor Discovery for IP version 6 (IPv6) (RFC4861)
 IPv6 Subnet Model: The relationship between Link and Subnet Prefixes (RFC5942)
 IP Version 6 Addressing Architecture (RFC4291)
 Information About IPv6 Neighbor Discovery (Cisco)
 TCP/IP IPv6 Neighbor Discovery Protocol (ND)
 IPv6 - Atacando el Neighbor Discovery
 Neighbor Discovery para IPv6: Ataques y Contramedidas
 NDP - Neighbor Discovery Protocol

IPv6
Protocolos de Internet
Protocolos de red