Simulare reti Thread utilizzando OTNS

Informazioni su questo codelab
schedule30 minuti
subjectUltimo aggiornamento: 25 luglio 2025
account_circleScritto da: Simon Lin, Colin Tan, Esko Dijk

1. Introduzione

Impressione di una topologia di rete mesh Thread

Che cos'è Thread e OTNS

Thread è un protocollo di rete mesh wireless a basso consumo basato su IP che consente comunicazioni sicure tra dispositivi e tra dispositivi e cloud. Le reti Thread possono adattarsi alle modifiche della topologia per evitare un unico punto di errore.

OpenThread rilasciato da Google è un'implementazione open source di Thread. Nonostante le dimensioni ridotte del codice e l'ingombro della memoria, OpenThread supporta tutte le funzionalità definite nella specifica Thread.

OpenThread Network Simulator (OTNS) può essere utilizzato per simulare le reti Thread eseguendo nodi OpenThread simulati su piattaforme POSIX. OTNS fornisce un'interfaccia web facile da usare (OTNS-Web) per visualizzare e gestire le reti Thread simulate. Sono possibili anche simulazioni basate su script (con Python).

Obiettivi didattici

  • Installa OTNS e le relative dipendenze
  • Scopri le nozioni di base di OTNS-CLI
  • Come aggiungere/spostare/eliminare nodi OpenThread in OTNS-Web
  • Utilizza le altre utili funzionalità di OTNS-Web per controllare la simulazione di rete
  • Verifica l'assenza di un singolo punto di errore di OpenThread
  • Visualizzare il traffico di dati tra i nodi OpenThread in Wireshark

Questo codelab è incentrato su OTNS-CLI e OTNS-Web per l'uso interattivo. Le altre funzionalità di OTNS, come lo scripting Python, non sono coperte.

Che cosa ti serve

  • Thread Primer. Per comprendere gli argomenti trattati in questo codelab, devi conoscere i concetti di base di Thread.
  • Preferibilmente Linux x86_64 o Mac OS con Homebrew. Dovrebbe funzionare anche Ubuntu versione 24 o successive in Windows WSL2, ma potrebbe essere necessario modificare manualmente alcune impostazioni.
  • Git.
  • Browser web. OTNS-Web utilizza un browser web per visualizzare le simulazioni.
  • Analizzatore di protocolli di rete Wireshark (facoltativo).
  • Go versione 1.23 o successive.
    • Lo script di installazione controllerà la versione di Go installata.
    • Se Go non è installato, verrà installata una versione >= 1.23, se disponibile dal gestore dei pacchetti.
    • Se non è disponibile dal gestore di pacchetti, è necessaria l'installazione manuale.
    • Tieni presente che Ubuntu 24.04 o versioni precedenti non supportano automaticamente Go 1.23. Per informazioni dettagliate, consulta la pagina Versioni di Golang disponibili nella documentazione di Ubuntu. È possibile l'installazione manuale, utilizzando snap o altre procedure.
  • Python versione 3.9 o successive.
    • Lo script di installazione verificherà la versione di Python installata.
    • Se Python 3 non è ancora installato, verrà installata una versione >= 3.9, se disponibile dal gestore dei pacchetti.
    • Se non è disponibile dal gestore di pacchetti, è necessaria l'installazione manuale.

Terminologia

Il termine "router" viene utilizzato come termine tecnico per l'extender mesh Thread, inizialmente chiamato router Thread. "Nodo" si riferisce a qualsiasi dispositivo OpenThread simulato in una simulazione OTNS.

2. Installazione

Ottieni il codice OTNS

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

Tutti i comandi della console successivi in questo codelab vengono eseguiti dalla directory otns.

Bootstrap e installazione

Lo script bootstrap installerà le dipendenze (inclusi Python 3 e Go/Golang, se necessario) e OTNS. Tieni presente che lo script potrebbe interrompersi se non riesce a installare automaticamente alcune dipendenze, ad esempio Python versione >= 3.9 o Go versione >= 1.23. L'installazione automatica richiede che i pacchetti possano essere trovati nel repository di pacchetti configurato del sistema operativo.

Lo script crea anche i vari tipi di nodi OT che possono essere utilizzati direttamente in una simulazione ed esegue alcuni test di base. A causa di queste build dei nodi, l'operazione può richiedere diversi minuti.

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

Durante l'esecuzione dello script, potrebbe esserti chiesto di inserire una password per sudo.

Se otns non è installato correttamente

