Qué es NDP o Neighbor Discovery Protocol
Qué es NDP o Neighbor Discovery Protocol

NDP (Neighbor Discovery Protocol): Definición, Mensajes y Funciones

Neighbor Discovery Protocol (NDP) puede ser conceptualizado como una caja de herramientas utilizada por los hosts IPv6 para llevar a cabo diversas operaciones de enlace local (link-local). El NDP en sí no describe un protocolo a nivel de cable o una estructura de paquetes, sino que establece direcciones para realizar tareas rutinarias utilizando ciertos algoritmos y cinco tipos de mensajes ICMPv6.

Muchas de las capacidades proporcionadas por NDP son muy similares a las que se encuentran en ARP e ICMPv4 de IPv4, mientras que otras son nuevas implementaciones disponibles sólo en IPv6. RFC 4861 describe las nueve funciones de NDP en detalle, pero este artículo debería ser suficiente como una revisión de alto nivel.

¿Qué es IPv6 NDP?

Ilustración de IPv6 Neighbor Discovery Protocol
Ilustración de IPv6 Neighbor Discovery Protocol – Fuente: apnic.net

IPv6 NDP (Neighbor Discovery Protocol) (Protocolo de Descubrimiento de Vecinos, en español) es el protocolo que proporciona el descubrimiento de nodo de red como su nombre indica. En el mundo IPv4, estábamos usando ARP, pero en el mundo IPv6 no hay ARP. En su lugar, se utiliza el NDP basado en ICMPv6 para el Neighbor Discovery (Descubrimiento de Vecinos). Los mensajes del Internet Control Message Protocol (ICMP) y las direcciones multicast de los nodos solicitados se utilizan para descubrir vecinos. Con los mecanismos NDP, los nodos de un mismo enlace anuncian su existencia, se informan sobre sus vecinos, rastrean su accesibilidad, etc.

Tipos de Mensajes ICMPv6

NDP, utiliza cinco tipos de Mensajes ICMPv6 y un tipo específico de Dirección Multicast, la dirección de multidifusión de nodo solicitado (Solicited-node multicast address) para sus operaciones.

Entonces, ¿cuáles son estos cinco mensajes ICMP utilizados por los mecanismos NDP? Estos mensajes ICMP son los siguientes:

  1. Mensaje de Solicitud de Vecino (Neighbor Solicitation Message) (NS)
  2. Mensaje de Anuncio de Vecino (Neighbour Advertisement Message) (NA)
  3. Mensaje de Anuncio de Router (Router Advertisement Message) (RA)
  4. Mensaje de Solicitud de Router (Router Solicitation Message) (RS)
  5. Mensaje de Redirección (Redirect Message)

El Mensaje de Solicitud de Vecino (Neighbor Solicitation Message) se utiliza para solicitar la dirección de capa de enlace de un vecino. También se utiliza para comprobar la disponibilidad de un vecino con la misma dirección de capa de enlace. Otro uso de este mensaje es la detección de direcciones públicas.

Ejemplo de Solicitud de vecino
Ejemplo de Solicitud de vecino

El Mensaje de Anuncio de Vecino (Neighbour Advertisement Message) se utiliza como respuesta al Mensaje de Solicitud de Vecino y si hay un cambio de dirección de capa de enlace.

Ejemplo de Anuncio de Vecino
Ejemplo de Anuncio de Vecino

Mensaje de Solicitud de Router (Router Solicitation Message) es el mensaje que solicita la anunciación del router inmediatamente sin esperar al siguiente intervalo. Cuando una interfaz está habilitada, este mensaje puede ser enviado.

Ejemplo de Solicitud de router
Ejemplo de Solicitud de router

Mensaje de Anuncio de Router (Router Advertisement Message) es el mensaje que anuncia la presencia del router con varios parámetros. Puede ser un mensaje periódico o una respuesta a un Router Solicitation Message.

Ejemplo de Anunciación de router
Ejemplo de Anunciación de router

Mensaje de Redirección (Redirect Message) es el mensaje utilizado para informar a los hosts sobre un mejor primer salto a un destino.

Por cierto, todos estos mensajes deben utilizar direcciones Link-Local (FE80::/64).

Funciones de NDP

IPv6 NDP tiene algunas funciones importantes. Veamos estas funciones:

  • Descubrimiento de Prefijos / Parámetros
  • Verificación del alcance de vecinos y routers
  • Descubrimiento de routers
  • Descubrimiento de vecinos
  • Redirección al siguiente bucle
  • SLAAC (Configuración de direcciones sin estado)
  • DAD (Detección de direcciones duplicadas), etc.

Vamos a explicar estas funciones una por una y ver las Operaciones NDP (Neighbor Discovery Protocol).

