Thread-Netzwerke mit OTNS simulieren

1. Einführung

5abd22afa2f2ee9a.png

Was ist Thread und OTNS

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

OpenThread, das von Google veröffentlicht wurde, 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 Thread-Netzwerke durch die Ausführung simulierter OpenThread-Knoten auf POSix-Plattformen simuliert werden. OTNS bietet eine nutzerfreundliche Weboberfläche (OTNS-Web) zum Visualisieren und Betreiben simulierter Thread-Netzwerke.

Lerninhalte

  • OTNS und zugehörige Abhängigkeiten installieren
  • OpenThread für OTNS erstellen
  • Knoten in OTNS-Web hinzufügen/verschieben/löschen
  • Weitere nützliche Funktionen von OTNS-Web für die Netzwerksimulation nutzen
  • No-Single-Point-of-Failureure von OpenThread prüfen

Dieses Codelab konzentriert sich auf OTNS-CLI und OTNS-Web. Andere OTNS-Funktionen, z. B. die Python-Skripterstellung, werden nicht behandelt.

Voraussetzungen

  • Linux x86_64 oder Mac OS
  • Git:
  • Go 1.13 oder höher
  • Web browser. OTNS-Web verwendet einen Webbrowser zum Anzeigen von Simulationen.
  • Thread-Primer Sie müssen die grundlegenden Konzepte von Thread kennen, um zu verstehen, was in diesem Codelab behandelt wird.

2. Installation

Go installieren

Zum Erstellen von OTNS ist Go 1.13+ erforderlich.

  1. Go von https://golang.org/dl/ installieren
  2. Fügen Sie $(go env GOPATH)/bin (normalerweise $HOME/go/bin) zu $PATH hinzu:
$ export PATH=$PATH:$(go env GOPATH)/bin

OTNS-Code abrufen

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

Abhängigkeiten installieren

$ ./script/install-deps
grpcwebproxy installed: /usr/local/google/home/simonlin/go/bin/grpcwebproxy

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

OTNs installieren

Installieren Sie otns in $GOPATH/bin:

$ ./script/install
otns installed: /usr/local/google/home/simonlin/go/bin/otns

Prüfen wir, ob otns richtig installiert ist

  1. Führen Sie which otns aus, um zu prüfen, ob die ausführbare Datei otns in $PATH. suchbar ist
  2. Wenn der Befehl otns nicht gefunden wird, prüfen Sie, ob Sie $(go env GOPATH)/bin zu $PATH. hinzugefügt haben

3. OpenThread für OTNS erstellen

OpenThread-Code von GitHub abrufen

$ mkdir -p ~/src
$ git clone https://github.com/openthread/openthread ~/src/openthread

OpenThread mit OTNS=1 erstellen

$ cd ~/src/openthread
$ ./script/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_SIMULATION_VIRTUAL_TIME_UART=ON -DOT_SIMULATION_MAX_NETWORK_SIZE=999

Sie finden die ausführbaren OpenThread-Dateien im Verzeichnis build:

$ ls ~/src/openthread/build/simulation/examples/apps/cli/
ot-cli-ftd        ot-cli-mtd        ot-cli-radio

Jetzt ist es Zeit, OTNS auszuführen...

4. OTNS ausführen

Führen Sie otns aus.

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

Nach dem erfolgreichen Start öffnet OTNS eine CLI-Konsole (OTNS-CLI) und startet einen Webbrowser für die Netzwerkvisualisierung und -verwaltung (OTNS-Web):

a0e05178d66929b1.png

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

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

5. OTNS-CLI kennenlernen und OTNS-Web

OTNS-CLI

OTNS-CLI bietet eine Befehlszeile zum Verwalten von OTNS-Simulationen.

$ cd ~/src/openthread/build/simulation/examples/apps/cli
$ otns
> ← OTNS-CLI prompt

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

OTNS-Web

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

4c5b43509a2ca0d0.png

6. Knoten hinzufügen

Knoten über OTNS-CLI hinzufügen

Fügen Sie einen Router an Position (300, 100) hinzu

> add router x 300 y 100
1
Done

Sie sollten einen Knoten sehen, der in OTNS-Web erstellt wurde. Der Knoten wird als Router gestartet und wird in wenigen Sekunden zu einem Leader:

