Symulowanie sieci Threads przy użyciu OTNS

1. Wprowadzenie

5abd22afa2f2ee9a.png

Czym jest Thread & OTNS

Thread to oparty na adresach IP protokół sieci bezprzewodowej typu mesh o niskim poborze energii, który umożliwia bezpieczną komunikację między urządzeniami i chmurą. Sieci Thread mogą dostosowywać się do zmian topologii, aby uniknąć awarii pojedynczego punktu.

Opublikowana przez Google implementacja OpenThread to implementacja Thread typu open source. Pomimo niewielkiego rozmiaru kodu i ilości pamięci OpenThread obsługuje wszystkie funkcje zdefiniowane w specyfikacji wątków.

Symulator sieci OpenThread (OTNS) umożliwia symulowanie sieci Thread przez uruchamianie symulowanych węzłów OpenThread na platformach POSix. OTNS zapewnia łatwy w użyciu interfejs internetowy (OTNS-Web) do wizualizacji i obsługi symulowanych sieci Thread.

Czego się nauczysz

  • Zainstaluj OTNS i jego zależności
  • Kompilacja OpenThread dla OTNS
  • Dodawanie, przenoszenie i usuwanie węzłów w trybie OTNS-Web
  • Używanie innych przydatnych funkcji OTNS-Web do obsługi symulacji sieci
  • Weryfikowanie pojedynczego punktu awarii OpenThread

To ćwiczenia w programie koncentrują się na OTNS-CLI i OTNS-Web. Inne funkcje OTNS, takie jak skrypty w języku Python, nie są uwzględnione.

Czego potrzebujesz

2. Instalacja

Zainstaluj Go

OTNS wymaga do tworzenia aplikacji Go w wersji 1.13 lub nowszej.

  1. Zainstaluj Go ze strony https://golang.org/dl/
  2. Dodaj $(go env GOPATH)/bin (zwykle $HOME/go/bin) do $PATH:
$ export PATH=$PATH:$(go env GOPATH)/bin

Pobierz kod OTNS

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

Zainstaluj zależności

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

Może pojawić się prośba o podanie hasła do konta sudo.

Instalowanie OUN

Zainstaluj aplikację otns w aplikacji $GOPATH/bin:

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

Sprawdźmy, czy aplikacja otns jest prawidłowo zainstalowana

  1. Uruchom which otns, aby sprawdzić, czy plik wykonywalny otns można wyszukać w folderze $PATH.
  2. Jeśli polecenie otns nie zostanie znalezione, sprawdź, czy do $PATH. dodano polecenie $(go env GOPATH)/bin

3. Kompilacja OpenThread dla OTNS

Pobierz kod OpenThread z GitHuba

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

Kompilowanie OpenThread w narzędziu OTNS=1

$ 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

Pliki wykonywalne OpenThread znajdują się w katalogu build:

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

Czas uruchomić OTNS...

4. Uruchom OTNS

Uruchomienie otns:

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

Po uruchomieniu OTNS włączy konsolę interfejsu wiersza poleceń (OTNS-CLI) i uruchomi przeglądarkę internetową do wizualizacji sieci i zarządzania nią (OTNS-Web):

a0e05178d66929b1.png

Jeśli widzisz tylko pustą stronę OTNS-Web, możliwe, że interfejs WebGL nie jest włączony w Twojej przeglądarce. Informacje o włączaniu WebGL znajdziesz na stroniehttps://superuser.com/a/836833 .

W kolejnych sekcjach dowiesz się, jak zarządzać symulacjami OTNS za pomocą narzędzi OTNS-CLI i OTNS-Web.

5. Podstawowe informacje o interfejsie OTNS-CLI OTNS – sieć

OTNS-CLI

OTNS-CLI udostępnia interfejs wiersza poleceń (interfejs wiersza poleceń) do zarządzania symulacjami OTNS.

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

Polecenia możesz wpisywać za pomocą OTNS-CLI. Pełną listę poleceń znajdziesz w dokumentacji interfejsu wiersza poleceń OTNS. Bez obaw. W tym ćwiczeniu z programowania użyjesz tylko kilku z tych poleceń.

OTNS – sieć

OTNS-Web to narzędzie OTNS do wizualizacji sieci i zarządzania nimi. Stanowi wizualną reprezentację węzłów, komunikatów i linków symulowanej sieci Thread. Zwróć uwagę na różne elementy OTNS-Web:

