Direccionamiento IPv6

Ver código fuente en GitHub

Observemos cómo Thread identifica cada dispositivo de la red y qué tipos de direcciones usan para comunicarse entre sí.

Permisos

Alcances de PO

Una red Thread tiene tres alcances para el direccionamiento unificado:

  • Vínculo local: Todas las interfaces a las que se puede acceder mediante una sola transmisión de radio
  • Malla-local: todas las interfaces accesibles en la misma red Thread
  • Global: Todas las interfaces accesibles desde fuera de la red Thread

Los dos primeros alcances corresponden a los prefijos designados por una red Thread. Link-Local tiene prefijos de fe80::/16, mientras que Mesh-Local tiene prefijos de fd00::/8.

Unicast

Existen varias direcciones IPv6 de unidifusión que identifican un solo dispositivo Thread. Cada uno tiene una función diferente según el alcance y el caso práctico.

Antes de detallar cada tipo, veamos más información sobre uno común, llamado localizador de enrutamiento (RLOC). El RLOC identifica una interfaz Thread según su ubicación en la topología de red.

Cómo se genera un localizador de rutas

A todos los dispositivos se les asigna un ID de router y un ID secundario. Cada router mantiene una tabla de todos sus elementos secundarios, cuya combinación identifica de forma única un dispositivo dentro de la topología. Por ejemplo, considera los nodos destacados en la siguiente topología, en la que el número de un router (pentagon) es el ID de router y el número de un dispositivo final (círculo) es el ID de secundario:

Topología de RLOC de OT

El ID de router de cada elemento secundario corresponde a su superior (router). Debido a que un router no es un elemento secundario, el ID secundario de un router siempre es 0. En conjunto, estos valores son únicos para cada dispositivo en la red Thread y se usan a fin de crear el RLOC16, que representa los últimos 16 bits del RLOC.

Por ejemplo, aquí se muestra cómo se calcula el RLOC16 para el nodo superior izquierdo (ID de router = 1 y ID secundario = 1):

TS RLOC16

El RLOC16 es parte del identificador de interfaz (IID), que corresponde a los últimos 64 bits de la dirección IPv6. Algunos IID se pueden usar para identificar algunos tipos de interfaces de Thread. Por ejemplo, el IID de los RLOC siempre tiene la siguiente forma:

0000:00ff:fe00:RLOC16

El IID, combinado con un prefijo de malla local, da como resultado el RLOC. Por ejemplo, mediante un prefijo de malla local de fde5:8dba:82e1:1::/64, el RLOC para un nodo en el que RLOC16 = 0x401 es el siguiente:

PRO y RLOC

Esta misma lógica se puede usar a fin de determinar el RLOC para todos los nodos destacados en la topología de muestra anterior:

Topología de PO con dirección

Sin embargo, debido a que el RLOC se basa en la ubicación del nodo en la topología, el RLOC de un nodo puede cambiar a medida que cambia la topología.

Por ejemplo, quizás se quita el nodo 0x400 de la red Thread. Los nodos 0x401 y 0x402 establecen vínculos nuevos para routers diferentes y, como resultado, se les asigna un RLOC16 y RLOC nuevos:

Topología de PO después del cambio

Tipos de direcciones de acceso único

El RLOC es solo una de las muchas direcciones IPv6 de unidifusión que puede tener un dispositivo Thread. Otra categoría de direcciones se llama identificadores de extremos (EID), que identifican una interfaz de Thread única dentro de una partición de red de Thread. Los EID son independientes de la topología de la red de Thread.

A continuación, se detallan los tipos comunes de unicast.

Es un EID que identifica una interfaz Thread a la que puede acceder una única transmisión de radio.
Ejemplofe80::54db:881c:3845:57f4
IIDBasado en la dirección extendida 802.15.4
AlcanceVínculo local
Detalles
  • Se usa para descubrir vecinos, intercambiar información de enrutamiento y configurar vínculos
  • No es una dirección enrutable
  • Siempre tiene un prefijo fe80::/16

EID local de la malla (ML-EID)

Es un EID que identifica una interfaz de Thread, independiente de la topología de red. Se utiliza para alcanzar una interfaz de Thread dentro de la misma partición de Thread. También se conoce como dirección local única (ULA).
Ejemplofde5:8dba:82e1:1:416:993c:8399:35ab
IIDAleatorio, se elige luego de que se completa la puesta en marcha
AlcanceMalla-local
Detalles
  • No cambia a medida que cambia la topología
  • Debería usarlo la aplicación.
  • Siempre tiene un prefijo fd00::/8

Localizador de rutas (RLOC)

Identifica una interfaz Thread, según su ubicación en la topología de red.
Ejemplofde5:8dba:82e1:1::ff:fe00:1001
IID0000:00ff:fe00:RLOC16
AlcanceMalla-local
Detalles
  • Se generan cuando se conecta un dispositivo a una red.
  • Para entregar datagramas de IPv6 dentro de una red Thread
  • Cambios a medida que cambia la topología
  • Las aplicaciones no suelen utilizarlas

Localizador de Anycast (ALOC)

Identifica una interfaz Thread mediante la búsqueda de RLOC cuando no se conoce el RLOC de un destino.
Ejemplofde5:8dba:82e1:1::ff:fe00:fc01
IID0000:00ff:fe00:fcXX
AlcanceMalla-local
Detalles
  • fcXX = ALOC destination, que busca el RLOC apropiado
  • Las aplicaciones no suelen utilizarlas

Dirección global de Unicast (GUA)

Un EID que identifica una interfaz Thread en un alcance global, más allá de una red Thread.
Ejemplo2000::54db:881c:3845:57f4
IID
  • ANSAC: Asignación aleatoria por el dispositivo
  • DHCP: Lo asigna un servidor DHCPv6.
  • Manual: asignado por la capa de la aplicación
