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 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:
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):
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:
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:
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:
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.
Dirección de vínculo local (LLA) |
|
|---|---|
| Es un EID que identifica una interfaz de Thread a la que se puede acceder con una sola transmisión de radio. | |
| Ejemplo | fe80::54db:881c:3845:57f4 |
| IID | Basado en la dirección extendida 802.15.4 |
| Alcance | Vínculo local |
| Detalles |
|
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). | |
| Ejemplo | fde5:8dba:82e1:1:416:993c:8399:35ab |
| IID | Aleatorio, elegido después de que se completa la comisión |
| Alcance | Mesh-Local |
| Detalles |
|
Localizador de ruta (RLOC) |
|
|---|---|
| Identifica una interfaz de Thread según su ubicación en la topología de red. | |
| Ejemplo | fde5:8dba:82e1:1::ff:fe00:1001 |
| IID | 0000:00ff:fe00:RLOC16 |
| Alcance | Mesh-Local |
| Detalles |
|
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. | |
| Ejemplo | fde5:8dba:82e1:1::ff:fe00:fc01 |
| IID | 0000:00ff:fe00:fcXX |
| Alcance | Mesh-Local |
| Detalles |
|
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. | |
| Ejemplo | 2000::54db:881c:3845:57f4 |
| IID |
|
| Alcance | Global |
| Detalles |
|
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 |
0xfc01 – 0xfc0f |
Agente de DHCPv6 |
0xfc10 – 0xfc2f |
Servicio |
0xfc30 – 0xfc37 |
Comisionado |
0xfc40 – 0xfc4e |
Agente de Neighbor Discovery |
0xfc38 – 0xfc3f0xfc4f – 0xfcff |
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
ff03::2. ¿Qué nos dice esto sobre el dispositivo?ff03::2. Lo hacen en el alcance Mesh-Local.