Thread-Netzwerke mit OTNS simulieren

1. Einführung

5abd22afa2f2ee9a.png

Was ist Thread & OTNS?

Thread ist ein IP-basiertes stromsparendes Mesh-Netzwerk-Protokoll für sichere Geräte-zu-Gerät- und Geräte-zu-Cloud-Kommunikation. Thread-Netzwerke können sich an Topologieänderungen anpassen, um Single Point Of Failure zu vermeiden.

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

Mit dem OpenThread Network Simulator (OTNS) können Thread-Netzwerke simuliert werden, indem simulierte OpenThread-Knoten auf POSIX-Plattformen ausgeführt werden. OTNS bietet eine benutzerfreundliche 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
  • Andere nützliche Funktionen von OTNS-Web für die Netzwerksimulation verwenden
  • ThreadNo-Single-Point-of-Failure“ von OpenThread prüfen

Dieses Codelab befasst sich mit OTNS-CLI und OTNS-Web. Andere Funktionen von OTNS wie Python-Skripts sind nicht abgedeckt.

Voraussetzungen

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

2. Installation

Go installieren

Für das Erstellen von OTNS ist Go 1.11+ erforderlich.

  1. Installieren Sie Go über https://golang.org/dl/.
  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, ob otns ordnungsgemäß installiert ist

  1. Führen Sie which otns aus, um zu prüfen, ob die ausführbare Datei otns in $PATH. gesucht werden kann.
  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/bootstrap
$ ./bootstrap
$ make -f examples/Makefile-simulation OTNS=1

Die ausführbare OpenOpen-Datei des Threads finden Sie im Verzeichnis output:

Linux

$ ls ~/src/openthread/output/simulation/bin
ot-cli-ftd        ot-cli-mtd        ot-ncp-ftd        ot-ncp-mtd        ot-rcp

macOS

$ ls ~/src/openthread/output/simulation/bin
ot-cli-ftd        ot-cli-mtd        ot-ncp-ftd        ot-ncp-mtd        ot-rcp

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

4. OTNS ausführen

Führen Sie otns aus.

$ cd ~/src/openthread/output/simulation/bin
$ otns
> ← OTNS-CLI prompt

Wenn OTNS erfolgreich gestartet wurde, wird eine Befehlszeilenkonsole (OTNS-CLI) geöffnet und ein Webbrowser für die Netzwerkvisualisierung und -verwaltung (OTNS-Web) gestartet:

a0e05178d66929b1.png

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

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

5 OTNS-CLI und OTNS-Web

OTNS-Befehlszeile

OTNS-CLI bietet eine Befehlszeile zur Verwaltung von OTNS-Simulationen.

$ cd ~/src/openthread/output/simulation/bin
$ otns
> ← OTNS-CLI prompt

Sie können Befehle über OTNS-CLI eingeben. Eine vollständige Liste der Befehle finden Sie in der Referenz zur OTNS-Befehlszeile. Aber keine Sorge, Sie werden nur einige dieser Befehle in diesem Codelab 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

Router an Position hinzufügen (300, 100)

> add router x 300 y 100
1
Done

In OTNS-Web sollte ein Knoten erstellt werden. Der Knoten startet als Router 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 in einer Partition zusammengeführt werden. Die Knoten sollten in OTNS-WEB angezeigt werden:

3ee67903c01aa612.png

Knoten hinzufügen bis OTNS-Web

Sie können Knoten auch über OTNS-Web hinzufügen. Klicken Sie auf die Schaltfläche New Router von Action Bar. Ein Knoten wird direkt über der Schaltfläche New Router erstellt. Ziehen Sie den Knoten so, dass er sich in der Nähe des führenden Anbieters befindet, den Sie über OTNS-CLI erstellt haben. Alle Knoten sollten zu einer Partition zusammengeführt werden:

420258bb92561146.png

Klicken Sie außerdem in der Aktionsleiste auf die Schaltflächen FED, MED und SED, um andere Knotentypen zu erstellen. Ziehen Sie sie an Positionen in der Nähe der vorhandenen Knoten, um sie an dieses Thread-Netzwerk anzuhängen:

fe15d6f9726a099e.png

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

7. Geschwindigkeit anpassen

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

Geschwindigkeit über OTNS-CLI anpassen

Du kannst die simulierte Geschwindigkeit bis OTNS-CLI anpassen.

Simulationsgeschwindigkeit auf 100X festlegen

