一、簡介
什麼是「執行緒」和 OTNS
Thread 是一種 IP 型的低功耗網狀網路通訊協定,可讓裝置與裝置之間的通訊安全地進行。執行緒網路可配合拓撲變更進行調整,避免單點故障。
Google 發布的 OpenThread 是由 Thread 的開放原始碼實作。儘管程式碼較小,但記憶體空間有限,OpenThread 仍支援 Thread 規格中定義的所有功能。
OpenThread Network 模擬工具 (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。
- 前往 1.11 以上版本。
- 網路瀏覽器。OTNS-Web 是透過網路瀏覽器顯示模擬結果。
- Thread Primer (執行緒基本資訊)。您必須熟悉 Thread 的基本概念,才能在這個程式碼研究室中熟悉相關功能。
2. 安裝
安裝 Go
你必須使用 Go 1.11 以上版本才能建構 OTNS。
- 從 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
來檢查$PATH.
中的otns
執行檔是否可供搜尋 - 如果找不到
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
您可以在 output
目錄中找到 OpenThread 執行檔:
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
):
如果 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/output/simulation/bin $ 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 網路:
現在,您已經建立了一個分區網路,其中包含一個節點,但其中包含許多節點。在下一節中,我們會調整模擬速度,以加快模擬的執行速度。
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
Since 在,節點 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 網路。
後續步驟
立即查看這些程式碼研究室...