Lo script potrebbe segnalare un errore come:

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

In questo caso, devi aggiungere $(go env GOPATH)/bin alla variabile $PATH.

In caso di altri errori, è possibile creare un problema su GitHub.

3. Eseguire OTNS per la prima volta

Corsa otns:

$ otns
>_ ← OTNS-CLI prompt

Una volta avviato correttamente, OTNS accederà a una console CLI (OTNS-CLI) e avvierà un browser web per la visualizzazione e la gestione della rete (OTNS-Web):

Finestra OTNS-Web all'avvio

Se visualizzi solo una pagina vuota per OTNS-Web, è probabile che WebGL non sia attivato nel browser. Consulta la pagina https://superuser.com/a/836833 per informazioni su come attivare WebGL.

Nelle sezioni seguenti imparerai a gestire le simulazioni OTNS tramite OTNS-CLI e OTNS-Web.

4. Scopri OTNS-CLI e OTNS-Web

OTNS-CLI

OTNS-CLI è l'interfaccia a riga di comando (CLI) per la gestione delle simulazioni OTNS.

$ otns
>_ ← OTNS-CLI prompt

Puoi digitare i comandi tramite OTNS-CLI. Per un elenco completo dei comandi, consulta la documentazione di riferimento della CLI OTNS. Non preoccuparti, in questo Codelab utilizzerai solo alcuni di questi comandi.

Digita il comando help per una panoramica dei comandi CLI. Questo elenco è identico al riferimento della CLI.

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

Per ricevere ulteriore assistenza su un comando specifico, utilizza il nome del comando, ad esempio:

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

OTNS-Web

OTNS-Web è lo strumento di visualizzazione e gestione della rete di OTNS. Fornisce una rappresentazione visiva dei nodi, dei messaggi e dei link della rete Thread simulata. Tieni presente i vari elementi di OTNS-Web:

Spiegazione degli elementi OTNS-Web

5. Aggiungi nodi

Aggiungere nodi tramite OTNS-CLI

Aggiungi un router Thread alla simulazione:

> add router
1
Done

Dovresti vedere un nodo creato in OTNS-Web. Il nodo inizia come router e diventa leader in pochi secondi:

Un nodo con il ruolo di leader

Per semplificare l'avvio interattivo delle simulazioni, ogni nuovo nodo OpenThread viene commissionato per impostazione predefinita con un insieme standard di parametri di rete.

Aggiungere altri nodi tramite OTNS-CLI

Ora aggiungiamo alcuni nodi di tipi diversi.

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

Attendi qualche secondo affinché i nodi vengano uniti in una partizione. Dovresti vedere i nodi in OTNS-Web:

Rete Thread con 4 nodi

Sempre in OTNS-Web, è possibile selezionare uno qualsiasi dei nodi per visualizzare un riquadro con maggiori informazioni sul nodo. Ad esempio, nella figura seguente è selezionato il nodo 1. La voce "Ruolo" nel riquadro conferma che si tratta di una variante leader.

Rete Thread con 4 nodi, il nodo 1 è selezionato

Aggiungere nodi per OTNS-Web

Puoi anche aggiungere nodi tramite OTNS-Web. Fai clic sul pulsante New Router di Action Bar. Dovresti vedere un nodo creato a destra del nodo selezionato. Il nuovo router deve unirsi alla partizione Thread esistente:

Viene aggiunto un router, per un totale di 5 nodi

Fai clic anche sui pulsanti FED, MED, SSED e BR sulla barra delle azioni per creare questi altri tipi di nodi. Ora dovrebbero esserci 9 nodi in totale. Se vuoi, trascina alcuni nodi in altre posizioni per creare una topologia di rete fisica diversa.

Sono stati aggiunti più nodi nuovi, per un totale di 9 nodi

Ora hai creato una rete Thread di una partizione che contiene molti nodi. Nella sezione successiva, regoleremo la velocità di simulazione per velocizzare l'esecuzione della simulazione.

6. Regola la velocità

Al momento, la simulazione dovrebbe essere in esecuzione alla velocità 1X, il che significa che il tempo di simulazione trascorso finora è uguale al tempo effettivo trascorso dalla creazione del primo nodo.

Regolare la velocità tramite OTNS-CLI

Puoi regolare la velocità di simulazione tramite OTNS-CLI.

Imposta la velocità di simulazione su 100X

> speed 100
Done

Dovresti notare che i nodi inviano messaggi molto più spesso di prima.

Imposta la velocità di simulazione su MAX

