Google は、黒人コミュニティのための人種的公平の促進に取り組んでいます。詳細をご覧ください。

OTNS を使用してスレッド ネットワークをシミュレートする

1. はじめに

5abd22afa2f2ee9a.png

スレッドと OTNS について

Thread は、デバイス間通信とデバイス間通信の安全な通信を可能にする IP ベースの低電力ワイヤレス メッシュ ネットワーク プロトコルです。スレッド ネットワークは、トポロジの変更に適応して、単一障害点を回避できます。

Google がリリースする OpenThread は、Thread のオープンソース実装です。OpenThread は、コードサイズとメモリ フットプリントが小さいにもかかわらず、スレッド仕様で定義されているすべての機能をサポートしています。

OpenThread ネットワーク シミュレータ(OTNS)を使用すると、POSIX プラットフォームでシミュレートされた OpenThread ノードを実行することで、スレッド ネットワークをシミュレートできます。OTNS は、シミュレートされた Thread ネットワークの可視化と運用のための使いやすいウェブ インターフェース(OTNS-Web)を提供します。

学習内容

  • OTNS とその依存関係をインストールする
  • OTNS 用の OpenThread をビルドする
  • OTNS-Web でノードを追加/移動/削除する方法
  • OTNS-Web のその他の便利な機能を使用してネットワーク シミュレーションを運用する
  • OpenThread の単一障害点を確認する

この Codelab では、OTNS-CLI と OTNS-Web を中心に説明します。Python スクリプトなど、OTNS のその他の機能は対象外です。

必要なもの

  • Linux x86_64 または Mac OS
  • Git
  • Go 1.11 以降
  • ウェブブラウザ。OTNS-Web では、ウェブブラウザを使用してシミュレーションを表示します。
  • Thread Primer。この Codelab で教える内容を理解するため、スレッドの基本コンセプトを理解しておく必要があります。

2. インストール

Go をインストールする

OTNS をビルドするには Go 1.11 以降が必要です。

  1. https://golang.org/dl/ から Go をインストールします。
  2. $(go env GOPATH)/bin(通常は $HOME/go/bin)を $PATH に追加します。
$ export PATH=$PATH:$(go env GOPATH)/bin

OTNS コードの取得

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

依存関係のインストール

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

sudo のパスワードの入力を求められることがあります。

OTN をインストールする

otns$GOPATH/bin にインストールします。

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

otns が正しくインストールされているかどうか確認しましょう

  1. which otns を実行して、$PATH.otns 実行可能ファイルが検索可能かどうかを確認します。
  2. otns コマンドが見つからない場合は、$(go env GOPATH)/bin$PATH. に追加されていることを確認してください。

3. OTNS 用の OpenThread をビルドする

GitHub から OpenThread コードを取得

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

OTNS=1 を使用して OpenThread をビルドする

$ cd ~/src/openthread
$ ./script/bootstrap
$ ./bootstrap
$ make -f examples/Makefile-simulation OTNS=1

OpenThread 実行可能ファイルは 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

それでは、OTNS を実行してみましょう。

4.OTNS を実行する

otns を実行します。

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

正常に実行されると、OTNS は CLI コンソール(OTNS-CLI)に入り、ネットワークの可視化と管理(OTNS-Web)を行うウェブブラウザを起動します。

a0e05178d66929b1.png

OTNS-Web で空白のページしか表示されない場合は、ブラウザの WebGL が有効になっていない可能性があります。WebGL を有効にする方法については、https://superuser.com/a/836833 をご覧ください。

次のセクションでは、OTNS シミュレーションを OTNS-CLIOTNS-Web を使用して管理する方法について説明します。

5. OTNS-CLI と OTNS-Web について知る

OTNS-CLI

OTNS-CLI は、OTNS シミュレーションを管理するためのコマンドライン インターフェース(CLI)を提供します。

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