> speed 100
Done

Die Knoten senden Nachrichten viel häufiger als zuvor.

Simulationsgeschwindigkeit auf MAX festlegen

> speed max
Done

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

Simulation anhalten

> speed 0
Done

Wenn Sie die Simulationsgeschwindigkeit auf 0 festlegen, 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

Tasten für Geschwindigkeitsbegrenzung

Suchen Sie die Geschwindigkeitssteuerungsschaltflächen 9329157c1bd12672.png auf der Action Bar. Auf den Schaltflächen wird die aktuelle simulierte Geschwindigkeit angezeigt. Sie können die Simulationsgeschwindigkeit einstellen und die Simulation anhalten bzw. fortsetzen.

Simulation beschleunigen

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

Simulation verlangsamen

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

Simulation anhalten

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

Simulation fortsetzen

Klicken Sie auf die Schaltfläche ce25eda3496ffcd4.png, um die Simulation wieder zu starten, wenn sie pausiert ist. Die Schaltfläche wird wieder in 46 cm2088c9aa7ab6.png geändert.

Simulationsgeschwindigkeit auf 10X festlegen

Zeit sparen mit

OTNS-CLI , um die simulierte Geschwindigkeit auf anzupassen

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

> speed 10
Done

8. Radio ein-/ausschalten

Die Simulation sollte nun zwei Router (Hexagon-Form) und viele untergeordnete Elemente enthalten, die mit zehnfacher Geschwindigkeit ausgeführt werden.

Klicken Sie zum Auswählen auf den aktuellen Leader (rote Umrandung) der beiden Router:

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 mit deaktiviertem Radio senden oder empfangen.

Warten Sie etwa 12 s (120 s in der Simulationszeit), bis der andere Router zum neuen führenden Anbieter wird:

e3d32f85c4a1b990.png.

Im Thread-Netzwerk wird nach dem Fehlschlagen des Leaders automatisch eine neue Partition mit einem neuen Leader erstellt. Außerdem hat die neue Partition eine neue Partitionsfarbe.

Mobilfunkverbindung aktivieren

Wählen Sie den Leader aus, dessen Radio deaktiviert wurde. 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, nachdem die Funkverbindung wiederhergestellt wurde.

9. Knoten verschieben

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

Knoten durch OTNS-CLI verschieben

Verschieben Sie Knoten 5 an einen neuen Speicherort:

> move 5 600 300
Done

Da Knoten 5 weit von dem anderen Router entfernt ist, sollten sie die Verbindung zueinander trennen. Nach etwa 12 Sekunden (120 Sekunden) werden beide Knoten zu den führenden Anbietern ihrer eigenen Partition:

c06b4d0a4f183299.png

Knoten über OTNS-Web verschieben

Verschieben Sie Knoten 5 zurück an den ursprünglichen Speicherort. 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 auf dem Action Bar, um Knoten 5 zu löschen:

d4079cceea0105f0.png

Node 1 sollte zu "Leader" werden und Node 7 sollte getrennt werden, da es keine Verbindung zum Router herstellen kann.

Simulation löschen (alle Knoten löschen)

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

Klicken Sie auf die Schaltfläche 89618191721e79a0.png auf Action Bar.. Alle Knoten werden gleichzeitig ausgeblendet.

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 einen Knotenkontextmodus für die einfache Interaktion mit Knoten, damit Entwickler den Status eines Knotens diagnostizieren können.

Knotenkontextmodus aktivieren

Geben Sie den Knotenkontext für Knoten 1 ein:

> node 1
Done
node 1>

Die Befehlszeilen-Eingabeaufforderung wurde in node 1> geändert , was den aktuellen Knotenkontext angibt. Sie können OpenThread-Befehlszeilenbefehle eingeben, die auf dem Knoten ausgeführt werden, so 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 beenden

node 1> exit
Done
>

12. Glückwunsch

Sie haben die erste OTNS-Simulation erfolgreich durchgeführt.

Sie haben nun erfahren, wie OTNS und dessen Abhängigkeiten installiert werden. Sie haben OpenThread für OTNS erstellt und die OTNS-Simulation mit OpenThread-Simulationsinstanzen gestartet. Sie haben gelernt, wie die Simulation mit OTNS-CLI und OTNS-Web auf unterschiedliche Weise bearbeitet werden kann.

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

Nächste Schritte

Dann sieh dir ein paar dieser Codelabs an...

Referenzdokumente