Direccionamiento IPv6

Ver el código fuente en GitHub

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

Permisos

Permisos de OT

En una red Thread, existen tres alcances para el direccionamiento de unicast:

  • Vínculo local: Todas las interfaces a las que se puede acceder con una sola transmisión de radio
  • Mesh-Local: Todas las interfaces a las que se puede acceder dentro de la misma red de Thread
  • Global: Todas las interfaces a las que se puede acceder desde fuera de una red Thread

Los dos primeros alcances corresponden a prefijos designados por una red de Thread. Los vínculos locales tienen prefijos de fe80::/16, mientras que los vínculos de malla tienen prefijos de fd00::/8.

Unicast

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

Antes de detallar cada tipo, obtengamos más información sobre uno común, llamado localizador de ruta (RLOC). El RLOC identifica una interfaz de 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 elemento principal 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 amplificador de malla (pentágono) es el ID del router y el número de un dispositivo final (círculo) es el ID del dispositivo secundario:

Topología de RLOC de OT

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

Por ejemplo, así se calcula el RLOC16 para el nodo superior izquierdo (ID del router = 1 y ID del hijo = 1):

OT RLOC16

El RLOC16 forma 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 las RLOC siempre tiene este formato:

0000:00ff:fe00:RLOC16

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

OT RLOC

Esta misma lógica se puede usar para determinar la ubicación relativa (RLOC) de todos los nodos destacados en la topología de muestra anterior:

Topología de OT con dirección

Sin embargo, dado 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, tal vez se quite el nodo 0x400 de la red de Thread. Los nodos 0x401 y 0x402 establecen vínculos nuevos con diferentes amplificadores de malla y, como resultado, a cada uno se le asigna un nuevo RLOC16 y RLOC:

Topología de OT después del cambio

Tipos de direcciones de unidifusión

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

A continuación, se detallan los tipos de transmisión por unicast más comunes.

Es un EID que identifica una interfaz de Thread a la que se puede acceder con una sola 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, configurar vínculos e intercambiar información de enrutamiento.
  • No es una dirección enrutable
  • Siempre tiene un prefijo de fe80::/16

EID local de malla (ML-EID)

Es un EID que identifica una interfaz de Thread, independientemente de la topología de red. Se usa para acceder a una interfaz de Thread dentro de la misma partición de Thread. También se denomina dirección local única (ULA).
Ejemplofde5:8dba:82e1:1:416:993c:8399:35ab
IIDAleatorio, elegido después de que se completa la comisión
AlcanceMesh-Local
Detalles
  • No cambia a medida que cambia la topología
  • Las aplicaciones deben usarlo
  • Siempre tiene un prefijo fd00::/8

Localizador de ruta (RLOC)

Identifica una interfaz de Thread según su ubicación en la topología de red.
Ejemplofde5:8dba:82e1:1::ff:fe00:1001
IID0000:00ff:fe00:RLOC16
AlcanceMesh-Local
Detalles
  • Se genera una vez que un dispositivo se conecta a una red.
  • Para entregar datagramas IPv6 dentro de una red Thread
  • Cambios a medida que cambia la topología
  • Por lo general, las aplicaciones no lo usan.

Localizador de Anycast (ALOC)

Identifica una interfaz de Thread a través de 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
AlcanceMesh-Local
Detalles
  • fcXX = destino de ALOC, que busca el RLOC adecuado
  • Por lo general, las aplicaciones no lo usan.

Dirección de unidifusión global (GUA)

Es un EID que identifica una interfaz de Thread en un alcance global, más allá de una red de Thread.
Ejemplo2000::54db:881c:3845:57f4
IID
  • SLAAC: El dispositivo lo asigna de forma aleatoria.
  • DHCP: Asignada por un servidor DHCPv6
  • Manual: Se asigna a través de la capa de la aplicación.
AlcanceGlobal
Detalles
  • Una dirección IPv6 pública
  • Siempre tiene un prefijo de 2000::/3

Multicast

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

Dirección IPv6 Alcance Entregado a
ff02::1 Vínculo local Todas las FTD y los MED
ff02::2 Vínculo local Todas las FTD
ff03::1 Mesh-Local Todas las FTD y los MED
ff03::2 Mesh-Local Todas las FTD