コマンドを OTNS-CLI で入力できます。コマンドの完全なリストについては、OTNS CLI リファレンスをご覧ください。この Codelab では、これらのコマンドの一部のみを使用します。

OTNS-ウェブ

OTNS-Web は OTNS のネットワーク可視化および管理ツールです。シミュレートされた Thread ネットワークのノード、メッセージ、リンクを視覚的に表現します。OTNS-Web のさまざまな要素に注意してください。

4c5b43509a2ca0d0.png

6. ノードを追加

OTNS-CLI を使用してノードを追加する

位置(300、100)にルーターを追加する

> add router x 300 y 100
1
Done

OTNS-Web にノードが表示されます。ノードはルーターとして起動し、数秒でリーダーになります。

6ca8c2e63ed9818d.png

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

ノードが 1 つのパーティションにマージされるまで数秒待ちます。OTNS-WEB にノードが表示されます。

3ee67903c01aa612.png

OTNS-Web のノードを追加

OTNS-Web を使用してノードを追加することもできます。Action Bar の [New Router] ボタンをクリックします。New Router ボタンのすぐ上に、作成されているノードが表示されます。OTNS-CLI を使用して、作成したリーダーの近くまでノードをドラッグします。最終的に、すべてのノードが 1 つのパーティションにマージされます。

420258bb92561146.png

また、アクションバーの [FED]、[MED]、[SED] の各ボタンをクリックして、他のタイプのノードも作成します。既存のノードの近くの位置にドラッグして、その Thread ネットワークにアタッチします。

fe15d6f9726a099e.png

これで、多数のノードを含む 1 つのパーティションのスレッド ネットワークが作成されました。次のセクションでは、シミュレーションの速度を調整して、シミュレーションの実行速度を上げます。

7. 速度を調整する

現在、シミュレーションは 1X の速度で実行されています。つまり、これまでに経過したシミュレーション時間は、最初のノードを作成してからの実際の時間と同じです。

OTNS-CLI で速度を調整する

シミュレーション速度は OTNS-CLI で調整できます。

シミュレーション速度を 100X に設定

> speed 100
Done

以前よりはるかに頻繁にノードからメッセージが送信されるはずです。

シミュレーション速度を MAX に設定

> speed max
Done

現在、OTNS は可能な限り高速にシミュレートしようとしているため、ノードから大量のメッセージが送信されるのがわかります。

シミュレーションの一時停止

> speed 0
Done

シミュレーション速度を 0 に設定すると、シミュレーションが一時停止します。

シミュレーションを通常の速度で復元

> speed 1
Done

シミュレーション速度を 0 より大きい値に設定すると、シミュレーションが再開されます。

OTNS-Web で速度を調整する

速度調整ボタン

Action Bar で速度調整ボタン 9329157c1bd12672.png を見つけます。ボタンは、現在のシミュレーション速度を示します。シミュレーション速度を調整し、シミュレーションを一時停止/再開するために使用できます。

シミュレーションの高速化

速度を MAXF5f460b2586d299b.png)に達するまで 39B88331779277ad.png ボタンをクリックすると、シミュレーションを高速化できます。

速度が遅いシミュレーション

31cca8d5b52fa900.png ボタンをクリックすると、シミュレーションの速度が遅くなります。

シミュレーションの一時停止

実行中のシミュレーションを一時停止するには、46cc2088c9aa7ab6.png ボタンをクリックします。ボタンが ce45eda3496ffcd4.png に変わります。

シミュレーションを再開

シミュレーションが一時停止しているときに再開するには、ce45eda3496ffcd4.png ボタンをクリックします。ボタンは 46cc2088c9aa7ab6.png に戻ります。

シミュレーション速度を 10X に設定

時間を節約するために、

OTNS-CLI すると、シミュレーションの速度を

10X ネットワーク内のトポロジ変更をはるかに迅速に監視できるようになります。

> speed 10
Done

8. ラジオをオンまたはオフにする

シミュレーションには 2 つのルーター(he 角形)と多くの子モデルがあり、10 倍の速度で実行されます。