4c5b43509a2ca0d0.png

6. Dodaj węzły

Dodawanie węzłów za pomocą interfejsu OTNS-CLI

Dodaj router w pozycji (300, 100)

> add router x 300 y 100
1
Done

Zobaczysz węzeł utworzony w zadaniu OTNS-Web. Węzeł jest uruchamiany jako router i po kilku sekundach staje się liderem:

6ca8c2e63ed9818d.png

Dodaj więcej węzłów do OTNS-CLI

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

Odczekaj kilka sekund, aż węzły scalą się w jedną partycję. Węzły powinny być widoczne w elemencie OTNS-WEB:

3ee67903c01aa612.png

Dodaj węzły według: OTNS-Web

Węzły możesz też dodawać za pomocą interfejsu OTNS-Web. Kliknij przycisk New Router w sekcji Action Bar. Tworzenie węzła powinno być widoczne tuż nad przyciskiem New Router. Przeciągnij węzeł w pobliżu lidera utworzonego do OTNS-CLI. Wszystkie węzły powinny zostać ostatecznie scalone w jedną partycję:

420258bb92561146.png

Możesz też tworzyć węzły innego typu, klikając przyciski FED, MED i SED na pasku działań. Przeciągnij je w pobliżu istniejących węzłów, aby dołączyć je do tej sieci Thread:

fe15d6f9726a099e.png

Masz już sieć Thread z jedną partycją zawierającą wiele węzłów. W następnej sekcji dostosujemy symulowaną szybkość, aby przyspieszyć symulację.

7. Dostosuj prędkość

Obecnie symulacja powinna działać z prędkością 1X, co oznacza, że symulowany czas, który upłynął do tej pory, jest taki sam jak rzeczywisty czas od momentu utworzenia pierwszego węzła.

Dostosuj szybkość przez: OTNS-CLI

Symulatorowaną szybkość możesz zmienić w OTNS-CLI.

Ustaw symulowaną szybkość na 100X

> speed 100
Done

Węzły powinny wysyłać wiadomości znacznie częściej niż wcześniej.

Ustaw symulowaną szybkość na MAX

> speed max
Done

Obecnie OTNS stara się przeprowadzać symulację tak szybko, jak jest to możliwe, więc powinny być widoczne węzły wysyłające dużą liczbę wiadomości.

Wstrzymanie symulacji

> speed 0
Done

Ustawienie symulowanej prędkości na 0 wstrzymuje symulację.

Przywróć symulację z normalną prędkością

> speed 1
Done

Ustawienie symulowanej szybkości na wartość większą niż 0 wznawia symulację.

Dostosuj szybkość przez: OTNS-Web

Przyciski sterowania prędkością

Przyciski sterowania prędkością znajdziesz 9329157c1bd12672.png na: Action Bar. Przyciski pokazują aktualną symulowaną prędkość i można ich użyć do dostosowania symulowanej prędkości oraz wstrzymania/wznowienia symulacji.

Przyspiesz symulację

Możesz przyspieszyć symulację, klikając przycisk 39b88331779277ad.png, aż prędkość osiągnie MAX: f5f460b2586d299b.png.

Symulacja spowolnienia

Aby spowolnić symulację, kliknij przycisk 31cca8d5b52fa900.png.

Wstrzymanie symulacji

Kliknij przycisk 46cc2088c9aa7ab6.png, aby wstrzymać symulację podczas jej uruchamiania. Przycisk zostanie zmieniony na ce25eda3496ffcd4.png.

Wznów symulację

Kliknij przycisk ce25eda3496ffcd4.png, aby wznowić wstrzymaną symulację. Przycisk zostanie zmieniony z powrotem na 46cc2088c9aa7ab6.png.

Ustaw symulowaną szybkość na 10X

Aby oszczędzać czas, używaj

OTNS-CLI , aby dostosować symulowaną szybkość do

10X dzięki temu możemy znacznie szybciej obserwować zmiany topologii w sieci.

> speed 10
Done

8. Włącz/wyłącz radio

Teraz symulacja powinna obejmować 2 routery (w kształcie sześciokąta) i wiele elementów podrzędnych. Symulacja działa z 10-krotnie większą prędkością.