AlcanceGlobal
Detalles
  • Una dirección IPv6 pública
  • Siempre tiene un prefijo 2000::/3

Multidifusión

La multidifusión se usa para comunicar información a varios dispositivos a la vez. En una red Thread, las direcciones específicas se reservan para su uso en multidifusión con diferentes grupos de dispositivos, según el alcance.

Dirección IPv6 Alcance Dirección de entrega:
ff02::1 Vínculo local Todos los FTD y MED
ff02::2 Vínculo local Todos los FTD
ff03::1 Malla-local Todos los FTD y MED
ff03::2 Malla-local Todos los FTD

Es posible que notes que los dispositivos Sleepy End (SED) no están incluidos como destinatario en la tabla de multidifusión anterior. En cambio, Thread define la dirección de multidifusión IPv6 basada en prefijos de vínculo local y realm-local de alcance que se usa para todos los nodos de subprocesos, como los SED. Estas direcciones de multidifusión varían según la red Thread, ya que se compila en el prefijo de malla local unicast (consulta RFC 3306 para obtener más detalles sobre las direcciones de multidifusión IPv6 basadas en prefijos de unidifusión).

Los alcances arbitrarios aparte de los ya mencionados también son compatibles con los dispositivos de Thread.

Anycast

Anycast se usa para enrutar el tráfico a una interfaz de Thread cuando no se conoce el RLOC de un destino. Un localizador de Anycast (ALOC) identifica la ubicación de varias interfaces dentro de una partición de Thread. Los últimos 16 bits de un ALOC, llamado ALOC16, tienen el formato 0xfcXX, que representa el tipo de ALOC.

Por ejemplo, un ALOC16 entre 0xfc01 y 0xfc0f está reservado para agentes de DHCPv6. Si se desconoce el RLOC del agente de DHCPv6 específico (quizás porque cambió la topología de la red), se puede enviar un mensaje a un ALOC del agente de DHCPv6 para obtener el RLOC.

Thread define los siguientes valores ALOC16:

ALOC‐16 Tipo
0xfc00 Líder
Desde el 0xfc01 al 0xfc0f Agente de DHCPv6
Desde el 0xfc10 al 0xfc2f Servicio
Desde el 0xfc30 al 0xfc37 Comisionado
Desde el 0xfc40 al 0xfc4e Agente de Neighbor Discovery
0xfc38-0xfc3f
0xfc4f-0xfcff
Reservado

Resumen

Qué aprendiste:

  • Una red Thread tiene tres alcances: vínculo local, malla local y global.
  • Un dispositivo Thread tiene varias direcciones IPv6 unicast
    • Un RLOC representa la ubicación de un dispositivo en la red Thread
    • Un AA-EID es único para un dispositivo Thread dentro de una partición y debe usarse en aplicaciones
  • Thread usa multidifusión para reenviar datos a grupos de nodos y routers.
  • El subproceso usa Anycast cuando se desconoce la RLOC de un destino

Para obtener más información sobre el direccionamiento IPv6 de Thread, consulta las secciones 5.2 y 5.3 de la Especificación de subprocesos.

Comprueba tu comprensión

¿Cuáles son los tres alcances que se usan para la unidireccional en una red Thread?
Privada
Incorrecto.
Interfaz local
Incorrecto.
Vínculo local
Correcto.
Sitio local
Incorrecto.
Malla-local
Correcto.
Global
Correcto.
¿Qué significa que un dispositivo tenga un ID secundario de 0?
El dispositivo es un niño.
Incorrecto.
El dispositivo es un REED.
Estuviste cerca, pero la respuesta es incorrecta.
El dispositivo es un router.
Correcto. Un router siempre tiene un ID secundario de 0.
Una cámara, que es un nodo en una red Thread, recibe nuevos RLOC16 y RLOC. ¿Cuál de los siguientes eventos podría haber causado esto?
Alguien descargó imágenes de la cámara de forma remota.
Incorrecto. Este evento no tendría rumbo en la red Thread.
Un router dejó la red.
Correcto. Cuando un router abandona una red, cambia la topología de la red, lo que puede provocar que el dispositivo se promocione a un router y obtenga un nuevo RLOC.
La cámara entró en modo de suspensión, lo que cambió la topología de red.
Incorrecto. El modo de suspensión no haría necesariamente que un dispositivo reciba una dirección de red nueva.
Un dispositivo de una red Thread se suscribe a la dirección multidifusión ff03::2. ¿Qué nos indica el dispositivo?
Es un dispositivo final mínimo (MED).
Incorrecto.
Es un dispositivo de extremo completo (FED).
Incorrecto. (Pista: Puede o no ser un FED).
Es un dispositivo de subproceso mínimo (MTD).
Incorrecto.
Es un dispositivo de conversación completa (FTD).
Correcto. Solo los dispositivos de conversación completa se suscriben a la dirección multidifusión ff03::2. Lo hacen en el permiso Mesh-Local.
¿Qué tipo de direccionamiento y enrutamiento usa Thread para reenviar datos a grupos de nodos y routers?
Unicast
Incorrecto.
Anycast
Incorrecto.
multidifusión
Correcto.
transmisión
Incorrecto.
¿Qué tipo de direccionamiento y enrutamiento usa un dispositivo Thread cuando se desconoce la RLOC del destinatario de su mensaje?
Unicast
Incorrecto.
Anycast
Correcto. Anycast permite que un dispositivo llegue a un nodo cuyo RLOC no es conocido mediante la asignación de la ALOC del dispositivo.
multidifusión
Incorrecto.
transmisión
Incorrecto.