Simulare reti Thread utilizzando OTNS

Informazioni su questo codelab
schedule30 minuti
subjectUltimo aggiornamento: 15 maggio 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 singolo punto di guasto.

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

OpenThread Network Simulator (OTNS) può essere utilizzato per simulare reti Thread eseguendo nodi OpenThread simulati su piattaforme POSIX. OTNS fornisce un'interfaccia web facile da usare (OTNS-Web) per visualizzare e gestire 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 i nodi OpenThread in OTNS-Web
  • Utilizza le altre funzionalità utili di OTNS-Web per controllare la simulazione di rete
  • Verificare l'assenza di un punto di errore singolo di OpenThread
  • Visualizzare il traffico di dati tra i nodi OpenThread in Wireshark

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

Che cosa ti serve

  • Preferibilmente Linux x86_64 o Mac OS con Homebrew. Anche Ubuntu 22/24 in WSL2 di Windows dovrebbe funzionare, ma potrebbe richiedere alcune modifiche manuali delle impostazioni.
  • Git.
  • Browser web. OTNS-Web utilizza un browser web per la visualizzazione delle simulazioni.
  • Primer per strumentazione. Per comprendere ciò che viene insegnato in questo Codelab, devi conoscere i concetti di base di Thread.

Terminologia

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

2. Installazione

Ricevi 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 Python3 e Go/Golang, se necessario) e OTNS. Inoltre, crea i vari tipi di nodi OT che possono essere utilizzati direttamente in una simulazione ed esegue alcuni test di base. A causa delle build dei nodi, l'operazione può richiedere diversi minuti.

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

È possibile che ti venga 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 a $PATH.

In caso di altri errori, puoi creare una segnalazione su GitHub.

3. Eseguire OTNS per la prima volta

Esegui otns:

$ otns
>_ ← OTNS-CLI prompt

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

Finestra OTNS-Web all'avvio

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

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

4. Informazioni su 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 dell'interfaccia a riga di comando 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 a quello di 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 gestione e visualizzazione 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:

Elementi OTNS-Web spiegati

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 un leader in pochi secondi:

Un nodo nel ruolo Leader

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

Aggiungere altri nodi tramite OTNS-CLI

Ora aggiungeremo alcuni nodi di tipi diversi.

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

Attendi qualche secondo per l'unione dei nodi in una partizione. Dovresti vedere i nodi in OTNS-Web:

Rete Thread con 4 nodi

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

Rete Thread con 4 nodi, il nodo 1 è selezionato

Aggiungere nodi tramite 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 nella barra delle azioni per creare questi altri tipi di nodi. Ora dovrebbero essere presenti 9 nodi in totale. Se vuoi, trascina alcuni nodi in altre posizioni per creare una topologia di rete fisica diversa.

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

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

6. Regola velocità

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

Regola 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 vedere i nodi inviare messaggi molto più spesso di prima.

Imposta la velocità di simulazione su MAX

> speed max
Done

Ora OTNS sta facendo del suo meglio per eseguire la simulazione il più rapidamente possibile, quindi dovresti vedere i nodi inviare un numero elevato di messaggi.

Interrompi simulazione

> speed 0
Done

Se imposti la velocità di simulazione su 0, la simulazione viene messa in pausa.

Ripristinare la simulazione alla velocità normale

> speed 1
Done

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

Regola 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 corrente e possono essere utilizzati per regolare la velocità di simulazione e mettere in pausa/riprendere la simulazione.

Velocizzare la simulazione

Puoi velocizzare la simulazione facendo clic sul pulsante Pulsante per aumentare la velocità finché la velocità non raggiunge MAX: Indicatore della velocità di simulazione massima.

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 quando è in esecuzione. Il pulsante diventerà Pulsante di riproduzione.

Riprendi simulazione

Fai clic sul pulsante Pulsante di riproduzione per riprendere la simulazione quando è in pausa. Il pulsante tornerà a 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 le modifiche alla topologia della rete molto più rapidamente.

> speed 10
Done

7. Attivare/disattivare la radio

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

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

Rete Thread con il nodo Leader 1 selezionato

Disattiva segnale cellulare

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

Attendi circa 12 secondi (120 secondi nel 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 riprende automaticamente dal guasto del leader formando una nuova partizione con un nuovo leader. La nuova partizione ha anche un nuovo colore.

Attiva segnale cellulare

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

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

Il leader deve ricollegarsi 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 del router di confine 9 in una nuova posizione:

> move 9 50 50
Done

Spostare il nodo tramite OTNS-Web

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

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

Tieni presente che tra il nodo 5 e il nodo 9 viene ancora tracciata una singola linea verde. Ciò è spesso dovuto a informazioni obsolete su un account secondario, che vengono ancora conservate nella tabella secondaria di un account principale precedente. In alternativa, potrebbero essere informazioni obsolete sull'ex link router-to-router tra il nodo 9 e il nodo 5. O, in questo caso, anche un bug di rendering. Alla fine, le informazioni obsolete vengono eliminate sui nodi dopo il timeout appropriato.

9. Elimina nodi

Elimina i nodi tramite OTNS-CLI

Elimina il nodo 5:

> del 5
Done

Il nodo 5 dovrebbe scomparire dalla simulazione:

Il nodo 5 viene eliminato dalla simulazione

Elimina i nodi tramite OTNS-Web

Seleziona il nodo Router di confine 9 e fai clic sul pulsante Pulsante Elimina su Action Bar per eliminare il nodo 9:

Il nodo del router di confine 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 interagire facilmente con i nodi e aiutare gli sviluppatori a diagnosticare lo stato di un nodo. Anche le azioni dei nodi possono essere avviate da questa modalità.

Attiva la modalità di contesto del nodo

Inserisci il contesto del nodo 1:

> node 1
Done
node 1>

Il prompt della CLI è diventato node 1> , a indicare il contesto del nodo corrente. Puoi digitare i comandi della CLI OpenThread da eseguire sul nodo come se stessi interagendo 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 del nodo OpenThread

Per impostazione predefinita, OTNS genera file di log dettagliati per tutti i nodi OpenThread simulati. Questi dati possono essere visualizzati nella directory ./tmp. Il nome del file è 0_.log. Ad esempio, di seguito è riportato un 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

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

Acquisizioni di pacchetti di 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 link 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.

Guarda lo screenshot 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, inserisci la chiave 00112233445566778899aabbccddeeff (32 caratteri) e seleziona "Hash thread" nel campo "Hash chiave". L'indice "Indirizzo chiave di decrittografia" può essere lasciato su 0. Quindi, fai clic su OK e di nuovo su OK. Ora il file PCAP OTNS dovrebbe decriptarsi correttamente quando viene caricato.

I timestamp mostrati nella colonna "Ora" (in secondi) corrispondono ai valori di tempo di simulazione assoluti mostrati nei log del nodo OpenThread. In questo modo è più facile correlare i messaggi di log con i frame radio trasmessi o ricevuti. Tuttavia, in genere i valori non sono identici con una precisione fino a un microsecondo: l'hardware radio IEEE 802.15.4 simulato potrebbe aggiungere un ulteriore ritardo 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 OpenThread simulati. Hai imparato a manipolare la simulazione in vari modi sia tramite OTNS-CLI che OTNS-Web.

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

Passaggi successivi

Dai un'occhiata ad alcuni di questi codelab…

Documenti di riferimento