Znajdź obecnego lidera (czerwone obramowanie) jednego z 2 routerów. Kliknij go, aby go wybrać:

8c6a2e191cdae0c7.png

Wyłącz radio

Kliknij przycisk 7ca085f470491dd4.png na pasku działań, aby wyłączyć radio węzła Leader:

a3bf58d9d125f95f.png

Lider nie będzie mógł wysyłać ani odbierać wiadomości przy wyłączonym radio.

Poczekaj około 12 s (120 s w czasie symulacji), aż drugi router zostanie nowym liderem:

e3d32f85c4a1b990.png

Sieć Thread automatycznie regeneruje się po awarii lidera, tworząc nową partycję z nowym liderem. Nowa partycja ma też nowy kolor.

Włącz radio

Wybierz lidera, którego radio było wyłączone. Kliknij przycisk 2d9cecb8612b42aa na urządzeniu Action Bar, by przywrócić połączenie radiowe:

7370a7841861aa3a.png

Lider powinien ponownie podłączyć się do sieci po przywróceniu połączenia radiowego.

9. Przenoszenie węzłów

OTNS umożliwia użytkownikom łatwe przenoszenie węzłów przez OTNS-CLI lub OTNS-Web.

Przenieś węzeł przez: OTNS-CLI

Przenieś węzeł 5 do nowej lokalizacji:

> move 5 600 300
Done

Ponieważ węzeł 5 znajduje się teraz daleko od drugiego routera, powinny one utracić połączenie i po około 12 s (120 s w czasie symulacji) obaj staną się liderami własnej partycji:

c06b4d0a4f183299.png

Przenieś węzeł przez OTNS-Web

Przenieś węzeł 5 z powrotem do pierwotnej lokalizacji, przeciągając go. Dwie partycje powinny się połączyć z powrotem w jedną:

9ba305c4c5a5f892.png

10. Usuń węzły

Usuń węzły przez OTNS-CLI

Usuń węzeł 8:

> del 8
Done

Węzeł 8 powinien zniknąć z symulacji:

18156770d9f8bf83.png

Usuń węzły przez OTNS-Web

Wybierz węzeł 5 i kliknij przycisk 7ff6afd565f4eafc.png na węźle Action Bar, aby usunąć węzeł 5:

d4079cceea0105f0.png

Parametr Node 1 powinien stać się liderem, a Node 7 powinien zostać odłączony, ponieważ nie może dotrzeć do żadnego routera.

Wyczyść symulację (usuń wszystkie węzły)

Aby wyczyścić symulację, usuń wszystkie węzły do OTNS-Web.

Kliknij przycisk 89618191721e79a0.png w obszarze Action Bar. Wszystkie węzły znikną jednocześnie.

Zanim przejdziesz dalej...

Samodzielnie dodaj do symulacji kilka węzłów, aby móc kontynuować naukę w tym samouczku.

11. Kontekst węzła OTNS-CLI

OTNS-CLI udostępnia tryb kontekstu węzła, który umożliwia łatwą interakcję z węzłami, ułatwiając programistom diagnozowanie stanu węzła.

Otwórz tryb kontekstu węzła

Wpisz kontekst węzła dla węzła 1:

> node 1
Done
node 1>

Prompt interfejsu wiersza poleceń został zmieniony na node 1> , co wskazuje bieżący kontekst węzła. Możesz wpisywać polecenia interfejsu wiersza poleceń OpenThread, które są wykonywane w węźle w taki sposób, jak podczas bezpośredniej interakcji z tym węzłem.

Wykonywanie poleceń w kontekście węzła

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

Przełącz na inny kontekst węzła

node 1> node 2
Done
node 2> 

Zamknij kontekst węzła

node 1> exit
Done
>

12. Gratulacje

Gratulacje! Udało Ci się wykonać pierwszą symulację OTNS.

Wiesz już, jak zainstalować plik OTNS i jego zależności. Udało Ci się utworzyć aplikację OpenThread dla OTNS i rozpocząć symulację OTNS przy użyciu instancji symulacyjnych OpenThread. Już wiesz, jak manipulować symulacją na różne sposoby, korzystając z usług OTNS-CLI i OTNS-Web.

Wiesz już, czym jest OTNS i jak za jego pomocą symulować sieci OpenThread.

Co dalej?

Zapoznaj się z tymi ćwiczeniami z programowania...

Dokumenty referencyjne