El protocolo de Internet es un co­m­po­ne­n­te esencial para las redes de Internet y de área local, pero para tra­n­s­po­r­tar la in­fo­r­ma­ción digital y lograr que los paquetes de datos alcancen los hosts de destino es necesaria una serie de pro­to­co­los de ayuda y en­ru­ta­mie­n­to también conocidos como pila o familia de pro­to­co­los de Internet. Mientras que, por ejemplo, el Dynamic Host Co­n­fi­gu­ra­tion Protocol (DHCP) se encarga de asignar la dirección de red adecuada a los clientes al es­ta­ble­cer la conexión IP, el Neighbor Discovery Protocol (NDP) se utiliza, entre otras cosas, para la co­mu­ni­ca­ción entre hosts ad­ya­ce­n­tes en las redes de área local, así como también para de­te­r­mi­nar la puerta de enlace del router.

De­fi­ni­ción del Neighbor Discovery Protocol

El Neighbor Discovery Protocol (“protocolo de de­s­cu­bri­mie­n­to de vecinos”) se utiliza junto con la versión más reciente del protocolo de Internet IPv6. Su principal objetivo es resolver las di­re­c­cio­nes IPv6 en di­re­c­cio­nes MAC válidas, que son las di­re­c­cio­nes de hardware propias de cada di­s­po­si­ti­vo. En IPv4, el encargado de esta función era el Address Re­so­lu­tion Protocol (ARP). Todas las di­re­c­cio­nes de­te­r­mi­na­das se almacenan en el llamado neighbor cache. Este buffer informa a los co­m­po­ne­n­tes de la red sobre las di­re­c­cio­nes locales de los clientes vecinos y les su­mi­ni­s­tra in­fo­r­ma­ción adicional que puede ser necesaria, por ejemplo, para verificar la di­s­po­ni­bi­li­dad. Además, tal y como se mencionó an­te­rio­r­me­n­te, el NDP también es un in­s­tru­me­n­to para la asi­g­na­ción de la puerta de enlace estándar (standard gateway). Con la in­co­r­po­ra­ción del Router Ad­ve­r­ti­se­me­nt Protocol (RA) es posible verificar tanto el router estándar como los prefijos de red válidos, dos pa­rá­me­tros fu­n­da­me­n­ta­les de la co­n­fi­gu­ra­ción de red. Por último, el protocolo de red, que se encarga úni­ca­me­n­te de in­te­r­ca­m­biar datos dentro de una red, funciona también como protocolo de apoyo para la co­n­fi­gu­ra­ción dinámica de di­re­c­cio­nes. Este proceso también se conoce como co­n­fi­gu­ra­ción au­to­má­ti­ca de di­re­c­cio­nes sin estado (Stateless Automatic Address Co­n­fi­gu­ra­tion o SLAAC).

¿Cómo funciona el NDP?

Cualquier di­s­po­si­ti­vo que im­ple­me­n­te el Neighbor Discovery Protocol para la co­mu­ni­ca­ción en red, gestiona su propio neighbor cache. En este figuran todos los di­s­po­si­ti­vos conocidos de su red, ve­ri­fi­ca­bles por su dirección de di­s­po­si­ti­vo único (MAC). Aquí es posible ver si la dirección en caché pertenece a un cliente o, por ejemplo, a un router. Sin embargo, el neighbor cache no es el único, sino uno de los cuatro buffers que sirven a las ope­ra­cio­nes del protocolo NDP. Los otros tres co­m­po­ne­n­tes, que también son uti­li­za­dos in­di­vi­dua­l­me­n­te por cada di­s­po­si­ti­vo, son:

  • Caché de destino: este incluye entradas para los nodos de la red a los que ya se han enviado paquetes de datos. A su vez, cada una de estas entradas se refiere a una dirección en el neighbor cache, que se utiliza al enviar paquetes de datos al puerto de destino como hop o conexión in­te­r­me­dia.
  • Caché de prefijo: la lista de prefijos sirve para gestionar todos los prefijos válidos para la red en donde se encuentra el cliente. Esta lista es necesaria porque IPv6 soporta el mu­l­ti­ho­mi­ng (la ac­ce­si­bi­li­dad de la red a través de dos pro­vee­do­res di­fe­re­n­tes)y porque permite la división del espacio de di­re­c­cio­nes en di­fe­re­n­tes prefijos.Con los registros en la caché de prefijo, el NDP se asegura de que el host de destino se encuentre en la misma subred. Cada prefijo, a excepción de la dirección MAC (también Link Layer Adress) dispone de un plazo fijo de validez, ma­n­te­nie­n­do así la memoria caché siempre al día.
  • Default Router List: esta lista incluye todos los routers conocidos que tienen contacto re­gu­la­r­me­n­te con el di­s­po­si­ti­vo. Cada entrada en esta lista está vinculada a una entrada en el neighbor cache. El hecho de que solo se incluyan routers activos se debe a que au­to­má­ti­ca­me­n­te se define un periodo de caducidad para todos los agentes. Una extensión o re­no­va­ción solo tiene lugar tras la co­rre­s­po­n­die­n­te no­ti­fi­ca­ción del router.

