1. Introducción
¿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
):
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
:
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:
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
:
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.
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:
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.
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 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 hasta que la velocidad alcance
MAX
: .
Disminuye la velocidad de la simulación
Para ralentizar la simulación, haz clic en el botón .
Poner simulación en pausa
Haz clic en el botón para pausar la simulación cuando se esté ejecutando. El botón cambiará a
.
Cómo reanudar la simulación
Haz clic en el botón para reanudar la simulación cuando esté pausada. El botón volverá a cambiar a
.
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:
Apagar la radio
Haz clic en el botón 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:
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 en
Action Bar
para restablecer la conectividad de 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.
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:
Borrar nodos a través de OTNS-Web
Selecciona el nodo 9 del router de borde y haz clic en el botón en
Action Bar
para borrarlo:
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_
. 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.
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:
- Cómo simular una red Thread con OpenThread
- Cómo simular una red Thread con OpenThread en Docker
- Cómo compilar una red Thread con placas nRF52840 y OpenThread