En IPv6, la Información de Prefijos y Parámetros se descubre con Mensajes ICMPv6. Esta información es transportada por Mensajes de Anuncio de Router. Con esta información, los Hosts se familiarizan con que Prefijos IPv6 hay en ese Enlace y cuales son los parámetros.

Descubrimiento de Routers

En IPv4, podemos configurar manualmente o confiar en DHCP para dar una dirección de puerta de enlace a un host. Pero esto es un poco diferente en IPv6. En IPv6, con el Mecanismo de Descubrimiento de Routers, los Routers en el enlace pueden ser detectados por los Hosts. Esto se hace con dos mensajes ICMPv6 que se dan a continuación:

  • Mensajes de Solicitud de Router (Tipo 133)
  • Mensajes de Anuncio de Router (Tipo 134)
Ilustración de Descubrimiento de Router
Ilustración de Descubrimiento de Router – Fuente Packetlife

Un host en el enlace envía un mensaje multicast de Solicitud de Router cuando arranca e intenta encontrar cualquier router en la red. Este mensaje se envía a la dirección multicast IPv6 de todos los routers o “”Link Local All Routers” (FF02::2). El significado de este mensaje es:

"¿Hay algún Router en este Enlace?".

Los Routers en el enlace envían mensajes multicast de Anunciación de Router como respuesta. Con este mensaje dicen que,

"Soy un Router en este enlace".

Un mensaje multicast Router Solicitation puede ser enviado para recibir inmediatamente Router Advertisements sin esperar el intervalo periódico de mensajes de Anunciación de Router. Con este mensaje, el host aprende rápidamente la información IPv6 requerida. El destino de este mensaje es la dirección multicast de todos los routers, FF02::2.

Anunciación de Router

Los Mensajes de Anunciación de Router son enviados por los routers periódicamente para anunciarse a sí mismos o como respuesta a un Mensaje de Solicitud de Router. El tipo de mensaje ICMPv6 de este mensaje es el tipo 134.

Según el motivo de este mensaje, la dirección de destino del mensaje cambia. Si el mensaje se envía periódicamente para anunciar el router, el destino será la dirección multicast de todos los nodos, FF02::1. Si se envía como respuesta a un Mensaje de Solicitud de Router, entonces el destino será la fuente del Mensaje de Solicitud de Router.

Especialmente para Stateless Address Autoconfiguration (SLAAC), los Mensajes de Anuncio de Router son importantes. El bit M en los Mensajes de Anuncio de Router determina el tipo de autoconfiguración de dirección. Si el bit M está a 1, se utiliza la autoconfiguración de direcciones con estado. Si el bit M está a 0, entonces se usa autoconfiguración sin estado, SLAAC.

Descubrimiento de Prefijos

Una de las opciones que suele llevar un anuncio de router es la opción de información de prefijo (tipo 3). Cada opción de información de prefijo lista un prefijo IPv6 (subred) alcanzable en el enlace local. Recuerda que no es raro que múltiples prefijos IPv6 residan en el mismo enlace, y los routers pueden incluir más de un prefijo en cada anuncio. Un host que conoce qué prefijos son alcanzables en el enlace puede comunicarse directamente con destinos en esos prefijos sin pasar su tráfico a través de un router.

Descubrimiento de Parámetros

Otra opción incluida en los anuncios de los routers es la opción MTU (tipo 5), que informa a los hosts de la MTU IP a utilizar. Por ejemplo, este valor suele ser 1500 para redes Ethernet. Sin embargo, no todos los tipos de enlace tienen un tamaño de MTU estandarizado. Incluir esta opción asegura que todos los hosts conocen el MTU correcto a utilizar.

Los anuncios de router también especifican el valor por defecto que los hosts deben utilizar para el recuento de saltos IPv6. No se trata de una opción, sino de un campo integrado en la cabecera del mensaje de anuncio de router.

Autoconfiguración de Direcciones

NDP proporciona mecanismos para que un host se configure automáticamente con una dirección de un prefijo aprendido de un router local a través del descubrimiento de prefijos. Esto se hace concatenando un prefijo candidato aprendido con la dirección EUI-64 de la interfaz del host. De esta manera, un host puede conseguir una autoconfiguración sin estado.

Descubrimiento de Vecinos

En IPv4, ARP se utiliza para la Resolución de Direcciones. Pero en IPv6 no hay ARP. En su lugar, IPv6 utiliza ICMPv6 para la Resolución de direcciones. Dos mensajes de ICMPv6 se utilizan para este trabajo. Estos mensajes ICMPv6 se indican a continuación:

  • Mensajes de Solicitud de Vecino (Tipo 135)
  • Mensajes de Anuncio de Vecino (Tipo 136)