Para crear di­fe­re­n­tes cachés para el Neighbor Discovery Protocol, se suele utilizar el protocolo de Internet conocido como ICMPv6 (Internet Control Message Protocol for the Internet Protocol Version 6).

Los cinco tipos de ICMPv6 sobre los que se fu­n­da­me­n­ta el NDP

En la versión actual de la familia de pro­to­co­los de Internet, ICMPv6 se utiliza como tra­n­s­mi­sor de no­ti­fi­ca­cio­nes de in­fo­r­ma­ción y de error, pero también lo utiliza el Neighbor Discovery Protocol en alguno de los cinco tipos de ICMPv6 di­fe­re­n­tes. De­pe­n­die­n­do del tipo que se emplee se utilizan de­te­r­mi­na­das no­ti­fi­ca­cio­nes, con cuya ayuda es posible crear las listas o los buffers.

Tipo 134: Router Ad­ve­r­ti­se­me­nt

Pe­rió­di­ca­me­n­te, los routers envían los llamados anuncios de enrutador o router ad­ve­r­ti­se­me­nt (mensajes ICMPv6 del tipo 134) para informar a los pa­r­ti­ci­pa­n­tes de la red sobre su presencia. De este modo, y entre otras cosas, di­s­tri­bu­yen los datos de su en­ru­ta­mie­n­to y los pa­rá­me­tros ne­ce­sa­rios para la co­n­fi­gu­ra­ción au­to­má­ti­ca de la IP. El destino del mensaje es el rango de di­re­c­cio­nes multicast estándar “ff02::01”, con el cual se establece la co­mu­ni­ca­ción con todos los puertos re­le­va­n­tes en cada área de validez. De esta manera se obtiene también la dirección del router (puerta de enlace pre­de­te­r­mi­na­da) y el prefijo global. Este es el esquema del Routing Ad­ve­r­ti­se­me­nt:

Por defecto, este tipo de mensajes tienen una longitud de 128 bits, aunque se pueden añadir bits adi­cio­na­les para las opciones. Las opciones válidas son la dirección MAC del router, los datos sobre el tamaño máximo del paquete (“Maximum Tra­n­s­mi­s­sion Unit”) y toda la in­fo­r­ma­ción relevante del prefijo.

En co­rre­s­po­n­de­n­cia con el mensaje, el campo “tipo” se fija en 134 y el campo “código” siempre en 0. Le siguen la suma de co­m­pro­ba­ción ICMP de 16 bits y una in­di­ca­ción de 8 bits para el límite de saltos (hop) que contiene las es­ta­cio­nes in­te­r­me­dias re­co­me­n­da­das por el router.

A co­n­ti­nua­ción figuran los bits que pro­po­r­cio­nan in­fo­r­ma­ción acerca de:

  • si las di­re­c­cio­nes IP están di­s­po­ni­bles a través del DHCPv6 dinámico (M)
  • y si se pueden obtener otros datos de la dirección a través del DHCPv6 dinámico (O).

El campo “reservado” permanece sin usar y es ignorado por el receptor. Además, los anuncios del router contienen cifras sobre:

  • el tiempo en segundos que el router debe pe­r­ma­ne­cer en la Default Router List (vida útil del router; dato entero de 16 bits, máximo 65535);
  • el tiempo en mi­li­se­gu­n­dos que, después de es­ta­ble­ci­da la ac­ce­si­bi­li­dad, debe estar di­s­po­ni­ble una dirección en el neighbor cache (tiempo máximo de ac­ce­si­bi­li­dad; dato entero de 32 bits, máximo 50 días aprox.)
  • el tiempo en mi­li­se­gu­n­dos, después del cual se puede volver a enviar un mensaje de solicitud (ver más adelante) (tiempo máximo de re­so­lu­ción; dato entero de 32 bits).

