Simula redes de Thread con OTNS

Acerca de este codelab
schedule30 minutos
subjectÚltima actualización: 15 de mayo de 2025
account_circleEscrito por Simon Lin, Colin Tan, Esko Dijk

1. Introducción

Impresión de una topología de red de malla de Thread

¿Qué son Thread y OTNS?

Thread es un protocolo de red en malla inalámbrica de bajo consumo basado en IP que permite comunicaciones seguras entre dispositivos y entre dispositivos y la nube. Las redes Thread pueden adaptarse a los cambios de topología para evitar un punto único de fallo.

OpenThread, que lanzó Google, es una implementación de código abierto de Thread. A pesar de su pequeño tamaño de código y espacio en memoria, OpenThread admite todas las funciones definidas en la especificación de Thread.

El simulador de red OpenThread (OTNS) se puede usar para simular redes Thread ejecutando nodos OpenThread simulados en plataformas POSIX. OTNS proporciona una interfaz web fácil de usar (OTNS-Web) para visualizar y operar redes Thread simuladas. También es posible realizar simulaciones de secuencias de comandos (con Python).

Qué aprenderás

  • Instala OTNS y sus dependencias
  • Conoce los aspectos básicos de OTNS-CLI
  • Cómo agregar, mover o borrar nodos OpenThread en OTNS-Web
  • Usa las otras funciones útiles de OTNS-Web para controlar la simulación de red
  • Verifica que OpenThread no tenga un punto único de fallo
  • Consulta el tráfico de datos entre los nodos de OpenThread en Wireshark

Este codelab se enfoca en OTNS-CLI y OTNS-Web para el uso interactivo. No se incluyen otras funciones de OTNS, como la escritura de secuencias de comandos de Python.

Requisitos

  • Preferentemente, Linux x86_64 o macOS con Homebrew Ubuntu 22/24 en WSL2 de Windows también debería funcionar, pero es posible que debas ajustar algunos parámetros de configuración de forma manual.
  • Git.
  • Navegador web OTNS-Web usa un navegador web para mostrar simulaciones.
  • Introducción a los subprocesos. Deberás conocer los conceptos básicos de Thread para comprender lo que se enseña en este codelab.

Terminología

El término "router" se usa como término técnico para el amplificador de malla Thread, que inicialmente se llamaba router Thread. "Nodo" hace referencia a cualquier dispositivo OpenThread simulado en una simulación de OTNS.

2. Instalación

Cómo obtener el código de OTNS

$ git clone https://github.com/openthread/ot-ns.git ./otns
$ cd otns

Todos los comandos de consola posteriores de este codelab se ejecutan desde el directorio otns.

Inicio y, luego, instalación

La secuencia de comandos bootstrap instalará las dependencias (incluidos Python3 y Go/Golang, si es necesario) y, luego, OTNS. También compila los diversos tipos de nodos de OT que se pueden usar directamente en una simulación y realiza algunas pruebas básicas. Debido a las compilaciones de nodos, puede tardar varios minutos.

$ ./script/bootstrap
....
....
OTNS installed - use 'otns' to start it.
$

Es posible que se te solicite ingresar una contraseña para sudo.

Si otns no está instalada correctamente

La secuencia de comandos puede informar un error como el siguiente:

....
OTNS installed - please add ~/go/bin to your PATH variable first, to use it.
$

En este caso, debes agregar $(go env GOPATH)/bin a tu $PATH..

En caso de otros errores, se puede crear un problema de GitHub.

3. Ejecuta OTNS por primera vez

Ejecuta otns:

$ otns
>_ ← OTNS-CLI prompt

Cuando se inicie correctamente, OTNS ingresará a una consola de CLI (OTNS-CLI) y abrirá un navegador web para la visualización y administración de la red (OTNS-Web):

Ventana de OTNS-Web al inicio

