1. Einführung
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:
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
:
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:
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:
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.
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:
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.
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 . 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 klicken, bis die Geschwindigkeit
MAX
: erreicht.
Simulation verlangsamen
Sie können die Simulation verlangsamen, indem Sie auf die Schaltfläche klicken.
Simulation anhalten
Klicken Sie auf die Schaltfläche , um die Simulation anzuhalten. Die Schaltfläche wird in
geändert.
Simulation fortsetzen
Klicken Sie auf die Schaltfläche , um die Simulation fortzusetzen, wenn sie pausiert ist. Die Schaltfläche wird wieder zu
.
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:
Mobilfunkverbindung deaktivieren
Klicken Sie in der Aktionsleiste auf die Schaltfläche , 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:
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 auf
Action Bar
, um die Funkverbindung wiederherzustellen:
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.
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 über OTNS-Web
löschen
Wählen Sie den Border-Router-Knoten 9 aus und klicken Sie auf die Schaltfläche auf der Schaltfläche
Action Bar
, um Knoten 9 zu löschen:
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_
. 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.
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:
- Thread-Netzwerk mit OpenThread simulieren
- Ein Thread-Netzwerk mit OpenThread in Docker simulieren
- Thread-Netzwerk mit nRF52840-Boards und OpenThread erstellen