Un Host en el enlace envía un Mensaje de Solicitud de Vecino Multicast e intenta descubrir la Dirección de Capa de Enlace de un vecino en el mismo enlace local. El destino de este mensaje es la dirección multicast del nodo solicitado de la dirección correspondiente. El significado de este Mensaje de Solicitud de Vecino es:

"¿Cuál es la dirección de enlace de Alex?"

La dirección de origen de este Mensaje de Solicitud de Vecino es la dirección IPv6 del dispositivo emisor y la dirección de destino es la dirección multicast del nodo solicitado que corresponde a la dirección IPv6 del destino. La parte de datos del mensaje incluye la dirección de Capa de Enlace del remitente. Después de que el vecino recibe este mensaje, envía una respuesta con Mensaje de Anuncio de Vecino que dice,

"Soy Alex y esta es mi dirección Link-Local".

La dirección de origen de este Mensaje de Anuncio de Vecino es la dirección IPv6 del vecino y la dirección de destino es la dirección IPv6 del origen NS. La parte de datos del mensaje incluye la dirección de capa de enlace que se solicita.

Los mensajes de solicitud de vecino también se utilizan para comprobar la alcanzabilidad del vecino. Cuando se utilizan con este fin, la dirección de destino del mensaje es la dirección IPv6 del vecino.

Anuncios de Vecinos

Los Mensajes de Anuncio de Vecino pueden ser enviados como respuesta a un Mensaje de Solicitud de Vecino o como una propagación inmediata de nueva información como un cambio de dirección en la capa de enlace. El segundo tipo de mensaje se utiliza para informar a la red tras un cambio. En este caso, el destino del mensaje es la dirección multicast de todos los nodos (FF02:0:0:0:0:0:0:1).

Detección de Vecinos Inalcanzables

NDP es capaz de determinar la alcanzabilidad de un vecino examinando pistas de protocolos de capa superior (por ejemplo, acuses de recibo TCP recibidos), o volviendo a realizar activamente la resolución de direcciones (a través de ICMPv6) cuando se alcanzan ciertos umbrales.

Determinación del Siguiente Salto

Al igual que en IPv4, la determinación del siguiente salto es simplemente un procedimiento para realizar búsquedas de coincidencias más largas en la tabla de enrutamiento del host y, para destinos fuera de enlace, la selección de un router por defecto.

Detección de Direcciones Duplicadas (Duplicate Address Detection, DAD)

Cuando un host se une por primera vez a un enlace, multidifunde solicitudes de vecinos para su propia dirección IPv6 durante un breve periodo de tiempo antes de intentar utilizar esa dirección para comunicarse. Si recibe un anuncio de vecino en respuesta, el host se da cuenta de que otro vecino en el enlace ya está utilizando esa dirección. El host marcará la dirección como duplicada y no la utilizará en el enlace.

Existe un tipo especial de mensaje NS utilizado para DAD. En este caso, los mensajes NS originan una dirección IPv6 no especificada ::/128 y una dirección multicast de nodo solicitado destinada de la dirección IPv6 que pretende utilizar.

Ejemplo de mensaje NS utilizado para DAD
Ejemplo de mensaje NS utilizado para DAD

Hay que tener en cuenta que este proceso es similar a las peticiones ARP gratuitas de IPv4, pero NDP permite elegantemente la detección de dos hosts con la misma dirección antes de que ambos hosts estén enviando tráfico activamente desde la dirección.

Redirección

Un quinto tipo de mensaje ICMPv6, la Redirección (tipo 137), es utilizado por los routers para dirigir a los hosts hacia un router más preferible, o para indicar que el destino realmente reside en el enlace. ICMPv4 proporciona la misma capacidad con su propio mensaje de redirección.

Ilustración de Redirección
Ilustración de Redirección

Cómo Inspeccionar la Caché de Vecinos en tu Sistema

Ya sea Windows, MacOS, Linux, iOS o Android – los sistemas operativos modernos soportan IPv6 y son capaces de acceder a las posibilidades de NDP en redes basadas en ethernet. Utilizando la instrucción adecuada, puedes usar la línea de comandos en cualquier momento para llamar a la caché de vecinos que se creó para tu dispositivo.

En Windows, por ejemplo, puedes listar tus vecinos de red utilizando el programa netsh (“network shell”) y el siguiente comando:

netsh interface ipv6 show neighbors

Con la mayoría de las distribuciones de Linux, puedes acceder a la caché de vecinos utilizando la herramienta iproute2 y este comando:

ip -6 neigh

Con macOS y otras distribuciones basadas en BSD, accede a las entradas de la caché de la siguiente manera:

ndp -a

Tutorial del Protocolo NDP