Tipo 133: Router So­li­ci­ta­tion

Las so­li­ci­tu­des del router son mensajes que permiten al host pedir a todos los routers de su red que envíen los router ad­ve­r­ti­se­me­nts. Estos responden con un mensaje del tipo 134 exclusivo para el host so­li­ci­ta­n­te (unicast) o para todos los usuarios de la red (multicast). Con este tipo de mensajes, el host no tiene que esperar a la no­ti­fi­ca­ción au­to­má­ti­ca del router de la red en el caso de una nueva conexión, por ejemplo. Este tipo de mensaje ICMPv6 está es­tru­c­tu­ra­do de la siguiente manera:

La es­tru­c­tu­ra estándar de un mensaje ICMPv6 para NDP del tipo 133 tiene una longitud mínima de 64 bits. “Tipo” contiene el valor de solicitud 133, mientras que “código” se ajusta nue­va­me­n­te a 0. Los otros dos campos obli­ga­to­rios son la suma de co­m­pro­ba­ción ICMP (16 bits) y un campo de 32 bits “reservado” que se queda sin utilizar.

La única opción de entrada posible, que puede ser añadida al mensaje, es la dirección MAC del remitente.

Tipo 135: Neighbor So­li­ci­ta­tion

Los clientes de la red envían Neighbor So­li­ci­ta­tio­ns para conseguir la dirección MAC de destino del host y, op­cio­na­l­me­n­te, tra­n­s­mi­ten a cambio su propia dirección. Si los equipos quieren encontrar una dirección, pueden tra­n­s­mi­tir este tipo de mensajes ICMPv6 por multicast o por unicast si solo quieren comprobar la di­s­po­ni­bi­li­dad de un vecino.

Como todos los mensajes ICMPv6, las Neighbor So­li­ci­ta­tio­ns también comienzan con la ide­n­ti­fi­ca­ción de tipo de 8 bits (en este caso se le asigna el valor 135 a “tipo”), seguida por el código de 8 bits (definido en 0) y la suma de co­m­pro­ba­ción de 16 bits. Al igual que las otras no­ti­fi­ca­cio­nes pre­se­n­ta­das an­te­rio­r­me­n­te, el campo “reservado” se queda sin usar.

Con 128 bits, la dirección IP que se tiene como objetivo (que no puede ser una dirección multicast) compone la mayor parte del mensaje, siendo su longitud total de al menos 192 bits. Este tipo de mensaje decisivo para el Neighbor Discovery Protocol también permite la es­pe­ci­fi­ca­ción opcional de la dirección MAC del emisor.

Tipo 136: Neighbor Ad­ve­r­ti­se­me­nt

Por un lado, los di­s­po­si­ti­vos de red envían Neighbor Ad­ve­r­ti­se­me­nts como reacción a las Neighbor So­li­ci­ta­tio­ns entrantes y, por otro, sin que se solicite, informan a otros pa­r­ti­ci­pa­n­tes sobre los cambios en la co­n­fi­gu­ra­ción de la dirección. La co­n­s­tru­c­ción de tales mensajes tiene este aspecto:

Los primeros 32 bits de la longitud estándar de 192 bits del Neighbor Ad­ve­r­ti­se­me­nt se basan en el esquema típico de los mensajes ICMPv6: para “tipo” (136) y “código” (0) se reservan 8 bits, a los que siguen la suma de co­m­pro­ba­ción de 16 bits. A co­n­ti­nua­ción siguen otros tres bits in­di­vi­dua­les con las si­guie­n­tes co­n­di­cio­nes:

  • R: el bit “R” se utiliza cuando el mensaje es enviado por un router.
  • S: si el mensaje contiene el bit “S”, se trata de una respuesta a una Unicast Neighbor So­li­ci­ta­tion, con la que se confirma al usuario so­li­ci­ta­n­te la di­s­po­ni­bi­li­dad de la red. Este bit no se debe usar como respuesta a las so­li­ci­tu­des multicast o en un Neighbor Ad­ve­r­ti­se­me­nt ya iniciado.
  • O: la bandera “O” indica al de­s­ti­na­ta­rio del mensaje que so­bre­s­cri­ba la entrada en la caché.