2 つのルーターの現在のリーダー(赤い枠線)を見つけて、クリックして選択します。

8c6a2e191cdae0c7.png

無線通信をOFF

アクションバーの 7ca085f470491dd4.png ボタンをクリックして、リーダーノードのラジオをオフにします。

a3bf58d9d125f95f.png

リーダーは、ラジオをオフにしてもメッセージを送受信できません。

もう一方のルーターが新しいリーダーに変わるまで、約 12 秒(シミュレーション時間として 120 秒)待ちます。

e3d32f85c4a1b990.png

Thread ネットワークは、新しいリーダーとの新しいパーティションを形成することにより、リーダーの障害から自動的に回復します。また、新しいパーティションにも新しいパーティションの色が設定されます。

無線通信をON

ラジオをオフにしたリーダーを選択します。 Action Bar2d9cecb8612b42aa.png ボタンをクリックして、無線接続を復元します。

7370a7841861aa3a.png

リーダーは、無線接続が回復した後、ネットワークに再接続する必要があります。

9. ノードの移動

ユーザーは OTNS を使用することで、OTNS-CLI または OTNS-Web を介してノードを簡単に移動できます。

OTNS-CLI を介してノードを移動

ノード 5 を新しい場所に移動します。

> move 5 600 300
Done

ノード 5 が相手側のルーターから遠く離れているため、約 12 秒(シミュレーション時間では 120 秒)が経過すると、両者は自身のパーティションのリーダーになります。

c06b4d0a4f183299.png

OTNS-Web を介してノードを移動する

ノード 5 をドラッグして元の位置に戻します。2 つのパーティションは、1 つのパーティションに統合されます。

9ba305c4c5a5f892.png

10. ノードの削除

OTNS-CLI を使用してノードを削除する

ノード 8 を削除します。

> del 8
Done

ノード 8 がシミュレーションに表示されなくなります。

18156770d9f8bf83.png

OTNS-Web を使用してノードを削除する

ノード 5 を選択し、Action Bar7ff6afd565f4eafc.png ボタンをクリックして、ノード 5 を削除します。

d4079cceea0105f0.png

Router にアクセスできないため、Node 1 がリーダーになり、Node 7 は接続解除する必要があります。

シミュレーションをクリア(すべてのノードを削除)

OTNS-Web を使用してすべてのノードを削除すると、シミュレーションをクリアできます。

Action Bar.89618191721e79a0.png ボタンをクリックすると、すべてのノードが一度に表示されなくなります。

続行する前に

このチュートリアルを続行できるように、シミュレーションにノードをいくつか追加します。

11. OTNS-CLI のノード コンテキスト

OTNS-CLI は、ノードを簡単に操作できるノード コンテキスト モードを提供して、デベロッパーがノードのステータスを診断できるようにします。

ノード コンテキスト モードの開始

ノード 1 のノード コンテキストを入力します。

> node 1
Done
node 1>

CLI プロンプトが node 1> に変更され、現在のノード コンテキストが示されます。OpenThread CLI コマンドを入力すると、ノードを直接操作しているかのようにノードで実行できます。

ノード コンテキストでコマンドを実行する

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

別のノード コンテキストに切り替える

node 1> node 2
Done
node 2> 

終了ノードのコンテキスト

node 1> exit
Done
>

12. 完了

これで、最初の OTNS シミュレーションが正常に実行されました。

OTNS とその依存関係をインストールする方法について学習しました。OTNS 用の OpenThread を作成し、OpenThread シミュレーション インスタンスによる OTNS シミュレーションを開始しました。OTNS-CLIOTNS-Web の両方を通して、さまざまな方法でシミュレーションを操作する方法を学習しました。

OTNS について説明し、OTNS を使用して OpenThread ネットワークをシミュレートする方法を学習しました。

次のステップ

以下の Codelab をご覧ください。

リファレンス ドキュメント