> speed max
Done

Ora OTNS sta cercando di simulare il più velocemente possibile, quindi dovresti vedere i nodi inviare un gran numero di messaggi.

Interrompi simulazione

> speed 0
Done

Se imposti la velocità di simulazione su 0, la simulazione viene sospesa.

Ripristina la simulazione a velocità normale

> speed 1
Done

Se imposti la velocità di simulazione su un valore maggiore di 0, la simulazione riprende.

Regolare la velocità tramite OTNS-Web

Pulsanti di controllo della velocità

Individua i pulsanti di controllo della velocità Pulsanti di controllo della velocità sul Action Bar. I pulsanti mostrano la velocità di simulazione attuale e possono essere utilizzati per regolare la velocità di simulazione e mettere in pausa/riprendere la simulazione.

Accelerare la simulazione

Puoi accelerare la simulazione facendo clic sul pulsante Pulsante Aumenta velocità finché la velocità non raggiunge MAX: Indicatore della velocità di simulazione MAX.

Rallentare la simulazione

Puoi rallentare la simulazione facendo clic sul pulsante Pulsante per diminuire la velocità.

Interrompi simulazione

Fai clic sul pulsante Pulsante Metti in pausa per mettere in pausa la simulazione durante l'esecuzione. Il pulsante verrà modificato in Pulsante di riproduzione.

Riprendere la simulazione

Fai clic sul pulsante Pulsante di riproduzione per riprendere la simulazione quando è in pausa. Il pulsante verrà ripristinato su Pulsante Metti in pausa.

Imposta la velocità di simulazione su 10X

Per risparmiare tempo, utilizza

OTNS-CLI per regolare la velocità di simulazione su

10X in modo da poter osservare molto più rapidamente le modifiche alla topologia della rete.

> speed 10
Done

7. Attivare/disattivare la radio

Ora la simulazione dovrebbe contenere almeno due router (forma esagonale), possibilmente un router di confine (forma quadrata) e molti nodi secondari e viene eseguita a una velocità 10 volte superiore.

Trova il leader attuale (bordo rosso) dei due router, fai clic una volta per selezionarlo:

Rete Thread con nodo leader 1 selezionato

Disattiva segnale cellulare

Fai clic sul pulsante Pulsante Radio Off nella barra delle azioni per disattivare il pulsante di opzione del nodo leader. Il Leader non potrà inviare o ricevere messaggi con la radio spenta.

Attendi circa 12 secondi (120 secondi in tempo di simulazione) affinché l'altro router o router di confine diventi il nuovo leader:

Viene formata una nuova partizione con il nodo 9 come nuovo leader

La rete Thread si ripristina automaticamente in caso di errore del leader formando una nuova partizione con un nuovo leader. La nuova partizione ha anche un nuovo colore.

Attiva segnale cellulare

Seleziona il leader la cui radio è stata disattivata. Fai clic sul pulsante Pulsante di opzione Radio attivata su Action Bar per ripristinare la connettività radio:

Il nodo 1 si unisce alla partizione dopo che la radio è di nuovo attiva

Il leader deve riconnettersi alla rete dopo il ripristino della connettività radio.

8. Sposta nodi

OTNS consente agli utenti di spostare facilmente i nodi tramite OTNS-CLI o OTNS-Web.

Sposta il nodo in OTNS-CLI

Sposta il nodo Border Router 9 in una nuova posizione:

> move 9 50 50
Done

Spostare il nodo tramite OTNS-Web

Sposta il nodo 5 completamente in basso a destra trascinandolo. Poiché il nodo 5 non è più coperto dalla radio degli altri router, forma una propria partizione con un nuovo ID partizione. Gli ID partizione possono essere controllati nel riquadro delle informazioni sul nodo facendo clic sui nodi.

Il nodo 5 viene spostato lontano dagli altri nodi e forma una nuova partizione

Tieni presente che tra il nodo 5 e il nodo 9 viene comunque tracciata una singola linea verde. Ciò è spesso dovuto a informazioni obsolete su un bambino, che vengono ancora conservate nella tabella dei bambini di un ex genitore. Oppure, potrebbero essere informazioni obsolete sul precedente collegamento router-router tra il nodo 9 e il nodo 5. (O forse, in questo caso, anche un bug di rendering.) Alla fine, le informazioni obsolete vengono ripulite dai nodi dopo il timeout appropriato.

9. Elimina nodi

Eliminare i nodi tramite OTNS-CLI

Elimina nodo 5:

