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 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
):
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
:
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:
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
:
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.
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:
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.
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à 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 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 quando è in esecuzione. Il pulsante diventerà
.
Riprendi simulazione
Fai clic sul pulsante per riprendere la simulazione quando è in pausa. Il pulsante tornerà a
.
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:
Disattiva segnale cellulare
Fai clic sul pulsante 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:
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 su
Action Bar
per ripristinare la connettività radio:
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.
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:
Elimina i nodi tramite OTNS-Web
Seleziona il nodo Router di confine 9 e fai clic sul pulsante su
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 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_
. 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.
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…
- Simulazione di una rete Thread con OpenThread
- Simulazione di una rete Thread utilizzando OpenThread in Docker
- Creare una rete Thread con schede nRF52840 e OpenThread