6ca8c2e63ed9818d.png

Weitere Knoten über OTNS-CLI hinzufügen

> add fed x 200 y 100
2
Done
> add med x 400 y 100
3
Done
> add sed x 300 y 200
4
Done

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

76883c01aa612.png

Knoten bis zum OTNS-Web hinzufügen

Sie können Knoten auch über OTNS-Web hinzufügen. Klicken Sie auf die Schaltfläche New Router von Action Bar. Direkt über der Schaltfläche New Router sollte ein Knoten erstellt werden. Ziehen Sie den Knoten an die Führungslinie, die Sie über OTNS-CLI erstellt haben. Alle Knoten sollten schließlich zu einer Partition zusammengeführt werden:

420258bb92561146.png

Sie können auch auf die Schaltflächen FED, MED und SED in der Aktionsleiste klicken, um andere Knotentypen zu erstellen. Ziehen Sie sie an Positionen in der Nähe vorhandener Knoten, um sie mit dem Thread-Netzwerk zu verbinden:

fe15d6f9726a099e.png

Jetzt haben Sie ein Thread-Netzwerk aus einer Partition erstellt, die viele Knoten enthält. Im nächsten Abschnitt passen wir die Simulationsgeschwindigkeit an, um die Simulation zu beschleunigen.

7. Geschwindigkeit anpassen

Derzeit sollte die Simulation mit der Geschwindigkeit von 1X ausgeführt werden. Das bedeutet, dass die bisher verstrichene Zeit mit der tatsächlichen Zeit seit der Erstellung des ersten Knotens identisch ist.

Geschwindigkeit über OTNS-CLI anpassen

Über OTNS-CLI kannst du die Simulationsgeschwindigkeit anpassen.

Simulationsgeschwindigkeit auf 100X festlegen

> speed 100
Done

Sie sollten sehen, dass die Knoten viel häufiger als zuvor Nachrichten senden.

Simulationsgeschwindigkeit auf MAX festlegen

> speed max
Done

OTNS versucht jetzt, so schnell wie möglich zu simulieren. Daher sollten Knoten eine große Anzahl von Nachrichten senden.

Simulation anhalten

> speed 0
Done

Wird die Simulationsgeschwindigkeit auf 0 festgelegt, wird die Simulation pausiert.

Simulation mit normaler Geschwindigkeit wiederherstellen

> speed 1
Done

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

Geschwindigkeit über OTNS-Web anpassen

Tasten für die Geschwindigkeitssteuerung

Suche auf der Action Bar nach den Tasten zum Einstellen der Geschwindigkeit 9329157c1bd12672.png. Die Schaltflächen zeigen die aktuelle simulierte Geschwindigkeit an und können verwendet werden, um die simulierte Geschwindigkeit anzupassen und die Simulation anzuhalten oder fortzusetzen.

Simulation beschleunigen

Sie können die Simulation beschleunigen, indem Sie auf die Schaltfläche 39b88331779277ad.png klicken, bis die Geschwindigkeit MAX erreicht: f5f460b2586d299b.png.

Simulation verlangsamen

Sie können die Simulation verlangsamen, indem Sie auf die Schaltfläche 31cca8d5b52fa900.png klicken.

Simulation anhalten

Klicken Sie auf die Schaltfläche 46cc2088c9aa7ab6.png, um die Simulation während der Ausführung zu pausieren. Die Schaltfläche wird geändert in ce25eda3496ffcd4.png.

Simulation fortsetzen

Klicken Sie auf die Schaltfläche ce25eda3496ffcd4.png, um die Simulation fortzusetzen. Die Schaltfläche wird wieder zu 46cc2088c9aa7ab6.png geändert.

Simulationsgeschwindigkeit auf 10X festlegen

Mit

OTNS-CLI um die Simulationsgeschwindigkeit auf

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

> speed 10
Done

8. Radio ein-/ausschalten

Jetzt sollte die Simulation zwei Router (Sechseckform) und viele untergeordnete Router enthalten und mit zehnfacher Geschwindigkeit ausgeführt werden.

Suchen Sie den aktuellen Leader (rote Umrandung) der beiden Router. Klicken Sie darauf, um ihn auszuwählen:

8c6a2e191cdae0c7.png

