1. 簡介
什麼是 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 以上版本才能建構。
- 前往 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
的密碼。
安裝 OTT
將 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。請參閱https://superuser.com/a/836833,瞭解如何啟用 WebGL。
在以下各節中,您將瞭解如何透過 OTNS-CLI
和 OTNS-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
的各種元素:
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 按鈕,即可建立其他類型的節點。拖曳至現有節點附近的位置,以附加至這些執行緒網路:
現在您已建立一個包含多個節點的分區執行緒。在下一節中,我們會調整模擬速度,以加快模擬速度。
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 網路。
後續步驟
查看一些程式碼研究室…