1. Introduzione
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
):
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
:
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:
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
:
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.
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:
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.
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à 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 finché la velocità non raggiunge
MAX
: .
Rallentare la simulazione
Puoi rallentare la simulazione facendo clic sul pulsante .
Interrompi simulazione
Fai clic sul pulsante per mettere in pausa la simulazione durante l'esecuzione. Il pulsante verrà modificato in
.
Riprendere la simulazione
Fai clic sul pulsante per riprendere la simulazione quando è in pausa. Il pulsante verrà ripristinato su
.
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:
Disattiva segnale cellulare
Fai clic sul pulsante 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:
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 su
Action Bar
per ripristinare la connettività radio:
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.
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:
Eliminare i nodi tramite OTNS-Web
Seleziona il nodo Border Router 9 e fai clic sul pulsante in
Action Bar
per eliminare il nodo 9:
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_
. 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.
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…
- Simulare una rete Thread con OpenThread
- Simulare una rete Thread utilizzando OpenThread in Docker
- Creare una rete Thread con schede nRF52840 e OpenThread