Si solo ves una página en blanco para OTNS-Web, es probable que WebGL no esté habilitado en tu navegador. Consulta https://superuser.com/a/836833 para obtener información sobre cómo habilitar WebGL.

En las siguientes secciones, aprenderás a administrar simulaciones de OTNS a través de OTNS-CLI y OTNS-Web.

4. Conoce OTNS-CLI y OTNS-Web

OTNS-CLI

OTNS-CLI es la interfaz de línea de comandos (CLI) para administrar simulaciones de OTNS.

$ otns
>_ ← OTNS-CLI prompt

Puedes escribir comandos a través de OTNS-CLI. Consulta la referencia de la CLI de OTNS para obtener una lista completa de los comandos. No te preocupes, solo usarás algunos de estos comandos en este codelab.

Escribe el comando help para obtener una descripción general de los comandos de la CLI. Esta lista es idéntica a la referencia de la CLI.

> help
add             Add a node to the simulation and get the node ID.
....
....
Done
> 

Para obtener más ayuda sobre un comando específico, usa el nombre del comando, por ejemplo:

> help add
add
  Add a node to the simulation and get the node ID.
  
Definition:
....
....
> 

OTNS-Web

OTNS-Web es la herramienta de visualización y administración de redes de OTNS. Proporciona una representación visual de los nodos, los mensajes y los vínculos de la red Thread simulada. Observa los diversos elementos de OTNS-Web:

Explicación de los elementos de OTNS-Web

5. Agrega nodos

Agrega nodos a través de OTNS-CLI

Agrega un router Thread a la simulación:

> add router
1
Done

Deberías ver un nodo creado en OTNS-Web. El nodo comienza como un router y se convierte en un líder en unos segundos:

Un nodo en el rol de líder

Para facilitar el inicio de simulaciones de forma interactiva, cada nodo OpenThread nuevo se comisiona de forma predeterminada con un conjunto estándar de parámetros de red.

Agrega más nodos a través de OTNS-CLI

Ahora agregaremos algunos nodos de diferentes tipos.

> add fed
2
Done
> add med
3
Done
> add sed
4
Done

Espera unos segundos a que los nodos se combinen en una partición. Deberías ver los nodos en OTNS-Web:

Red de Thread con 4 nodos

También en OTNS-Web, es posible seleccionar cualquiera de los nodos para obtener un panel con más información sobre él. Por ejemplo, en la siguiente figura, se seleccionó el nodo 1. La entrada "Rol" del panel confirma que es un líder.

Red Thread con 4 nodos, se seleccionó el nodo 1

Agrega nodos por OTNS-Web

También puedes agregar nodos a través de OTNS-Web. Haz clic en el botón New Router de Action Bar. Deberías ver un nodo que se crea a la derecha del nodo seleccionado. El router nuevo debe unirse a la partición de Thread existente:

Se agrega un router, en total 5 nodos

También haz clic en los botones FED, MED, SSED y BR en la barra de acciones para crear estos otros tipos de nodos. Ahora debería haber 9 nodos en total. Si quieres, arrastra algunos nodos a otras posiciones para crear una topología de red física diferente.

Se agregaron varios nodos nuevos, en total 9 nodos

Ahora creaste una red Thread de una partición que contiene muchos nodos. En la siguiente sección, ajustaremos la velocidad de simulación para que la simulación se ejecute más rápido.

6. Ajusta la velocidad

Actualmente, la simulación debería estar ejecutándose a la velocidad de 1X, lo que significa que el tiempo de simulación transcurrido hasta el momento es el mismo que el tiempo real desde que creamos el primer nodo.

Ajusta la velocidad con OTNS-CLI

Puedes ajustar la velocidad de simulación a través de OTNS-CLI.

Establecer la velocidad de simulación en 100X

> speed 100
Done

Deberías ver que los nodos envían mensajes con mucha más frecuencia que antes.

Establecer la velocidad de simulación en MAX

> speed max
Done