> del 5
Done

Il nodo 5 dovrebbe scomparire dalla simulazione:

Il nodo 5 viene eliminato dalla simulazione

Eliminare i nodi tramite OTNS-Web

Seleziona il nodo Border Router 9 e fai clic sul pulsante Pulsante Elimina in Action Bar per eliminare il nodo 9:

Il nodo Border Router 9 viene eliminato

Node 1 deve diventare il leader di una nuova partizione e tutti i nodi rimanenti verranno collegati come secondari al nodo 1.

10. Contesto del nodo OTNS-CLI

OTNS-CLI fornisce la modalità di contesto del nodo per una facile interazione con i nodi per aiutare gli sviluppatori a diagnosticare lo stato di un nodo. In questa modalità è possibile avviare anche le azioni dei nodi.

Attiva la modalità di contesto del nodo

Inserisci il contesto del nodo 1:

> node 1
Done
node 1>

Il prompt della CLI è cambiato in node 1> , a indicare il contesto del nodo corrente. Puoi digitare i comandi della CLI OpenThread da eseguire sul nodo come se interagissi direttamente con il nodo.

Esegui comandi nel contesto 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

Passare a un altro contesto del nodo

node 1> node 2
Done
node 2> 

Esci dal contesto del nodo

node 1> exit
Done
>

Un modo alternativo per uscire dal contesto del nodo è il comando node 0.

11. Visualizzazione dei log dei nodi e delle acquisizioni di pacchetti

Log dei nodi OpenThread

Per impostazione predefinita, OTNS genera file di log dettagliati per tutti i nodi OpenThread simulati. Questi possono essere visualizzati nella directory ./tmp. Il nome del file è 0_.log. Di seguito è riportato un esempio di estratto di un file di log:

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

Il tempo di simulazione assoluto in microsecondi viene mostrato a sinistra. Il timestamp hh:mm:ss mostra il timestamp del log del nodo OpenThread, che potrebbe differire dal tempo di simulazione assoluto.

Acquisizioni di pacchetti Wireshark

Per impostazione predefinita, tutti i frame IEEE 802.15.4 trasmessi vengono acquisiti nel file PCAP current.pcap. Questo file può essere letto da Wireshark durante o dopo la simulazione. A causa della crittografia a livello di collegamento di Thread, è necessaria un'azione di configurazione una tantum in Wireshark per impostare correttamente la chiave di decrittografia per OTNS. Per impostazione predefinita, viene utilizzata una chiave di rete nota per semplificare la decrittografia dei frame da parte di Wireshark.

Vedi lo screenshot riportato di seguito per un esempio di ispezione dei pacchetti OpenThread in Wireshark.

Screenshot dell'analisi dei pacchetti OpenThread in Wireshark

Per configurare la chiave di decrittografia, seleziona Modifica -> Preferenze nel menu. Nella finestra delle preferenze, seleziona Protocolli -> IEEE 802.15.4. Fai clic sul pulsante Modifica… accanto a "Chiavi di decrittografia". Fai clic su + per creare una nuova voce e inserisci la chiave 00112233445566778899aabbccddeeff (32 caratteri) e seleziona "Hash thread" nel campo "Hash chiave". L'opzione "Indice chiave di decrittografia" può essere impostata su 0. Quindi, fai clic su Ok e di nuovo su Ok. Ora il file PCAP OTNS dovrebbe essere decriptato correttamente al caricamento.

I timestamp visualizzati nella colonna "Ora" (in secondi) corrispondono ai valori assoluti del tempo di simulazione visualizzati nei log dei nodi OpenThread. In questo modo è più facile correlare i messaggi di log con i frame radio trasmessi o ricevuti. Tuttavia, i valori in genere non sono identici con una precisione di un microsecondo: l'hardware radio IEEE 802.15.4 simulato potrebbe aggiungere un ritardo aggiuntivo dopo che lo stack OpenThread ha richiesto l'invio di un frame radio.

12. Complimenti

Congratulazioni, hai eseguito correttamente la tua prima simulazione OTNS.

Hai imparato a installare OTNS e le relative dipendenze. Hai avviato una simulazione OTNS con nodi simulati OpenThread. Hai imparato a manipolare la simulazione in vari modi tramite OTNS-CLI e OTNS-Web.

Ora sai cos'è OTNS e come puoi utilizzarlo per simulare reti OpenThread.

Passaggi successivi

Dai un'occhiata ad alcuni di questi codelab…

Documenti di riferimento