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

En la red Thread existen tres alcances para la direccionamiento de unidifusión:
- Vínculo local: Todas las interfaces a las que se puede acceder mediante una sola transmisión de radio
- Mesh-Local: todas las interfaces a las que se puede acceder en la misma red Thread
- Global: todas las interfaces accesibles desde fuera de una red Thread
Los primeros dos alcances corresponden a prefijos designados por una red Thread.
Link-Local tiene prefijos de fe80::/16
, mientras que la malla local tiene prefijos de fd00::/8
.
Unicast
Hay 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 de uso.
Antes de detallar cada tipo, obtengamos más información sobre uno común, que se llama localizador de rutas (RLOC). El RLOC identifica una interfaz de Thread, según su ubicación en la topología de la red.
Cómo se genera un localizador de rutas
Todos los dispositivos tienen asignados 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 de la siguiente topología, en los que el número de un router (pentágono) es el ID del router y el número de un dispositivo final (círculo) es el ID secundario:

Cada ID de router secundario corresponde a su superior (router). Como un router no es un elemento secundario, el ID secundario de un router siempre es 0. Juntos, 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, a continuación, se muestra cómo se calcula el RLOC16 para el nodo superior izquierdo (ID de router = 1 e ID secundario = 1):

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 Thread. Por ejemplo, el IID de los RLOC siempre tiene el siguiente formato:
0000:00ff:fe00:RLOC16
El IID, combinado con un prefijo de malla local, da como resultado el RLOC. Por ejemplo, si usas un prefijo de malla local de fde5:8dba:82e1:1::/64
, el RLOC para un nodo en el que RLOC16 = 0x401
es el siguiente:

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

Sin embargo, debido a que el RLOC se basa en la ubicación del nodo en la topología, este último puede cambiar a medida que lo hace la topología.
Por ejemplo, quizás se quita el nodo 0x400
de la red de Thread. Los nodos 0x401
y 0x402
establecen vínculos nuevos a diferentes routers y, como resultado, se les asigna un RLOC16 y RLOC nuevos:

Tipos de direcciones de Unicast
El RLOC es solo una de las distintas direcciones Unicast IPv6 que puede tener un dispositivo Thread. Otra categoría de direcciones son 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 red de Thread.
A continuación, se muestran los tipos comunes de unidifusión.
Vínculo de dirección local (LLA) |
|
---|---|
Un EID que identifica una interfaz de Thread a la que puede acceder una sola transmisión de radio. | |
Ejemplo | fe80::54db:881c:3845:57f4 |
ID | Basada en la dirección extendida 802.15.4 |
Ámbito | Vínculo local |
Detalles |
|
EID local de la malla (ML-EID) |
|
---|---|
Un EID que identifica una interfaz de Thread, independiente de la topología de red. Se utiliza para acceder a una interfaz de Thread dentro de la misma partición de Thread. También se denomina dirección local única (ULA). | |
Ejemplo | fde5:8dba:82e1:1:416:993c:8399:35ab |
ID | Aleatoria, seleccionada después de que se completa la puesta en marcha |
Ámbito | Malla local |
Detalles |
|
Localizador de rutas (RLOC) |
|
---|---|
Identifica una interfaz de Thread, según su ubicación en la topología de la red. | |
Ejemplo | fde5:8dba:82e1:1::ff:fe00:1001 |
ID | 0000:00ff:fe00:RLOC16 |
Ámbito | Malla local |
Detalles |
|
Anycast Locator (ALOC) |
|
---|---|
Identifica una interfaz Thread a través de la búsqueda de RLOC cuando no se conoce el RLOC de un destino. | |
Ejemplo | fde5:8dba:82e1:1::ff:fe00:fc01 |
ID | 0000:00ff:fe00:fcXX |
Ámbito | Malla local |
Detalles |
|
Dirección global de unicas (GUA) |
|
---|---|
Un EID que identifica una interfaz de Thread a nivel global, más allá de una red Thread. | |
Ejemplo | 2000::54db:881c:3845:57f4 |
ID |
|
Ámbito | Global |
Detalles |
|
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 el uso de multidifusión con diferentes grupos de dispositivos, según el alcance.
Dirección IPv6 | Scope | 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 finales con sueño (SED) no se incluyen como destinatarios en la tabla multidifusión que aparece arriba. En cambio, Thread define la dirección multidifusión IPv6 basada en prefijos local-vínculo y real-local 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 compila en el prefijo de malla local de unidicast (consulta RFC 3306 para obtener más detalles sobre las direcciones de multidifusión basadas en prefijos Unicast de Unicast).
También se admiten alcances arbitrarios más allá de los ya mencionados para dispositivos Thread.
Anycast
Anycast se usa para enrutar el tráfico a una interfaz de Thread cuando se desconoce 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 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:
ALOC16 | Tipo |
---|---|
0xfc00 |
Líder |
0xfc01 – 0xfc0f |
Agente DHCPv6 |
0xfc10 – 0xfc2f |
Service |
0xfc30 – 0xfc37 |
Comisionado |
0xfc40 – 0xfc4e |
Agente de detección de vecino |
0xfc38 -0xfc3f 0xfc4f -0xfcff |
Reservado |
Resumen
Qué aprendiste:
- Una red Thread tiene tres alcances: local de vínculo, malla 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 de Thread
- Un ML-EID es exclusivo de un dispositivo Thread dentro de una partición y debe usarlo las aplicaciones
- Thread usa la multidifusión para reenviar datos a grupos de nodos y routers
- Thread usa anycast cuando el RLOC de un destino es desconocido
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 tus conocimientos
ff03::2
. ¿Qué nos dice esto del dispositivo?ff03::2
. Lo hacen en el alcance de la malla local.