使用 OTNS 模擬執行緒網路

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

1. 簡介

5abd22afa2f2ee9a.png

什麼是 Thread &OTN;

Thread 是符合 IP 架構的低功耗無線網狀網路通訊協定,可讓裝置與裝置之間進行雲端通訊通訊。執行緒網路可因應拓撲變化進行調整,以避免單點故障。

Google 推出的 OpenThread 是 Thread 的開放原始碼實作。OpenThread 的程式碼大小較小和記憶體用量較小,但支援 Thread 規格 中定義的所有功能。

OpenThread Network Simulator (OTNS) 可用於在 posix 平台上執行模擬 OpenThread 節點,以模擬 Thread 網路。OTNS 提供易於使用的網頁介面 (OTNS-Web),方便您以視覺化方式操作及模擬模擬的 Thread 網路。

課程內容

  • 安裝 OTNS 及其依附元件
  • 為 OTNS 建構 OpenThread
  • 如何在 OTNS-Web 中新增/移動/刪除節點
  • 使用 OTNS-Web' 的其他實用功能來處理網路模擬作業
  • 驗證 OpenThread's 無單一點失敗

本程式碼研究室著重於 OTNS-CLI 和 OTNS-Web。OTNS' 的其他功能 (例如 Python 指令碼) 則不在適用範圍內。

軟硬體需求

  • Linux x86_64 或 Mac OS。
  • Git
  • Go 1.13 以上版本
  • 網路瀏覽器。OTNS-Web 會使用網路瀏覽器來顯示模擬畫面。
  • 執行緒入門。您必須瞭解 Thread 的基本概念,才能瞭解本程式碼研究室所說明的內容。

2. 安裝

安裝 Go

OTNS 需要 Go 1.13 以上版本才能建構。

  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的密碼。

安裝 OTT

otns 安裝到 $GOPATH/bin

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

檢查是否已正確安裝 otns

  1. 執行 which otns otns $PATH.
  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/cmake-build simulation -DOT_OTNS=ON -DOT_SIMULATION_VIRTUAL_TIME=ON -DOT_SIMULATION_VIRTUAL_TIME_UART=ON -DOT_SIMULATION_MAX_NETWORK_SIZE=999

您可以在 build 目錄中找到 OpenThread 執行檔:

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

現在開始執行 OTNS 了...

4. 執行 OTNS

執行 otns

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

成功啟動後,OTNS 將進入 CLI 控制台 (OTNS-CLI),並啟動用於網路視覺化與管理的網路瀏覽器 (OTNS-Web):

a0e05178d66929b1.png

如果您只能看到空白頁面 (OTNS-Web),可能是因為瀏覽器未啟用 WebGL。請參閱https://superuser.com/a/836833,瞭解如何啟用 WebGL。

在以下各節中,您將瞭解如何透過 OTNS-CLIOTNS-Web 管理 OTNS 模擬。

5. 認識 OTNS-CLI 和 OTNS-Web

OTNS-CLI

OTNS-CLI 提供用於管理 OTNS 模擬的指令列介面 (CLI)。

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

您可以透過 OTNS-CLI 輸入指令。如需完整的指令清單,請參閱 OTNS CLI 參考資料。別擔心,您只會在本程式碼研究室中使用幾個指令。

OTNS (網路)

OTNS-Web」是 OTNS 的網路網路管理工具。這個架構會以視覺化方式呈現模擬的執行緒網路中的節點、訊息和連結。請留意 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

請稍候幾秒鐘,讓節點合併為一個分區。您應該會看到 OTNS-WEB 中的節點:

3ee67903c01aa612.png

OTNS-Web 新增節點

您也可以透過 OTNS-Web 新增節點。按一下 Action BarNew Router 按鈕。您應該會在 New Router 按鈕上方看到一個節點。將節點拖曳至附近透過 OTNS-CLI 建立的主管。所有節點最終都必須合併為單一分區:

420258bb92561146.png

此外,按一下動作列的 FED、MED 和 SED 按鈕,即可建立其他類型的節點。拖曳至現有節點附近的位置,以附加至這些執行緒網路:

fe15d6f9726a099e.png

現在您已建立一個包含多個節點的分區執行緒。在下一節中,我們會調整模擬速度,以加快模擬速度。

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。這些按鈕會顯示目前的模擬速度,並可用於調整模擬速度和暫停/繼續模擬。

加速模擬

如要加快模擬速度,請按一下 39b88331779277ad.png 按鈕,直到速度達到 MAXf5f460b2586d299b.png

慢速模擬

如要減緩模擬速度,請按一下 31cca8d5b52fa900.png 按鈕。

暫停模擬

按一下 46cc2088c9aa7ab6.png 按鈕,即可在模擬作業執行時暫停模擬作業。按鈕將變更為 ce25eda3496ffcd4.png

繼續模擬

按一下「ce25eda3496ffcd4.png」按鈕即可繼續模擬作業。按鈕將變回 46cc2088c9aa7ab6.png

將模擬速度設為 10X

為了節省時間,請使用

OTNS-CLI 將模擬速度調整為

10X,以便更快觀測網路中的拓撲變更。

> speed 10
Done

8. 開啟/關閉電台

現在,模擬作業應包含 2 個路由器 (六角形) 和許多子項,並以 10 倍的速度執行。

找出 2 個路由器目前的主管 (紅色框線),按一下即可選取:

8c6a2e191cdae0c7.png

關閉無線通訊

按一下動作列中的 7ca085f470491dd4.png 按鈕,關閉主管節點的圓形按鈕:

a3bf58d9d125f95f.png

如果選擇關閉,則代表必須收發訊息。

等待其他路由器約 12 秒 (模擬時間約 120 秒) 讓應用程式成為新的領導者:

e3d32f85c4a1b990.png

「Thread」網路會以新的主管建立新分區,藉此自動從「故障」中復原。新分區也採用新的分區顏色。

開啟無線通訊

選取無線電已關閉的主管。按一下 Action Bar 上的 2d9cecb8612b42aa.png 按鈕,即可恢復無線電連線:

7370a7841861aa3a.png

無線網路連線恢復後,主管應重新連線至網路。

9. 移動節點

OTNS 可讓使用者透過 OTNS-CLIOTNS-Web 輕鬆移動節點。

透過 OTNS-CLI 移動節點

將節點 5 移至新位置:

> move 5 600 300
Done

由於節點 5 遠離另一個路由器,因此兩者應該彼此失去連線,並在約 12 秒 (模擬時間的 120 秒) 後,它們都會成為自己分區的領先者:

c06b4d0a4f183299.png

透過 OTNS-Web 移動節點

透過拖曳的方式將節點 5 移回原本的位置。兩個分區應合併回一個分區:

9ba305c4c5a5f892.png

10. 刪除節點

透過 OTNS-CLI 刪除節點

刪除節點 8:

> del 8
Done

節點 8 應從模擬中消失:

18156770d9f8bf83.png

透過 OTNS-Web 刪除節點

選取節點 5,然後按一下 Action Bar 上的 7ff6afd565f4eafc.png 按鈕,以刪除節點 5:

d4079cceea0105f0.png

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 網路。

後續步驟

查看一些程式碼研究室…

參考文件