1. 簡介
什麼是 Thread 和延長賽
Thread 是一種以 IP 為基礎的低功率無線網狀網路通訊協定,可保護裝置之間和裝置之間的通訊。Thread 網路可根據拓撲變更,避免單點故障。
Google 發布的 OpenThread 是 Thread 的開放原始碼實作模式。雖然 OpenThread 的程式碼大小和記憶體用量較小,仍支援執行緒規格中定義的所有功能。
OpenThread 網路模擬工具 (OTNS) 可在 posix 平台上執行模擬 OpenThread 節點,以模擬 Thread 網路。OTNS 提供易於使用的網路介面 (OTNS-Web),以視覺化方式呈現模擬的 Thread 網路,並執行相關作業。
課程內容
- 安裝 OTNS 及其依附元件
- 為 OTNS 建構 OpenThread
- 如何在 OTNS-Web 中新增/移動/刪除節點
- 使用 OTNS-Web 的其他實用功能進行網路模擬
- 確認 OpenThread 無單點故障
本程式碼研究室著重於 OTNS-CLI 和 OTNS-Web。但不支援 OTNS 的其他功能,例如 Python 指令碼。
軟硬體需求
- Linux x86_64 或 Mac OS。
- Git。
- Go 1.13 以上版本。
- 網路瀏覽器。OTNS-Web 使用網路瀏覽器顯示模擬結果。
- Thread Primer:您需要瞭解 Thread 的基本概念,才能瞭解本程式碼研究室的內容。
2. 安裝方式
安裝 Go
OTNS 需要 Go 1.13 以上版本才能建構。
- 前往 https://golang.org/dl/ 安裝 Go
- 將
$(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
的密碼。
安裝 otns
將 otns
安裝到 $GOPATH/bin
:
$ ./script/install otns installed: /usr/local/google/home/simonlin/go/bin/otns
請檢查 otns
是否已正確安裝
- 執行
which otns
,檢查otns
執行檔是否可在$PATH.
中搜尋 - 如果找不到
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
):
如果只看到 OTNS-Web 的空白頁面,表示您的瀏覽器可能未啟用 WebGL。如要瞭解如何啟用 WebGL,請參閱https://superuser.com/a/836833 。
以下各節將說明如何透過 OTNS-CLI
和 OTNS-Web
管理 OTNS 模擬作業。
5. 認識 OTNS-CLI 和OTNS 網站
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 的網路視覺化與管理工具。這個模型以視覺化的方式呈現模擬的 Thread 網路的節點、訊息和連結。請注意 OTNS-Web
的各種元素:
6. 新增節點
透過 OTNS-CLI 新增節點
在位置 (300, 100) 新增路由器
> add router x 300 y 100 1 Done
您應該會看到在 OTNS-Web
中建立的節點。節點會以路由器的形式啟動,並在幾秒後成為領導者:
透過 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
中看到節點:
依據「OTNS-Web
」新增節點
您也可以透過 OTNS-Web
新增節點。按一下 Action Bar
的 New Router
按鈕。您應該會在 New Router
按鈕的正上方看到已建立的節點。將節點拖曳到您透過 OTNS-CLI
建立的領導者附近。所有節點最終應合併至一個分區:
此外,也可以點選動作列中的 FED、MED 和 SED 按鈕,建立其他類型的節點。將節點拖曳到現有節點附近,即可連接至 Thread 網路:
現在,您在單一分區建立了 Thread 網路,當中包含多個節點。在下一節中,我們將調整模擬速度來加快模擬的執行速度。
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
上的速度控制按鈕 。按鈕會顯示目前的模擬速度,且可用來調整模擬速度及暫停/繼續模擬。
加快模擬速度
點選 按鈕可加快模擬速度,直到速度達到 MAX
: 為止。
減緩模擬速度
如要降低模擬速度,請點選「」按鈕。
暫停模擬
按一下 按鈕,即可在執行期間暫停模擬。這個按鈕會變更為「」。
繼續執行模擬作業
按一下 按鈕,即可在暫停時繼續模擬。這個按鈕會改回「」。
將模擬速度設為 10X
為節省時間,建議使用
OTNS-CLI
,將模擬速度調整為
10X
可讓我們更快觀察網路中的拓撲變化。
> speed 10 Done
8. 開啟/關閉電台
現在,模擬作業應包含 2 個路由器 (六邊形) 和多個子項,且以 10 倍速度執行。
找出 2 個路由器目前的領導者 (紅色框線),按一下即可選取:
關閉無線通訊
點選動作列中的 按鈕,關閉「主要」節點的圓形按鈕:
領導者將無法在圓形按鈕關閉的情況下收發訊息。
等待約 12 秒 (模擬時間為 120 秒),讓另一個路由器成為新的領導者:
Thread 網路會在主管失敗後自動復原,方法是與新的領導者組成新的分區。新的分區顏色也有新的分區顏色。
開啟無線通訊
選取無線電已關閉的領導者。點選 Action Bar
上的 按鈕,恢復連線能力:
恢復連線後,領導者應重新連接到網路。
9. 移動節點
OTNS 可讓使用者輕鬆透過 OTNS-CLI
或 OTNS-Web
移動節點。
透過「OTNS-CLI
」移動節點
將節點 5 移至新位置:
> move 5 600 300 Done
由於目前節點 5 距離另一個路由器遠離,因此這兩個路由器應中斷連線,且大約在 12 秒後 (模擬時間 120 秒) 後都會成為自己分區的領導者:
透過 OTNS-Web 移動節點
拖曳節點 5 移回原始位置。這兩個分區應合併回一個分區:
10. 刪除節點
從「OTNS-CLI
」中刪除節點
刪除節點 8:
> del 8 Done
節點 8 應會從模擬中消失:
從「OTNS-Web
」中刪除節點
選取節點 5,然後按一下 Action Bar
上的 按鈕刪除節點 5:
Node 1
應宣告為「主要」且 Node 7
無法連接任何路由器,因此應卸離。
清除模擬作業 (刪除所有節點)
透過 OTNS-Web
刪除所有節點,即可清除模擬作業。
按一下 Action Bar.
上的 按鈕,所有節點都會立即消失。
在繼續之前...
自行在模擬中新增一些節點,以便能繼續進行本教學課程。
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-CLI
和 OTNS-Web
以多種方式操控模擬功能。
現在您已經瞭解 OTNS 了,以及如何使用 OTNS 模擬 OpenThread 網路了。
後續步驟
查看一些程式碼研究室…
- 使用 OpenThread 模擬 Thread 網路
- 在 Docker 中使用 OpenThread 模擬 Thread 網路
- 使用 nRF52840 主機板和 OpenThread 建構 Thread 網路