Es posible que notes que los dispositivos finales en suspensión (SED) no se incluyen como destinatarios en la tabla de multidifusión anterior. En cambio, Thread define una dirección IPv6 de multidifusión basada en prefijos con alcance local de vínculo y local de dominio que se usa para todos los nodos de Thread, incluidos los SED. Estas direcciones de multidifusión varían según la red de Thread, ya que se basa en el prefijo de malla local de unidifusión (consulta RFC 3306 para obtener más detalles sobre las direcciones de multidifusión IPv6 basadas en prefijos de unidifusión).

También se admiten alcances arbitrarios más allá de los que ya se enumeraron para los dispositivos 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, denominados ALOC16, tienen el formato 0xfcXX, que representa el tipo de ALOC.

Por ejemplo, se reserva un ALOC16 entre 0xfc01 y 0xfc0f para los agentes de DHCPv6. Si se desconoce la ubicación lógica del agente DHCPv6 específico (quizás porque cambió la topología de la red), se puede enviar un mensaje a la ubicación lógica del agente DHCPv6 para obtener la ubicación lógica.

El subproceso define los siguientes valores de ALOC16:

ALOC16 Tipo
0xfc00 Líder
0xfc010xfc0f Agente de DHCPv6
0xfc100xfc2f Servicio
0xfc300xfc37 Comisionado
0xfc400xfc4e Agente de Neighbor Discovery
0xfc380xfc3f
0xfc4f0xfcff
Reservada

Resumen

Qué aprendiste:

  • Una red de Thread consta de tres permisos: Link-Local, Mesh-Local y Global.
  • Un dispositivo Thread tiene varias direcciones IPv6 de unidifusión.
    • Un RLOC representa la ubicación de un dispositivo en la red Thread
    • Un ML-EID es único para un dispositivo Thread dentro de una partición y las aplicaciones lo deben usar.
  • Thread usa la transmisión multidifusión para reenviar datos a grupos de nodos
  • El subproceso usa la transmisión a cualquier destino 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 Thread.

Verifica tus conocimientos

¿Qué tres permisos se usan para el direccionamiento de unidifusión en una red de Thread?
Privado
Incorrecto.
Interfaz local
Incorrecto.
Vínculo local
Correcto.
Site-Local
Incorrecto.
Mesh-Local
Correcto.
Global
Correcto.
¿Qué significa que un dispositivo tenga un ID de niño de 0?
El dispositivo es un niño o niña.
Incorrecto.
El dispositivo es un dispositivo compatible con el amplificador.
Buen intento, pero no es la respuesta correcta.
El dispositivo es un amplificador de malla.
Correcto. Un amplificador de malla siempre tiene un ID secundario de 0.
Una cámara, que es un nodo en una red de Thread, recibe un nuevo RLOC16 y un nuevo 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 ningún efecto en la red de Thread.
Un amplificador de malla se desconectó de la red.
Correcto. Cuando un amplificador de malla se desconecta de una red, cambia la topología de la red, lo que puede hacer que el dispositivo se promueva a sí mismo como amplificador de malla y obtenga un nuevo RLOC.
La cámara entró en modo de suspensión, lo que cambió la topología de red.
Incorrecto. Entrar en modo de suspensión no necesariamente haría que un dispositivo reciba una nueva dirección de red.
Un dispositivo en una red Thread se suscribe a la dirección de multidifusión ff03::2. ¿Qué nos dice esto sobre el dispositivo?
Es un dispositivo final mínimo (MED).
Incorrecto.
Es un dispositivo final completo (FED).
Incorrecto. (Pista: Puede ser o no un FED).
Es un dispositivo Thread mínimo (MTD).
Incorrecto.
Es un dispositivo Full Thread (FTD).
Correcto. Solo los dispositivos Full Thread se suscriben a la dirección de multidifusión ff03::2. Lo hacen en el alcance Mesh-Local.
¿Qué tipo de direccionamiento y enrutamiento usa Thread para reenviar datos a grupos de nodos?
Unicast
Incorrecto.
anycast
Incorrecto.
multicast
Correcto.
transmisión
Incorrecto.
¿Qué tipo de direccionamiento y enrutamiento usa un dispositivo Thread cuando se desconoce la RLOC del destinatario del mensaje?
Unidifusión
Incorrecto.
anycast
Correcto. Anycast permite que un dispositivo llegue a un nodo cuyo RLOC no se conoce, ya que se dirige al ALOC del dispositivo.
multicast
Incorrecto.
transmisión
Incorrecto.