Neighbor Discovery Protocol (NDP) 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 dé 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. centro|miniaturadeimagen|486x486px|Accesibilidad reflexiva y accesibilidad transitiva, siendo A, B y C nodos de una red.
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). Nombre del campoTamaño (bytes)Descripciónminiaturadeimagen|centro|Formato del mensaje Router Solicitation.Type1Identifica el tipo de mensaje ICMPv6, para Router Solicitation su valor es 133. Code1No es utilizado, suele estar a cero.Checksum2Es calculado de manera similar a la versión IPv4, sirve para proveer detección de errores en la trama.Reserved4Estos 4 bytes están reservados para usos futuros, están iniciados a cero.OptionsvariableEn caso de que el nodo que envía este mensaje sabe su dirección de capa 2, debería estar incluida en una opción del tipo dirección MAC de origen.
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. Nombre del campoTamaño (bytes)Descripciónminiaturadeimagen|centro|Formato de mensaje Router Advertisement.Type1Identifica el tipo de mensaje ICMPv6, para Router Advertisement su valor es 134. Code1No es utilizado, suele estar a cero.Checksum2Es calculado de manera similar a la versión IPv4, sirve para proveer detección de errores en la trama.Cur Hop Limit1El valor de este campo indica a los hosts de la red local el valor que deberán insertar en el campo Hop Limit de los datagramas que envían. Si está a cero está indicando que no se recomienda ningún valor.Autoconfig Flags1Solo se utilizan 2 bits, uno para cada flag. Estos flags permiten al enrutador informar de que manera es la auto-configuración en la red local. Bit 1 (M): Cuando está a 1, indica que las direcciones están disponibles a través de DHCPv6. Cuando está a 1 el flag O es redundante ya que DHCPv6 devolverá toda la información de configuración. Bit 2 (O): Cuando está a 1, indica que otra información de configuración está disponible a través de DHCPv6. Por ejemplo información sobre el DNS, o servidores en la red. Resto (Reserved): Bits reservados para uso futuro.Router Lifetime2Indica al receptor de este mensaje cuanto tiempo (en segundos) este enrutador deberá permanecer como enrutador por defecto. Si el valor de este campo es 0, entonces no se deberá utilizar este enrutador por defecto.Reachable Time4Indica al host cuanto tiempo (en mili-segundos) deberá considerar un vecino como alcanzable después de recibir la confirmación de alcanzable.Retrans Timer4Indica el tiempo (en mili-segundos) que el host debe esperar antes de retransmitir. OptionsvariableHay tres tipos de información que este campo puede contener: Dirección MAC de origen: se incluye cuando se sabe la dirección MAC. MTU: Se utiliza para informar a los hosts de la MTU de la red local. Información de prefijo: Informa a los hosts que prefijo o prefijos utilizar dentro de la red local.
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. Nombre del campoTamaño (bytes)Descripcióncentro|miniaturadeimagen|Formato de mensaje Neighbor Solicitation.Type1Identifica el tipo de mensaje ICMPv6, para Neighbor Solicitation su valor es 135. Code1No es utilizado, suele estar a cero.Checksum2Es calculado de manera similar a la versión IPv4, sirve para proveer detección de errores en la trama.Reserved4Estos 4 bytes están reservados para usos futuros, están iniciados a cero.Target Address16Contendrá la dirección IP unicast del dispositivo del cual se está intentando resolver su dirección MAC. OptionsvariableSi el dispositivo que genera la solicitud sabe su propia dirección IP y MAC, se deberá incluir en las opciones la dirección IP y MAC de origen. Esto se hace con el propósito de que el receptor añada a su caché estas direcciones.
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). Nombre del campoTamaño (bytes)Descripcióncentro|miniaturadeimagen|Formato de mensaje Neighbor Advertisement.Type1Identifica el tipo de mensaje ICMPv6, para Neighbor Advertisement su valor es 136. Code1No es utilizado, suele estar a cero.Checksum2Es calculado de manera similar a la versión IPv4, sirve para proveer detección de errores en la trama.Flags4Solo se utilizan 3 bits, uno para cada flag. Estos flags permiten transmitir información sobre el mensaje: Bit 1 (R): Identifica el tipo de dispositivo que ha enviado el mensaje (1 cuando el mensaje lo ha enviado un enrutador, y 0 cuando ha sido enviado por un host). También se utiliza para detectar cuando un enrutador cambia de funcionar como tal, a funcionar como un host. Bit 2 (S): Cuando está a 1 indica que el mensaje ha sido enviado en respuesta a un Neighbor Solicitation. Bit 3 (O): Cuando está a 1 indica al receptor que deberá sobrescribir cualquier información de caché relacionada con la dirección de dispositivo origen. Resto (Reserved): Bits reservados para uso futuro.Target Address16Si el mensaje es enviado en respuesta a un Neighbor Solicitation entonces este campo tendrá el mismo valor que el campo target address del mensaje Neighbor Solicitation. Comúnmente contendrá la dirección IP de dispositivo que genera este mensaje.OptionsvariableCuando este mensaje es generado en respuesta a un Neighbor Solicitation multicast entonces será obligatorio que se añada la dirección MAC del dispositivo que genera este mensaje. En cambio, cuando la respuesta se debe a un Neighbor Solicitation unicast no será obligatorio incluir la dirección MAC (ya que para enviar Neighbor Solicitation necesitaba la dirección MAC, es decir, ya la tiene), pero se suele incluir.
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. Nombre del campoTamaño (bytes)Descripcióncentro|miniaturadeimagen|Formato de mensaje Redirect.Type1Identifica el tipo de mensaje ICMPv6, para Redirect su valor es 137. Code1No es utilizado, suele estar a cero.Checksum2Es calculado de manera similar a la versión IPv4, sirve para proveer detección de errores en la trama.Reserved4Estos 4 bytes están reservados para usos futuros, están iniciados a cero.Target Address16Contiene la dirección IP del enrutador por el cual la ruta hacia el destino hubiera sido más eficiente. Destination Address16Contiene la dirección IP del destino al que iba dirigido el paquete, antes de que se generase el mensaje Redirect. OptionsvariableNormalmente se utilizan dos tipos de opciones: Dirección MAC de origen: Contiene la dirección MAC del dispositivo generador de este mensaje. Con esto se evita tener que realizar la resolución de dirección MAC una vez el enrutador de destino reciba este mensaje. Cabecera redirigida (Redirected Header): Para hacer que este mensaje supere la unidad máxima de transferencia (MTU), es decir 1280 bytes, se introducirá parte del datagrama que originó este mensaje. Se cogerá tanto como sea necesario hasta llegar a 1280 bytes.
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: