Thread-Netzwerke mit OTNS simulieren

Informationen zu diesem Codelab
schedule30 Minuten
subjectZuletzt aktualisiert: 23. Mai 2025
account_circleVerfasst von Simon Lin, Colin Tan, Esko Dijk

1. Einführung

Darstellung einer Thread-Mesh-Netzwerktopologie

Was sind Thread und OTNS?

Thread ist ein IP-basiertes, energieeffizientes drahtloses Mesh-Netzwerkprotokoll, das eine sichere Kommunikation zwischen Geräten und zwischen Geräten und der Cloud ermöglicht. Thread-Netzwerke können sich an Topologieänderungen anpassen, um einen Single Point of Failure zu vermeiden.

OpenThread von Google ist eine Open-Source-Implementierung von Thread. Trotz der geringen Codegröße und des geringen Arbeitsspeicherbedarfs unterstützt OpenThread alle in der Thread-Spezifikation definierten Funktionen.

Mit dem OpenThread Network Simulator (OTNS) können Sie Thread-Netzwerke simulieren, indem Sie simulierte OpenThread-Knoten auf POSIX-Plattformen ausführen. OTNS bietet eine nutzerfreundliche Weboberfläche (OTNS-Web), mit der simulierte Thread-Netzwerke visualisiert und betrieben werden können. Geskriptete Simulationen (mit Python) sind ebenfalls möglich.

Lerninhalte

  • OTNS und die zugehörigen Abhängigkeiten installieren
  • Grundlagen der OTNS-Befehlszeile
  • OpenThread-Knoten in OTNS-Web hinzufügen, verschieben oder löschen
  • Andere nützliche Funktionen von OTNS-Web zur Steuerung der Netzwerksimulation verwenden
  • Ausfallsicherheit von OpenThread prüfen
  • Datenverkehr zwischen OpenThread-Knoten in Wireshark ansehen

In diesem Codelab liegt der Schwerpunkt auf der interaktiven Verwendung von OTNS-CLI und OTNS-Web. Andere Funktionen von OTNS, z. B. Python-Scripting, sind nicht abgedeckt.

Voraussetzungen

  • Vorzugsweise Linux x86_64 oder macOS mit Homebrew. Ubuntu 22/24 in Windows WSL2 sollte auch funktionieren, erfordert aber möglicherweise einige manuelle Anpassungen der Einstellungen.
  • Git.
  • Webbrowser OTNS-Web verwendet einen Webbrowser für die Anzeige von Simulationen.
  • Thread Primer. Sie müssen die grundlegenden Konzepte von Threads kennen, um das in diesem Codelab vermittelte Wissen zu verstehen.

Terminologie

Der Begriff „Router“ wird als technischer Begriff für den Thread-Mesh-Repeater verwendet, der ursprünglich als Thread-Router bezeichnet wurde. „Knoten“ bezieht sich auf jedes simulierte OpenThread-Gerät in einer OTNS-Simulation.

2. Installation

OTNS-Code abrufen

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

Alle nachfolgenden Konsolenbefehle in diesem Codelab werden aus dem Verzeichnis otns ausgeführt.

Bootstrapping und Installation

Das bootstrap-Script installiert Abhängigkeiten (einschließlich Python 3 und Go/Golang, falls erforderlich) und OTNS. Außerdem werden die verschiedenen OT-Knotentypen erstellt, die direkt in einer Simulation verwendet werden können, und einige grundlegende Tests werden durchgeführt. Aufgrund der Knotenbuilds kann es einige Minuten dauern.

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

Möglicherweise werden Sie aufgefordert, ein Passwort für sudo einzugeben.

Wenn otns nicht richtig installiert ist

Das Script meldet möglicherweise einen Fehler wie diesen:

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

In diesem Fall müssen Sie $(go env GOPATH)/bin zu $PATH. hinzufügen.

Bei anderen Fehlern kann ein GitHub-Problem erstellt werden.

3. OTNS zum ersten Mal ausführen

Führen Sie otns aus.

$ otns
>_ ← OTNS-CLI prompt

Nach dem Start wird eine Befehlszeilenkonsole (OTNS-CLI) und ein Webbrowser für die Netzwerkvisualisierung und -verwaltung (OTNS-Web) geöffnet:

OTNS-Webfenster beim Start

Wenn Sie für OTNS-Web nur eine leere Seite sehen, ist WebGL in Ihrem Browser wahrscheinlich nicht aktiviert. Informationen zum Aktivieren von WebGL finden Sie unter https://superuser.com/a/836833.

In den folgenden Abschnitten erfahren Sie, wie Sie OTNS-Simulationen über OTNS-CLI und OTNS-Web verwalten.

4. OTNS-CLI und OTNS-Web kennenlernen

OTNS-CLI

OTNS-CLI ist die Befehlszeile zum Verwalten von OTNS-Simulationen.

$ otns
>_ ← OTNS-CLI prompt

Sie können Befehle über OTNS-CLI eingeben. Eine vollständige Liste der Befehle finden Sie in der OTNS-Befehlszeilenreferenz. Keine Sorge, in diesem Codelab verwenden Sie nur einige dieser Befehle.

Geben Sie den Befehl help ein, um eine Übersicht der Befehlszeilenbefehle aufzurufen. Diese Liste entspricht der Befehlszeilenreferenz.

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

Wenn Sie weitere Informationen zu einem bestimmten Befehl benötigen, verwenden Sie den Namen des Befehls, z. B.:

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

OTNS-Web

OTNS-Web ist das Netzwerkvisualisierungs- und ‑verwaltungstool von OTNS. Es bietet eine visuelle Darstellung der Knoten, Nachrichten und Verbindungen des simulierten Thread-Netzwerks. Beachten Sie die verschiedenen Elemente von OTNS-Web:

OTNS-Webelemente

5. Knoten hinzufügen

Knoten über die OTNS-Befehlszeile hinzufügen

Fügen Sie der Simulation einen Thread-Router hinzu:

> add router
1
Done

In OTNS-Web sollte ein Knoten erstellt worden sein. Der Knoten beginnt als Router und wird innerhalb weniger Sekunden zum Leader:

Ein Knoten mit der Rolle „Leiter“

Damit Simulationen interaktiv gestartet werden können, wird jeder neue OpenThread-Knoten standardmäßig mit einer Reihe von Standardnetzwerkparametern in Betrieb genommen.

Weitere Knoten über OTNS-CLI hinzufügen

Jetzt fügen wir einige Knoten verschiedener Typen hinzu.

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

Warten Sie einige Sekunden, bis die Knoten zu einer Partition zusammengeführt wurden. Die Knoten sollten in OTNS-Web angezeigt werden:

Thread-Netzwerk mit 4 Knoten

Außerdem können Sie in OTNS-Web einen beliebigen Knoten auswählen, um einen Bereich mit weiteren Informationen zu diesem Knoten aufzurufen. In der Abbildung unten ist beispielsweise Knoten 1 ausgewählt. Der Eintrag „Role“ (Rolle) im Steuerfeld bestätigt, dass es sich um eine Führungskraft handelt.

Thread-Netzwerk mit 4 Knoten, Knoten 1 ist ausgewählt

Knoten nach OTNS-Web hinzufügen

Sie können Knoten auch über OTNS-Web hinzufügen. Klicken Sie auf die Schaltfläche New Router des Action Bar. Rechts vom ausgewählten Knoten sollte ein Knoten erstellt werden. Der neue Router sollte der vorhandenen Thread-Partition beitreten:

Ein Router wird hinzugefügt, insgesamt 5 Knoten

Klicken Sie außerdem in der Aktionsleiste auf die Schaltflächen „FED“, „MED“, „SSED“ und „BR“, um diese anderen Knotentypen zu erstellen. Es sollten jetzt insgesamt 9 Knoten vorhanden sein. Sie können einige Knoten an andere Positionen ziehen, um eine andere physische Netzwerktopologie zu erstellen.

Mehrere neue Knoten hinzugefügt, insgesamt 9 Knoten

Sie haben jetzt ein Thread-Netzwerk mit einer Partition erstellt, die viele Knoten enthält. Im nächsten Abschnitt passen wir die Simulationsgeschwindigkeit an, damit die Simulation schneller abläuft.

6. Geschwindigkeit anpassen

Derzeit sollte die Simulation mit einer Geschwindigkeit von 1X laufen. Das bedeutet, dass die bisher verstrichene Simulationszeit der tatsächlichen Zeit entspricht, die seit dem Erstellen des ersten Knotens vergangen ist.

Geschwindigkeit über OTNS-CLI anpassen

Sie können die Simulationsgeschwindigkeit über OTNS-CLI anpassen.

Simulationsgeschwindigkeit auf 100X festlegen

> speed 100
Done

Die Knoten sollten jetzt viel häufiger Nachrichten senden als zuvor.

Simulationsgeschwindigkeit auf MAX festlegen

> speed max
Done

OTNS versucht, die Simulation so schnell wie möglich durchzuführen. Sie sollten also sehen, dass Knoten eine große Anzahl von Nachrichten senden.

Simulation anhalten

> speed 0
Done

Wenn Sie die Simulationsgeschwindigkeit auf 0 einstellen, wird die Simulation pausiert.

Simulation mit normaler Geschwindigkeit wiederherstellen

> speed 1
Done

Wenn Sie die Simulationsgeschwindigkeit auf einen Wert größer als 0 festlegen, wird die Simulation fortgesetzt.

Geschwindigkeit über OTNS-Web anpassen

Geschwindigkeitssteuerungstasten

Suchen Sie auf dem Action Bar die Geschwindigkeitsregler Geschwindigkeitssteuerungstasten. Auf den Schaltflächen wird die aktuelle Simulationsgeschwindigkeit angezeigt. Mit ihnen können Sie die Simulationsgeschwindigkeit anpassen und die Simulation pausieren oder fortsetzen.

Simulation beschleunigen

Sie können die Simulation beschleunigen, indem Sie auf die Schaltfläche Schaltfläche zum Erhöhen der Geschwindigkeit klicken, bis die Geschwindigkeit MAX: MAX-Anzeige für die Simulationsgeschwindigkeit erreicht.

Simulation verlangsamen

Sie können die Simulation verlangsamen, indem Sie auf die Schaltfläche Schaltfläche zum Verringern der Geschwindigkeit klicken.

Simulation anhalten

Klicken Sie auf die Schaltfläche Schaltfläche "Pause", um die Simulation anzuhalten. Die Schaltfläche wird in Wiedergabeschaltfläche geändert.

Simulation fortsetzen

Klicken Sie auf die Schaltfläche Wiedergabeschaltfläche, um die Simulation fortzusetzen, wenn sie pausiert ist. Die Schaltfläche wird wieder zu Schaltfläche "Pause".

Simulationsgeschwindigkeit auf 10X festlegen

Um Zeit zu sparen, verwenden Sie

OTNS-CLI , um die Simulationsgeschwindigkeit auf

10X , damit wir Topologieänderungen im Netzwerk viel schneller beobachten können.

> speed 10
Done

7. Radio ein-/ausschalten

Die Simulation sollte jetzt mindestens zwei Router (sechseckige Form), möglicherweise einen Border-Router (quadratische Form) und viele untergeordnete Elemente enthalten und mit zehnfacher Geschwindigkeit ausgeführt werden.

Suchen Sie den aktuellen Leitknoten (roter Rahmen) der beiden Router und klicken Sie einmal darauf, um ihn auszuwählen:

Thread-Netzwerk mit ausgewähltem Führungsknoten 1

Mobilfunkverbindung deaktivieren

Klicken Sie in der Aktionsleiste auf die Schaltfläche Schaltfläche „Radio aus“, um die Funkschnittstelle des Leitknotens auszuschalten. Wenn das Funkgerät ausgeschaltet ist, kann der Leiter keine Nachrichten senden oder empfangen.

Warten Sie etwa 12 Sekunden (120 Sekunden in der Simulationszeit), bis der andere Router oder Border-Router zum neuen Leader wird:

Es wird eine neue Partition mit Knoten 9 als neuem Leader gebildet.

Das Thread-Netzwerk stellt sich nach einem Leader-Ausfall automatisch wieder her, indem eine neue Partition mit einem neuen Leader gebildet wird. Die neue Partition hat auch eine neue Partitionsfarbe.

Mobilfunkverbindung aktivieren

Wählen Sie den Leiter aus, dessen Funkgerät deaktiviert wurde. Klicken Sie auf die Schaltfläche Ein-/Aus-Taste für das Radio auf Action Bar, um die Funkverbindung wiederherzustellen:

Knoten 1 tritt der Partition bei, nachdem sein Funk wieder eingeschaltet ist

Der Leader sollte sich nach der Wiederherstellung der Funkverbindung wieder mit dem Netzwerk verbinden.

8. Knoten verschieben

Mit OTNS können Nutzer Knoten ganz einfach über OTNS-CLI oder OTNS-Web verschieben.

Knoten über OTNS-CLI verschieben

Verschieben Sie den Border-Router-Knoten 9 an eine neue Position:

> move 9 50 50
Done

Knoten über OTNS-Web verschieben

Ziehen Sie Knoten 5 ganz nach rechts unten. Da sich Knoten 5 jetzt außerhalb der Funkabdeckung der anderen Router befindet, bildet er eine eigene Partition mit einer neuen Partitions-ID. Die Partitions-IDs können im Bereich mit den Knoteninformationen geprüft werden. Klicken Sie dazu auf die Knoten.

Knoten 5 wird von den anderen Knoten weg verschoben und bildet eine neue Partition.

Beachten Sie, dass zwischen Knoten 5 und Knoten 9 weiterhin eine einzelne grüne Linie gezogen wird. Das liegt häufig an veralteten Informationen zu einem untergeordneten Element, die noch in der untergeordneten Tabelle eines früheren übergeordneten Elements gespeichert sind. Es kann sich auch um veraltete Informationen zur früheren Router-zu-Router-Verbindung zwischen Knoten 9 und Knoten 5 handeln. (Oder in diesem Fall möglicherweise sogar ein Renderingfehler.) Nach Ablauf der entsprechenden Zeitüberschreitung werden veraltete Informationen auf den Knoten bereinigt.

9. Knoten löschen

Knoten über OTNS-CLI löschen

Knoten 5 löschen:

> del 5
Done

Knoten 5 sollte aus der Simulation verschwinden:

Knoten 5 wird aus der Simulation gelöscht

Knoten über OTNS-Web löschen

Wählen Sie den Border-Router-Knoten 9 aus und klicken Sie auf die Schaltfläche Schaltfläche löschen auf der Schaltfläche Action Bar, um Knoten 9 zu löschen:

Border Router-Knoten 9 wird gelöscht

Node 1 sollte der Leader einer neuen Partition werden und alle verbleibenden Knoten werden als untergeordnete Knoten an Knoten 1 angehängt.

10. OTNS-CLI-Knotenkontext

OTNS-CLI bietet einen Knotenkontextmodus für die einfache Interaktion mit Knoten, um Entwicklern bei der Diagnose des Knotenstatus zu helfen. Außerdem können in diesem Modus Knotenaktionen gestartet werden.

Knotenkontextmodus aktivieren

Geben Sie den Knotenkontext von Knoten 1 ein:

> node 1
Done
node 1>

Die Befehlszeilen-Eingabeaufforderung hat sich in node 1> geändert , was den aktuellen Knotenkontext angibt. Sie können OpenThread-Befehlszeilenbefehle eingeben, die auf dem Knoten ausgeführt werden, als würden Sie direkt mit dem Knoten interagieren.

Befehle im Knotenkontext ausführen

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

Zu einem anderen Knotenkontext wechseln

node 1> node 2
Done
node 2> 

Knotenkontext beenden

node 1> exit
Done
>

Alternativ können Sie auch den Befehl node 0 verwenden, um den Knotenkontext zu verlassen.

11. Knotenprotokolle und Paketerfassungen ansehen

OpenThread-Knotenprotokolle

Standardmäßig generiert OTNS detaillierte Protokolldateien für alle simulierten OpenThread-Knoten. Sie finden sie im Verzeichnis ./tmp. Der Dateiname lautet 0_.log. Unten sehen Sie beispielsweise einen Auszug aus einer Protokolldatei:

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

Die absolute Simulationszeit in Mikrosekunden wird links angezeigt. Der Zeitstempel hh:mm:ss ist der Protokollzeitstempel des OpenThread-Knotens. Er kann von der absoluten Simulationszeit abweichen.

Wireshark-Paketerfassungen

Standardmäßig werden alle übertragenen IEEE 802.15.4-Frames in der PCAP-Datei current.pcap erfasst. Diese Datei kann während oder nach der Simulation mit Wireshark gelesen werden. Aufgrund der Verschlüsselung der Sicherungsschicht von Thread ist eine einmalige Konfigurationsaktion in Wireshark erforderlich, um den Entschlüsselungsschlüssel für OTNS richtig festzulegen. Standardmäßig wird ein bekannter Netzwerkschlüssel verwendet, damit die Frame-Entschlüsselung durch Wireshark vereinfacht wird.

Im Screenshot unten sehen Sie ein Beispiel für die OpenThread-Paketprüfung in Wireshark.

Screenshot der OpenThread-Paketanalyse in Wireshark

Wählen Sie im Menü Bearbeiten -> Einstellungen aus, um den Entschlüsselungsschlüssel zu konfigurieren. Wählen Sie dann im Fenster „Einstellungen“ die Option Protokolle -> IEEE 802.15.4 aus. Klicken Sie neben „Entschlüsselungsschlüssel“ auf die Schaltfläche Bearbeiten. Klicken Sie auf +, um einen neuen Eintrag zu erstellen. Geben Sie den Schlüssel 00112233445566778899aabbccddeeff (32 Zeichen) ein und wählen Sie im Feld „Schlüssel-Hash“ die Option „Thread-Hash“ aus. Der Wert für „Index des Entschlüsselungsschlüssels“ kann bei 0 bleiben. Klicken Sie dann auf OK und noch einmal auf OK. Die OTNS-PCAP-Datei sollte jetzt beim Laden richtig entschlüsselt werden.

Die Zeitstempel in der Spalte „Zeit“ (in Sekunden) entsprechen den absoluten Simulationszeitwerten in den OpenThread-Knotenprotokollen. So lassen sich Protokollmeldungen leichter mit gesendeten oder empfangenen Funkframes in Beziehung setzen. Die Werte sind jedoch in der Regel nicht bis auf die Mikrosekunde genau identisch: Die simulierte IEEE 802.15.4-Funkhardware kann eine zusätzliche Verzögerung verursachen, nachdem ein Funkframe vom OpenThread-Stack zum Senden angefordert wurde.

12. Glückwunsch

Herzlichen Glückwunsch, Sie haben Ihre erste OTNS-Simulation erfolgreich ausgeführt.

Sie haben gelernt, wie Sie OTNS und die zugehörigen Abhängigkeiten installieren. Sie haben eine OTNS-Simulation mit simulierten OpenThread-Knoten gestartet. Sie haben gelernt, wie Sie die Simulation sowohl über OTNS-CLI als auch über OTNS-Web auf verschiedene Arten manipulieren können.

Sie wissen jetzt, was OTNS ist und wie Sie damit OpenThread-Netzwerke simulieren können.

Nächste Schritte

Sehen Sie sich einige dieser Codelabs an:

Referenzdokumente