Symulowanie sieci wątków za pomocą OTNS

1. Wprowadzenie

5abd22afa2f2ee9a.png

Co to jest Thread i OTNS

Thread to oparty na adresie IP protokół sieci bezprzewodowej sieci o niskiej mocy, który umożliwia bezpieczną komunikację między urządzeniami i między urządzeniami. Sieci wątków mogą dostosowywać się do zmian w topologii, aby uniknąć pojedynczego punktu awarii.

OpenThread to opracowany przez Google projekt open source oprogramowania Thread. Mimo małego rozmiaru kodu i zasięgu pamięci OpenThread obsługuje wszystkie funkcje określone w specyfikacji Thread.

Za pomocą symulatora sieci OpenThread (OTNS) można symulować sieci typu Thread, przeprowadzając symulowane węzły OpenThread na platformach POSIX. OTNS oferuje łatwy w użyciu interfejs internetowy (OTNS-Web), który umożliwia wizualizację i obsługę symulowanych sieci Thread.

Czego się nauczysz

  • Instalowanie OTNS i jego zależności
  • Tworzenie pakietu OpenThread dla OTNS
  • Jak dodawać, przenosić i usuwać węzły w OTNS-Web
  • Korzystaj z innych przydatnych funkcji OTNS-Web do obsługi symulacji sieci
  • Weryfikowanie braku punktów końcowych w wątku OpenThread

Ćwiczenia z programowania skupiają się na OTNS-CLI i OTNS-Web. Inne funkcje OTNS, takie jak tworzenie skryptów Pythona, nie są brane pod uwagę.

Czego potrzebujesz

  • Linux x86_64 lub Mac OS.
  • Git (Git).
  • Wersja 1.13 lub nowsza.
  • Przeglądarka. OTNS-Web wyświetla symulacje w przeglądarce.
  • Wprowadzenie do wątków. Musisz znać podstawowe zagadnienia związane z wątkami, aby lepiej zrozumieć, czego nauczasz w tym ćwiczeniu z programowania.

2. Instalacja

Zainstaluj Go

Do korzystania z OTNS wymagana jest wersja 1.13 lub nowsza.

  1. Zainstaluj aplikację 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 wpisanie hasła na koncie sudo.

Instalowanie systemu operacyjnego

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 plik which otns, by sprawdzić, czy plik wykonywalny otns można wyszukać w $PATH.
  2. Jeśli nie znaleziono polecenia otns, sprawdź, czy pole $(go env GOPATH)/bin zostało dodane do $PATH.

3. Tworzenie pakietu OpenThread dla OTNS

Pobierz kod OpenThread z GitHuba

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

Utwórz OpenThread w 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 można znaleźć w katalogu build:

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

Pora uruchomić OTNS...

4. Uruchom OTNS

Uruchom otns:

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

Po uruchomieniu OTNS otworzy 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ę dla OTNS-Web, prawdopodobnie WebGL nie jest włączony w przeglądarce. Aby dowiedzieć się, jak włączyć WebGL, odwiedź stronęhttps://superuser.com/a/836833 .

W kolejnych sekcjach nauczysz się zarządzać symulacjami OTNS za pomocą funkcji OTNS-CLI i OTNS-Web.

5. Informacje o OTNS-CLI i OTNS-Web

Interfejs wiersza poleceń OTNS

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

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

Polecenia można wprowadzać za pomocą polecenia OTNS-CLI. Pełną listę poleceń znajdziesz w dokumentacji interfejsu wiersza poleceń OTNS. Nie martw się. Na potrzeby tego ćwiczenia wykorzystasz tylko kilka z tych poleceń.

OTNS – internet

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

4c5b43509a2ca0d0.png

6. Dodaj węzły

Dodaj węzły za pomocą OTNS-CLI

Dodaj router w pozycji 300, 100

> add router x 300 y 100
1
Done

Zobaczysz węzeł utworzony w: OTNS-Web. Węzeł zaczyna się jako router i za kilka sekund staje się liderem:

6ca8c2e63ed9818d.png

Dodaj więcej węzłów za pomocą 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

Poczekaj kilka sekund na scalenie węzłów w jedną partycję. Węzły powinny być widoczne w pliku OTNS-WEB:

3ee67903c01aa612.png

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

Możesz też dodawać węzły za pomocą typu OTNS-Web. Kliknij przycisk New Router na Action Bar. Nad przyciskiem New Router powinien być widoczny węzeł. Przeciągnij węzeł, aby znaleźć się w pobliżu lidera utworzonego za pomocą OTNS-CLI. Wszystkie węzły powinny ostatecznie zostać połączone w jedną partycję:

420258bb92561146.png

Na pasku działań kliknij też przyciski FED, MED i SED, aby utworzyć inne węzły. Przeciągnij je do pozycji w pobliżu istniejących węzłów, aby przyłączyć je do sieci Thread:

fe15d6f9726a099e.png

Udało Ci się utworzyć sieć wątków na jednej partycji zawierającej wiele węzłów. W następnej sekcji dowiesz się, jak dostosować szybkość symulacji, aby przyspieszyć symulację.

7. Dostosuj prędkość

Obecnie symulacja powinna trwać 1X, co oznacza, że symulacja czasu, który upłynął do tej pory, jest taki sam jak czas od momentu utworzenia pierwszego węzła.