Mobilfunkverbindung deaktivieren

Klicken Sie in der Aktionsleiste auf die Schaltfläche 7ca085f470491dd4.png, um das Optionsfeld des Leader-Knotens zu deaktivieren:

a3bf58d9d125f95f.png

Der Leader kann keine Nachrichten senden oder empfangen, wenn das Radio ausgeschaltet ist.

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

e3d32f85c4a1b990.png

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

Mobilfunkverbindung aktivieren

Wählen Sie den Leader aus, dessen Radio ausgeschaltet war. Klicken Sie auf die Schaltfläche 2d9cecb8612b42aa.png auf Action Bar, um die Funkverbindung wiederherzustellen:

7370a7841861aa3a.png

Der Leader sollte sich wieder mit dem Netzwerk verbinden, sobald die Funkverbindung wiederhergestellt wurde.

9. Knoten verschieben

OTNS ermöglicht Nutzern, Knoten einfach über OTNS-CLI oder OTNS-Web zu verschieben.

Knoten durch OTNS-CLI verschieben

Verschieben Sie Knoten 5 an einen neuen Ort:

> move 5 600 300
Done

Da nun Knoten 5 weit vom anderen Router entfernt ist, sollte die Verbindung zueinander unterbrochen werden. Nach etwa 12 Sekunden (120 Sekunden in der Simulationszeit) werden beide zu Leader ihrer eigenen Partition:

c06b4d0a4f183299.png

Knoten über OTNS-Web verschieben

Verschieben Sie Knoten 5 durch Ziehen zurück an die ursprüngliche Position. Die beiden Partitionen sollten wieder zu einer Partition zusammengeführt werden:

9ba305c4c5a5f892.png

10. Knoten löschen

Knoten über OTNS-CLI löschen

Löschen Sie Knoten 8:

> del 8
Done

Knoten 8 sollte aus der Simulation verschwinden:

18156770d9f8bf83.png

Knoten über OTNS-Web löschen

Wählen Sie Knoten 5 aus und klicken Sie auf die Schaltfläche 7ff6afd565f4eafc.png in Action Bar, um Knoten 5 zu löschen:

d4079cceea0105f0.png

Node 1 sollte ein Leader werden und Node 7 sollte getrennt werden, da keine Verbindung zu einem Router hergestellt werden kann.

Simulation löschen (alle Knoten löschen)

Sie können die Simulation löschen, indem Sie alle Knoten über OTNS-Web löschen.

Klicken Sie auf die Schaltfläche 89618191721e79a0.png auf Action Bar.. Alle Knoten verschwinden auf einmal.

Bevor Sie fortfahren...

Fügen Sie der Simulation einige Knoten selbst hinzu, damit Sie mit dieser Anleitung fortfahren können.

11. OTNS-CLI-Knotenkontext

OTNS-CLI bietet den Knotenkontextmodus für eine einfache Interaktion mit Knoten, um Entwicklern die Diagnose des Knotenstatus zu erleichtern.

Knotenkontextmodus aktivieren

Geben Sie den Knotenkontext von Knoten 1 ein:

> node 1
Done
node 1>

Die CLI-Eingabeaufforderung wurde zu node 1> geändert , was den aktuellen Knotenkontext angibt. Sie können OpenThread-Befehlszeilenbefehle eingeben, die auf dem Knoten ausgeführt werden sollen, 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
OpenThread
Done
node 1> ipaddr
fdde:ad00:beef:0:0:ff:fe00:fc00
fdde:ad00:beef:0:0:ff:fe00:d800
fdde:ad00:beef:0:2175:8a67:1000:6352
fe80:0:0:0:2075:82c2:e9e9:781d
Done

Zu einem anderen Knotenkontext wechseln

node 1> node 2
Done
node 2> 

Knotenkontext verlassen

node 1> exit
Done
>

12. Glückwunsch

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 OpenThread für OTNS erstellt und eine OTNS-Simulation mit OpenThread-Simulationsinstanzen gestartet. Sie haben gelernt, wie Sie die Simulation mithilfe von OTNS-CLI und OTNS-Web auf verschiedene Arten bearbeiten können.

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

Nächste Schritte

Sehen Sie sich einige dieser Codelabs an...

Referenzdokumente