Ahora, OTNS intenta hacer lo mejor posible para simular lo más rápido posible, por lo que deberías ver que los nodos envían una gran cantidad de mensajes.

Poner simulación en pausa

> speed 0
Done

Si estableces la velocidad de simulación en 0, se pausa la simulación.

Cómo restablecer la simulación a velocidad normal

> speed 1
Done

Si estableces la velocidad de simulación en un valor superior a 0, se reanuda la simulación.

Ajusta la velocidad con OTNS-Web

Botones de control de velocidad

Busca los botones de control de velocidad Botones de control de velocidad en el Action Bar. Los botones muestran la velocidad de simulación actual y se pueden usar para ajustar la velocidad de simulación y pausar o reanudar la simulación.

Acelera la simulación

Para acelerar la simulación, haz clic en el botón Botón para aumentar la velocidad hasta que la velocidad alcance MAX: Indicador de velocidad máxima de la simulación.

Disminuye la velocidad de la simulación

Para ralentizar la simulación, haz clic en el botón Botón para disminuir la velocidad.

Poner simulación en pausa

Haz clic en el botón Botón para pausar para pausar la simulación cuando se esté ejecutando. El botón cambiará a Botón de reproducción.

Cómo reanudar la simulación

Haz clic en el botón Botón de reproducción para reanudar la simulación cuando esté pausada. El botón volverá a cambiar a Botón para pausar.

Establecer la velocidad de simulación en 10X

Para ahorrar tiempo, usa

OTNS-CLI para ajustar la velocidad de simulación a

10X para que podamos observar los cambios de topología en la red mucho más rápido.

> speed 10
Done

7. Cómo encender o apagar la radio

Ahora, la simulación debe contener al menos 2 routers (forma hexagonal), posiblemente un router de borde (forma cuadrada) y muchos elementos secundarios, y debe ejecutarse a 10 veces la velocidad.

Busca el líder actual (borde rojo) de los 2 routers y haz clic para seleccionarlo:

Red Thread con el nodo líder 1 seleccionado

Apagar la radio

Haz clic en el botón Botón de apagado de la radio de la barra de acciones para desactivar la radio del nodo líder. El líder no podrá enviar ni recibir mensajes con la radio apagada.

Espera alrededor de 12 s (120 s en tiempo de simulación) para que el otro router o router de borde se convierta en el nuevo líder:

Se forma una partición nueva con el nodo 9 como el nuevo líder.

La red Thread se recupera de la falla del líder automáticamente formando una partición nueva con un líder nuevo. La partición nueva también tiene un color nuevo.

Encender la radio

Selecciona el líder cuya radio se apagó. Haz clic en el botón Botón de encendido de la radio en Action Bar para restablecer la conectividad de la radio:

El nodo 1 se une a la partición después de que se vuelve a encender la radio

El líder debería volver a conectarse a la red después de que se restablezca la conectividad de radio.

8. Cómo mover nodos

OTNS permite a los usuarios mover nodos fácilmente a través de OTNS-CLI o OTNS-Web.

Cómo mover un nodo a través de OTNS-CLI

Mueve el nodo 9 del router de borde a una ubicación nueva:

> move 9 50 50
Done

Cómo mover un nodo a través de OTNS-Web

Arrastra el nodo 5 hasta la esquina inferior derecha. Como el nodo 5 ahora está fuera de la cobertura de radio de los otros routers, forma su propia partición con un nuevo ID de partición. Para verificar los IDs de partición en el panel de información del nodo, haz clic en los nodos.

El nodo 5 se aleja de los otros nodos y forma una partición nueva.

Ten en cuenta que todavía se dibuja una sola línea verde entre el nodo 5 y el 9. Esto suele deberse a información desactualizada sobre un elemento secundario, que aún se conserva en la tabla secundaria de un elemento superior anterior. O podría ser información desactualizada sobre el vínculo anterior de router a router entre el nodo 9 y el nodo 5. (o, en este caso, incluso un error de renderización). Con el tiempo, la información inactiva se limpia en los nodos después del tiempo de espera adecuado.