Dostosuj prędkość za pomocą OTNS-CLI

Symulację można dostosować za pomocą OTNS-CLI.

Ustaw szybkość symulowania na 100X

> speed 100
Done

Zobaczysz, że węzły będą wysyłać wiadomości znacznie częściej niż wcześniej.

Ustaw szybkość symulowania na MAX

> speed max
Done

Obecnie OTNS stara się symulować jak najszybciej, więc węzły powinny wysyłać dużą liczbę wiadomości.

Wstrzymanie symulacji

> speed 0
Done

Ustawienie szybkości symulowania wartości 0 spowoduje wstrzymanie symulacji.

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

> speed 1
Done

Ustawienie szybkości symulowania wartości większej niż 0 powoduje wznowienie symulacji.

Dostosuj prędkość za pomocą OTNS-Web

Przyciski sterowania prędkością

Znajdź przyciski sterowania prędkością (9329157c1bd12672.png) na: Action Bar. Przyciski pokazują aktualną szybkość symulowania i pozwalają dostosować szybkość symulowania i wstrzymać lub wznowić symulację.

Symulacja przyspieszania

Możesz przyspieszyć symulację, klikając przycisk 39b88331779277ad.png, dopóki szybkość nie osiągnie MAX: f5f460b2586d299b.png.

Spowolnij symulację

Możesz spowolnić symulację, klikając przycisk 31cca8d5b52fa900.png.

Wstrzymanie symulacji

Kliknij przycisk 46cc2088c9aa7ab6.png, aby wstrzymać symulację. Przycisk zmieni się na CE25eda3496ffcd4.png.

Wznów symulację

Kliknij przycisk CE25eda3496ffcd4.png, aby wznowić symulację. Przycisk zmieni się z powrotem na 46cc2088c9aa7ab6.png.

Ustaw szybkość symulowania na 10X

Aby zaoszczędzić czas, skorzystaj z narzędzia

OTNS-CLI, aby dostosować szybkość symulowania do:

10X, aby szybciej zauważyć zmiany w topologii sieci.

> speed 10
Done

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

Symulacja powinna teraz obejmować 2 routery (w kształcie sześciokąta) i wiele elementów podrzędnych, a także powinna działać z 10 razy większą szybkością.

Znajdź bieżącego lidera (czerwone obramowanie) 2 routerów, aby je wybrać: kliknij jeden z nich:

8c6a2e191cdae0c7.png

Wyłącz radio

Aby wyłączyć radio węzła lidera, kliknij przycisk 7ca085f470491dd4.png na pasku działań:

a3bf58d9d125f95f.png

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

Zaczekaj około 12 sekund (120 s w symulacji czasu) na drugi router, aby zostać nowym liderem.

e3d32f85c4a1b990.png

Sieć Thread automatycznie przywraca informacje o niepowodzeniu lidera, tworząc nową partycję z nowym liderem. Nowa partycja ma też nowy kolor partycji.

Włącz radio

Wybierz lidera, którego radio było wyłączone. Kliknij przycisk 2d9cecb8612b42aa.png na urządzeniu Action Bar, aby przywrócić łączność radiową:

7370a7841861aa3a.png

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

9. Przenieś węzły

Dzięki OTNS użytkownicy mogą łatwo przenosić węzły 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 jest daleko od innego routera, powinien stracić połączenie ze sobą, a po około 12 sekundach (120 s w czasie symulacji) każdy z nich staje się liderem własnej partycji:

C06B4D0a4f183299.png

Przenoszenie węzła przez OTNS-Web

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

9ba305c4c5a5f892

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 urządzeniu Action Bar, aby usunąć ten węzeł:

D4079cceea0105f0.png

Strona Node 1 powinna zostać liderem, a Node 7 – odłączona, ponieważ nie może nawiązać połączenia z żadnym routerem.

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

Możesz wyczyścić symulację, usuwając wszystkie węzły za pomocą zasady OTNS-Web.

Kliknij przycisk 89618191721e79a0.png na opcji Action Bar. Wszystkie węzły znikną razem.

Zanim przejdziesz dalej...

Aby samodzielnie kontynuować eksperyment, w tym celu dodaj do symulacji niektóre węzły.

11. Kontekst węzła OTNS-CLI

OTNS-CLI zapewnia tryb kontekstowy węzła, który ułatwia interakcję z węzłami, aby ułatwić deweloperom diagnozowanie stanu węzła.

Włącz tryb kontekstu węzła

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

> node 1
Done
node 1>

Komunikat wiersza poleceń zmienił się na node 1> , wskazując bieżący kontekst węzła. Możesz wpisać polecenia OpenThread CLI, które mają być wykonywane w węźle, tak jakby wchodziliśmy w bezpośrednią interakcję z 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 się na kontekst innego 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ć serwer OTNS i jego zależności. Udało Ci się utworzyć konstrukcję OpenThread dla OTNS i rozpocząć symulację OTNS za pomocą instancji symulacji OpenThread. Wiesz już, jak symulować różne elementy w ramach metod OTNS-CLI i OTNS-Web.

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

Co dalej?

Sprawdź niektóre z tych ćwiczeń...

Dokumentacja