Los 29 bits si­guie­n­tes siguen el patrón an­te­rio­r­me­n­te me­n­cio­na­do, es decir, se quedan en blanco, se ini­cia­li­zan con 0 y son ignorados por el receptor. Al añadir la dirección de destino de 128 bits se está in­clu­ye­n­do la parte más im­po­r­ta­n­te del mensaje. Esta puede ser la dirección IP desde la que se ha so­li­ci­ta­do el Neighbor Ad­ve­r­ti­se­me­nt o la dirección por la que se debe dar a conocer una nueva dirección MAC. Como opción, el router puede nombrar su propia dirección, algo que es obli­ga­to­rio cuando este responde a una solicitud multicast.

Tipo 137: Redirect

Los routers tienen la po­si­bi­li­dad de informar a los hosts de la red acerca del primer mejor hop en el camino hacia las di­re­c­cio­nes de destino. Para ello, envían Redirects ICMPv6 NDP que siguen el siguiente esquema:

Con una longitud mínima de 320 bits, los Redirects son los mensajes ICMPv6 más grandes y de gran re­le­va­n­cia para el fu­n­cio­na­mie­n­to del Neighbor Discovery Protocol. A la es­tru­c­tu­ra con se­cue­n­cias de bits para la de­fi­ni­ción de “tipo” (137), de código (0), de la suma de co­m­pro­ba­ción y de un campo “reservado” sin utilizar (32 bits), le siguen la dirección del hop re­co­me­n­da­do y la dirección a la cual se re­co­mie­n­da este desvío (ambas 128 bits). Op­cio­na­l­me­n­te el paquete de mensajes puede contener la dirección MAC del destino y la cabecera del paquete re­di­ri­gi­do.

Desafíos y po­si­bi­li­da­des del NDP