9. Borrar nodos

Borrar nodos a través de OTNS-CLI

Borra el nodo 5:

> del 5
Done

El nodo 5 debería desaparecer de la simulación:

Se borra el nodo 5 de la simulación.

Borrar nodos a través de OTNS-Web

Selecciona el nodo 9 del router de borde y haz clic en el botón Botón para borrar en Action Bar para borrarlo:

Se borra el nodo 9 del router de borde

Node 1 debe convertirse en el líder de una nueva partición y todos los nodos restantes se adjuntarán como secundarios al nodo 1.

10. Contexto del nodo de OTNS-CLI

OTNS-CLI proporciona el modo de contexto de nodo para facilitar la interacción con los nodos y ayudar a los desarrolladores a diagnosticar el estado de un nodo. También se pueden iniciar acciones de nodos desde este modo.

Ingresa al modo de contexto del nodo

Ingresa el contexto del nodo 1:

> node 1
Done
node 1>

El mensaje de la CLI cambió a node 1> , lo que indica el contexto del nodo actual. Puedes escribir comandos de la CLI de OpenThread para que se ejecuten en el nodo como si estuvieras interactuando con él directamente.

Ejecuta comandos en el contexto del nodo

node 1> state
leader
Done
node 1> channel
11
Done
node 1> panid
0xface
Done
node 1> networkname
otns
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:b400
fd00:f00d:cafe:0:2505:8719:3685:ebfb
fdde:ad00:beef:0:4fd9:b9ba:44e0:96cb
fe80:0:0:0:e86a:e07:ec97:777
Done

Cómo cambiar a otro contexto de nodo

node 1> node 2
Done
node 2> 

Salir del contexto del nodo

node 1> exit
Done
>

Una forma alternativa de salir del contexto del nodo es el comando node 0.

11. Visualiza los registros de nodos y las capturas de paquetes

Registros de nodos de OpenThread

De forma predeterminada, OTNS genera archivos de registro detallados para todos los nodos OpenThread simulados. Se pueden ver en el directorio ./tmp. El nombre del archivo es 0_.log. Por ejemplo, a continuación, se muestra un extracto de un archivo de registro:

7616488 00:00:06.326 [I] MeshForwarder-: Received IPv6 UDP msg, len:90, chksum:5915, ecn:no, from:ca72650db7b856af, sec:no, prio:net, rss:-58.0
7616488 00:00:06.326 [I] MeshForwarder-:     src:[fe80:0:0:0:c872:650d:b7b8:56af]:19788
7616488 00:00:06.326 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:1]:19788
7616488 00:00:06.326 [D] Mle-----------: Receive MLE message
7616488 00:00:06.326 [D] Mac-----------: Idle mode: Radio receiving on channel 11
7657544 00:00:06.367 [D] Mac-----------: ==============================[RX len=063]==============================
7657544 00:00:06.367 [D] Mac-----------: | 41 D8 7F CE FA FF FF 46 | 74 5A 33 9E 76 51 4E 7F | A......FtZ3.vQN. |
7657544 00:00:06.367 [D] Mac-----------: | 3B 02 F0 4D 4C 4D 4C 81 | E6 00 15 03 00 00 00 00 | ;..MLML......... |
7657544 00:00:06.367 [D] Mac-----------: | 00 00 00 01 46 86 7D FE | 06 CC DB 94 86 9C 88 0B | ....F.}......... |
7657544 00:00:06.367 [D] Mac-----------: | 1C 1E 26 9B 8D 21 2E 65 | 53 5A 43 4E A2 59 D6    | ..&..!.eSZCN.Y.  |
7657544 00:00:06.367 [D] Mac-----------: ------------------------------------------------------------------------
7657544 00:00:06.367 [I] MeshForwarder-: Received IPv6 UDP msg, len:84, chksum:81e6, ecn:no, from:4e51769e335a7446, sec:no, prio:net, rss:-48.0
7657544 00:00:06.367 [I] MeshForwarder-:     src:[fe80:0:0:0:4c51:769e:335a:7446]:19788
7657544 00:00:06.367 [I] MeshForwarder-:     dst:[ff02:0:0:0:0:0:0:2]:19788
7657544 00:00:06.367 [D] Mac-----------: Idle mode: Radio receiving on channel 11
7833912 00:00:06.543 [I] Mle-----------: AttachState ParentReq -> Idle
7833912 00:00:06.543 [N] RouterTable---: Allocate router id 12
7833912 00:00:06.543 [N] Mle-----------: RLOC16 fffe -> 3000
7833912 set node RLOC16: fffe -> 3000
7833912 00:00:06.543 [D] SubMac--------: RadioShortAddress: 0x3000
7833912 00:00:06.543 [N] Mle-----------: Role detached -> leader
7833912 00:00:06.543 [N] Mle-----------: Partition ID 0x24c35f10
7833912 00:00:06.543 [I] RouterTable---: Route table
7833912 00:00:06.543 [I] RouterTable---:     12 0x3000 - me - leader

