OTNS를 사용하여 스레드 네트워크 시뮬레이션

1. 소개

5abd22afa2f2ee9a.png

스레드 및 OTNS란?

스레드는 안전한 장치 대 장치 및 장치 대 클라우드 통신을 가능하게 하는 IP 기반 저전력 무선 메시 네트워킹 프로토콜입니다. 스레드 네트워크는 단일 실패 지점을 피하기 위해 토폴로지 변경에 적응할 수 있습니다.

OpenThread 구글 발표는 스레드의 오픈 소스 구현입니다. 작은 코드 크기 및 메모리 풋 프린트에도 불구하고, OpenThread는에 정의 된 모든 기능을 지원하는 스레드 1.1.1 사양 .

OpenThread 네트워크 시뮬레이터 (OTNS)는 POSIX 플랫폼에서 시뮬레이션 OpenThread 노드를 실행하여 시뮬레이션 스레드 네트워크에 사용할 수 있습니다. OTNS는 시뮬레이션된 스레드 네트워크를 시각화하고 운영하기 위해 사용하기 쉬운 웹 인터페이스(OTNS-Web)를 제공합니다.

배울 내용

  • OTNS 및 해당 종속성 설치
  • OTNS용 OpenThread 빌드
  • OTNS-Web에서 노드 추가/이동/삭제 방법
  • OTNS-Web의 다른 유용한 기능을 사용하여 네트워크 시뮬레이션 작동
  • OpenThread의 단일 실패 지점 확인

이 코드랩은 OTNS-CLI 및 OTNS-Web에 중점을 둡니다. Python 스크립팅과 같은 OTNS의 다른 기능은 다루지 않습니다.

필요한 것

  • Linux x86_64 또는 Mac OS.
  • 힘내 .
  • 1.11+로 이동합니다 .
  • 웹 브라우저. OTNS-Web은 시뮬레이션을 표시하기 위해 웹 브라우저를 사용합니다.
  • 프라이머 스레드 . 이 Codelab에서 가르치는 내용을 이해하려면 Thread의 기본 개념을 알아야 합니다.

2. 설치

이동 설치

OTNS를 빌드하려면 Go 1.11+가 필요합니다.

  1. 에서 이동을 설치 https://golang.org/dl/
  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 .

설치

설치 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

와 OpenThread 구축 OTNS=1

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

당신은에서 OpenThread 실행 찾을 수 있습니다 output 디렉토리 :

리눅스

$ ls ~/src/openthread/output/simulation/bin
ot-cli-ftd        ot-cli-mtd        ot-ncp-ftd        ot-ncp-mtd        ot-rcp

맥 OS

$ 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이 활성화되지 않았을 가능성이 있습니다. 를 참조하십시오 https://superuser.com/a/836833 에서 WebGL을 사용하도록 설정하는 방법에.

다음 섹션에서는 통해 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의 네트워크 시각화 및 관리 도구입니다. 시뮬레이션된 스레드 네트워크의 노드, 메시지 및 링크에 대한 시각적 표현을 제공합니다. 의 다양한 요소 참고 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 . 클릭 New Router 의 버튼을 Action Bar . 당신은 노드가 바로 위에서 생성되는 볼 수 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

속도 제어 버튼

속도 제어 버튼 찾기 9329157c1bd12672.pngAction Bar . 버튼은 현재 시뮬레이션 속도를 표시하며 시뮬레이션 속도를 조정하고 시뮬레이션을 일시 중지/재개하는 데 사용할 수 있습니다.

시뮬레이션 속도 향상

클릭하여 시뮬레이션 속도를 높일 수 있습니다. 39b88331779277ad.png 속도까지 버튼에 도달 MAX : f5f460b2586d299b.png .

시뮬레이션 속도 저하

클릭하여 시뮬레이션 속도를 늦출 수 있습니다. 31cca8d5b52fa900.png 단추.

시뮬레이션 일시 중지

클릭 46cc2088c9aa7ab6.png 버튼을 눌러 실행 중일 때 시뮬레이션을 일시 중지합니다. 버튼은 다음으로 변경됩니다. ce25eda3496ffcd4.png .

시뮬레이션 재개

클릭 ce25eda3496ffcd4.png 버튼을 눌러 일시 중지된 시뮬레이션을 다시 시작합니다. 버튼이 다음으로 변경됩니다. 46cc2088c9aa7ab6.png .

에 속도를 시뮬레이션 설정 10X

시간을 절약하려면 다음을 사용하십시오.

OTNS-CLI 에 대한 시뮬레이션 속도를 조절하기

10X 그래서 우리는 훨씬 더 빠른 네트워크 토폴로지의 변화를 관찰 할 수있다.

> speed 10
Done

8. 라디오 켜기/끄기

이제 시뮬레이션은 2개의 라우터(육각형 모양)와 많은 자식을 포함해야 하며 10X 속도로 실행됩니다.

2 라우터의 현재 리더(빨간색 테두리)를 찾고 한 번 클릭하여 선택합니다.

8c6a2e191cdae0c7.png

라디오 끄기

클릭 7ca085f470491dd4.png 버튼을 눌러 리더 노드의 라디오를 끕니다.

a3bf58d9d125f95f.png

리더는 라디오가 꺼진 상태에서 메시지를 보내거나 받을 수 없습니다.

다른 라우터가 새 리더가 될 때까지 약 12초(시뮬레이션 시간은 120초) 동안 기다립니다.

e3d32f85c4a1b990.png

쓰레드 네트워크는 새로운 리더로 새로운 파티션을 형성함으로써 리더 실패로부터 자동으로 복구된다. 새 파티션에는 새 파티션 색상도 있습니다.

라디오 켜기

라디오가 꺼진 리더를 선택합니다. 클릭 2d9cecb8612b42aa.png 버튼을 Action Bar 무선 연결을 복원하려면 :

7370a7841861aa3a.png

리더는 무선 연결이 복원된 후 네트워크에 다시 연결해야 합니다.

9. 노드 이동

OTNS을 통해 쉽게 노드를 이동 할 수있게합니다 OTNS-CLI 또는 OTNS-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를 선택하고 7ff6afd565f4eafc.png 상의 버튼을 Action Bar 삭제 노드 5 :

d4079cceea0105f0.png

Node 1 지도자와가되어야 Node 7 은 모든 라우터에 도달 할 수 있기 때문에 분리해야한다.

시뮬레이션 지우기(모든 노드 삭제)

당신은을 통해 모든 노드를 삭제하여 시뮬레이션을 지울 수 OTNS-Web .

딸깍 하는 소리 89618191721e79a0.png 버튼을 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 및 해당 종속성을 설치하는 방법을 배웠습니다. 당신은 내장 OpenThread을 OTNS과 OpenThread 시뮬레이션 인스턴스와 OTNS 시뮬레이션을 시작했다. 당신은 모두를 통해 다양한 방법으로 시뮬레이션 조작하는 방법을 배운 OTNS-CLIOTNS-Web .

이제 OTNS가 무엇인지 그리고 OTNS를 사용하여 OpenThread 네트워크를 시뮬레이션하는 방법을 알게 되었습니다.

무엇 향후 계획?

이 코드랩 중 일부를 확인하십시오...

참조 문서