Evi­de­n­te­me­n­te, existe una gran cantidad de in­fo­r­ma­ción en cuanto a los me­ca­ni­s­mos de caché y los recursos de co­mu­ni­ca­ción del Neighbor Discovery Protocol en co­m­bi­na­ción con el protocolo de control de mensajes de Internet (Internet Control Message Protocol). Los si­guie­n­tes es­ce­na­rios del NDP ilustran la in­ter­ac­ción y el fu­n­cio­na­mie­n­to de ambos pro­to­co­los:

  • Re­co­no­ci­mie­n­to del router y del prefijo de red: todos los routers en una red tra­n­s­mi­ten Router Ad­ve­r­ti­se­me­nts a todos los usuarios de la red a través de multicast. Estos contienen, entre otras cosas, in­fo­r­ma­ción como la dirección, el prefijo de red y el en­ru­ta­mie­n­to, que sirven para crear la Default Router List y la Prefix List. Sobre la base de estos registros los clientes de­te­r­mi­nan la puerta de enlace de­te­r­mi­na­da y la máscara de subred. Debido a que todas estas entradas tienen una validez limitada, solo el router activo permanece re­gi­s­tra­do. Los anuncios del router también se pueden forzar con ayuda de las Router So­li­ci­ta­tio­ns.
  • De­te­r­mi­nar los pa­rá­me­tros im­po­r­ta­n­tes para la tra­n­s­mi­sión de paquetes: op­cio­na­l­me­n­te, los Router Ad­ve­r­ti­se­me­nts pueden contener in­fo­r­ma­ción sobre los pa­rá­me­tros que deben aplicar los clientes durante la tra­n­s­mi­sión de paquetes. Se puede tratar de in­fo­r­ma­ción muy concreta como, por ejemplo, el tamaño máximo del paquete, pero también de pa­rá­me­tros de Internet más amplios como el límite de es­ta­cio­nes in­te­r­me­dias prescrito para los paquetes salientes.
  • De­te­r­mi­nar el siguiente hop: Si se tiene que enviar un paquete, el protocolo ND se encarga de comprobar si la caché de destino ya contiene una entrada para el host de destino previsto. Si no es así, el protocolo determina cuál es el próximo nodo in­te­r­me­dio a partir de la in­fo­r­ma­ción en la lista de prefijos y en la del router estándar. A co­n­ti­nua­ción, se almacena el nuevo estado de in­fo­r­ma­ción en la memoria caché de destino, con lo que estará di­s­po­ni­ble de inmediato con una nueva solicitud. En caso de que no haya un equi­va­le­n­te en el neighbor cache, se genera au­to­má­ti­ca­me­n­te y se inicia la re­so­lu­ción de la dirección.
  • Resolver di­re­c­cio­nes IP en di­re­c­cio­nes MAC: para de­te­r­mi­nar la dirección MAC de un host es­pe­cí­fi­co en la red, este recibe una Neighbor So­li­ci­ta­tion a través de IPv6 Multicast en su propia y muy es­pe­cí­fi­ca dirección de mu­l­ti­di­fu­sión. A esta única co­m­bi­na­ción de di­re­c­cio­nes solo puede responder el host. Como respuesta, este envía un mensaje de Neighbor Ad­ve­r­ti­se­me­nt con la dirección MAC al­ma­ce­na­da por el cliente inicial en su neighbor cache. De esta manera el NDP no solo se utiliza para ide­n­ti­fi­car vecinos, sino también para definir routers.
  • Reconocer la falta de di­s­po­ni­bi­li­dad de un vecino: la re­le­va­n­cia de todas las di­re­c­cio­nes MAC al­ma­ce­na­das en el neighbor cache tiene que co­m­pro­bar­se re­gu­la­r­me­n­te. Siempre y cuando se envíen desde una dirección re­gi­s­tra­da datos IP/TCP o co­n­fi­r­ma­cio­nes de entrada, esta dirección figura como activa y el host re­s­po­n­sa­ble como di­s­po­ni­ble. En caso de que no se hayan in­te­r­ca­m­bia­do datos con el di­s­po­si­ti­vo en un tiempo y haya expirado la validez de la entrada, entonces se considera obsoleta. Para comprobar si, de hecho, el host en cuestión no está di­s­po­ni­ble, se envía primero un paquete de datos a la dirección re­gi­s­tra­da. Si no hay respuesta se realiza un último test a través de una Neighbor So­li­ci­ta­tion Unicast. Si este confirma la inac­ce­si­bi­li­dad, esta entrada des­apa­re­ce­rá del neighbor cache.
  • Detectar di­re­c­cio­nes du­pli­ca­das: si un di­s­po­si­ti­vo ha obtenido una dirección por au­to­co­n­fi­gu­ra­ción, el NDP considera a esta dirección en un primer momento como “tentative” (pro­vi­sio­nal). Antes de activarse de­fi­ni­ti­va­me­n­te, sin embargo, debe cla­si­fi­car­se como “ine­quí­vo­ca”. Con este fin, el cliente de red recién conectado envía una Neighbor So­li­ci­ta­tion a la dirección temporal que quiere usar él mismo junto con una dirección temporal de retorno no es­pe­cí­fi­ca. Si otro host ya utiliza dicha dirección, este re­s­po­n­de­rá a la dirección de mu­l­ti­di­fu­sión general con un mensaje de Neighbor Ad­ve­r­ti­se­me­nt. El cliente que realiza la co­m­pro­ba­ción también lo recibe, después de lo que obtiene una nueva dirección.
  • Informar sobre las opciones de re­di­re­c­ción: con los mensajes de re­di­re­c­ción, el Neighbor Discovery Protocol ofrece a los routers la po­si­bi­li­dad de optimizar el camino de los paquetes de datos hacia su host de destino. Como se mencionó an­te­rio­r­me­n­te, con la ayuda del tipo ICMPv6 137, estos pueden hacer re­co­me­n­da­cio­nes de las es­ta­cio­nes in­te­r­me­dias más adecuadas que, a la vez, deben incluirse en el caché de destino.

Te mostramos cómo in­s­pe­c­cio­nar el neighbor cache en tu sistema

In­de­pe­n­die­n­te­me­n­te de si se trata de Windows, macOS, Linux, iOS o Android, todos los sistemas ope­ra­ti­vos modernos son co­m­pa­ti­bles con IPv6 y, por lo tanto, tienen la capacidad de recurrir al Neighbor Discovery Protocol en redes basadas en Ethernet. Con la ayuda del comando apropiado en la terminal de línea de comandos es posible vi­sua­li­zar el neighbor cache de tu di­s­po­si­ti­vo en cualquier momento.

En Windows, por ejemplo, puedes consultar tus vecinos de red con la ayuda del programa netsch (network Shell) y el siguiente comando:

netsh interface ipv6 show neighbors

Con la mayoría de di­s­tri­bu­cio­nes Linux se puede acceder al neighbor cache con ayuda de la he­rra­mie­n­ta iproute2 y el comando:

ip -6 neigh

En macOS y otras di­s­tri­bu­cio­nes basadas en BSD se accede a las entradas en cache de la siguiente manera:

ndp -a
Ir al menú principal