El tiempo de simulación absoluto en microsegundos se muestra a la izquierda. La marca de tiempo hh:mm:ss muestra la marca de tiempo del registro del nodo OpenThread, que puede diferir del tiempo de simulación absoluto.

Capturas de paquetes de Wireshark

De forma predeterminada, todos los cuadros IEEE 802.15.4 transmitidos se capturan en el archivo PCAP current.pcap. Wireshark puede leer este archivo durante o después de la simulación. Debido a la encriptación de la capa de vínculo de Thread, se necesita una acción de configuración única en Wireshark para establecer correctamente la clave de desencriptación de OTNS. De forma predeterminada, se usa una clave de red conocida para que la desencriptación de tramas por parte de Wireshark sea sencilla.

Consulta la siguiente captura de pantalla para ver un ejemplo de inspección de paquetes de OpenThread en Wireshark.

Captura de pantalla del análisis de paquetes de OpenThread en Wireshark

Para configurar la clave de desencriptación, selecciona Editar -> Preferencias en el menú. Luego, en la ventana de preferencias, selecciona Protocols -> IEEE 802.15.4. Haz clic en el botón Editar… junto a "Llaves de desencriptación". Haz clic en + para crear una entrada nueva, ingresa la clave 00112233445566778899aabbccddeeff (32 caracteres) y selecciona "Hash de subproceso" en el campo "Hash de clave". El "índice de clave de desencriptación" se puede dejar en 0. Luego, haz clic en Aceptar y, nuevamente, en Aceptar. Ahora, el archivo PCAP de OTNS debería desencriptarse correctamente cuando se cargue.

Las marcas de tiempo que se muestran en la columna “Time” (en segundos) corresponden a los valores de tiempo de simulación absolutos que se muestran en los registros del nodo OpenThread. Esto facilita la correlación de los mensajes de registro con las tramas de radio transmitidas o recibidas. Sin embargo, los valores suelen no ser idénticos hasta la precisión de un microsegundo: el hardware de radio simulado IEEE 802.15.4 puede agregar un retraso adicional después de que la pila de OpenThread solicita que se envíe una trama de radio.

12. Felicitaciones

Felicitaciones, ejecutaste correctamente tu primera simulación de OTNS.

Aprendiste a instalar OTNS y sus dependencias. Iniciaste una simulación de OTNS con nodos simulados de OpenThread. Aprendiste a manipular la simulación de varias maneras a través de OTNS-CLI y OTNS-Web.

Ahora sabes qué es OTNS y cómo puedes usarla para simular redes OpenThread.

Próximos pasos

Consulta algunos codelabs sobre los siguientes temas:

Documentos de referencia