Thread & OTNS 란?
Thread는 IP 기반 저전력 무선 메시 네트워킹 프로토콜로, 안전한 장치 대 장치 및 장치 대 클라우드 통신을 가능하게합니다. 스레드 네트워크는 단일 실패 지점을 피하기 위해 토폴로지 변경에 적응할 수 있습니다.
Google에서 출시 한 OpenThread 는 Thread의 오픈 소스 구현입니다. 작은 코드 크기와 메모리 공간에도 불구하고 OpenThread는 Thread 1.1.1 사양에 정의 된 모든 기능을 지원합니다.
OpenThread Network Simulator (OTNS) 는 posix 플랫폼에서 시뮬레이션 된 OpenThread 노드를 실행하여 스레드 네트워크를 시뮬레이션하는 데 사용할 수 있습니다. OTNS는 시뮬레이션 된 스레드 네트워크를 시각화하고 운영하기 위해 사용하기 쉬운 웹 인터페이스 (OTNS-Web)를 제공합니다.
배울 것
- OTNS 및 해당 종속성 설치
- OTNS 용 OpenThread 빌드
- OTNS-Web에서 노드를 추가 / 이동 / 삭제하는 방법
- OTNS-Web의 다른 유용한 기능을 사용하여 네트워크 시뮬레이션을 운영하십시오.
- OpenThread의 단일 실패 지점이 없는지 확인
이 코드 랩은 OTNS-CLI 및 OTNS-Web에 중점을 둡니다. Python 스크립팅과 같은 OTNS의 다른 기능은 다루지 않습니다.
필요한 것
Go 설치
OTNS를 빌드하려면 Go 1.11 이상이 필요합니다.
- 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
가 제대로 설치되었는지 확인합시다
-
$PATH.
에서otns
실행 파일을 검색 할 수 있는지 확인하려면which otns
를 실행하십시오$PATH.
-
otns
명령을 찾을 수없는 경우$(go env GOPATH)/bin
을$PATH.
추가했는지 확인합니다$PATH.
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 실행 파일을 찾을 수 있습니다.
리눅스
$ 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를 실행할 시간입니다 ...
otns
실행 :
$ cd ~/src/openthread/output/simulation/bin $ otns > ← OTNS-CLI prompt
성공적으로 시작되면 OTNS는 CLI 콘솔 ( OTNS-CLI
)에 OTNS-CLI
네트워크 시각화 및 관리를위한 웹 브라우저 ( OTNS-Web
)를 시작합니다.
OTNS-Web의 빈 페이지 만 볼 수있는 경우 브라우저에서 WebGL이 활성화되지 않았을 가능성이 있습니다. WebGL을 활성화하는 방법 은 https://superuser.com/a/836833 을 참조하십시오 .
다음 섹션에서는 OTNS-CLI
및 OTNS-Web
통해 OTNS-CLI
시뮬레이션을 관리하는 방법을 배우게됩니다.
OTNS-CLI
OTNS-CLI
는 OTNS 시뮬레이션 관리를위한 CLI (Command Line Interface)를 제공합니다.
$ cd ~/src/openthread/output/simulation/bin $ otns > ← OTNS-CLI prompt
OTNS-CLI
통해 명령을 입력 할 수 있습니다. 전체 명령 목록은 OTNS CLI 참조 를 참조하십시오. 걱정하지 마세요.이 Codelab에서는 이러한 명령 중 몇 가지만 사용할 것입니다.
OTNS- 웹
OTNS-Web
은 OTNS의 네트워크 시각화 및 관리 도구입니다. 시뮬레이션 된 스레드 네트워크의 노드, 메시지 및 링크를 시각적으로 표현합니다. OTNS-Web
의 다양한 요소에 유의하십시오.
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 버튼을 클릭하여 다른 유형의 노드를 만듭니다. 기존 노드 근처의 위치로 드래그하여 해당 스레드 네트워크에 연결합니다.
이제 여러 노드를 포함하는 한 파티션의 스레드 네트워크를 작성했습니다. 다음 섹션에서는 시뮬레이션 속도를 조정하여 시뮬레이션을 더 빠르게 실행할 것입니다.
현재 시뮬레이션은 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
이제 시뮬레이션에는 2 개의 라우터 (육각형 모양)와 많은 하위 항목이 포함되어야하며 10 배 속도로 실행됩니다.
두 라우터의 현재 리더 (빨간색 테두리)를 찾고 한 번 클릭하여 선택합니다.
라디오 끄기
클릭 리더 노드의 라디오를 끄려면 액션 바의 버튼을 누르십시오.
리더는 라디오가 꺼진 상태에서 메시지를 보내거나받을 수 없습니다.
다른 라우터가 새로운 리더가 될 때까지 약 12 초 (시뮬레이션 시간 120 초)를 기다립니다.
Thread 네트워크는 새로운 Leader로 새로운 파티션을 형성하여 Leader 장애로부터 자동으로 복구합니다. 새 파티션에도 새 파티션 색상이 있습니다.
라디오 켜기
라디오가 꺼진 리더를 선택하십시오. 클릭 무선 연결을 복원하려면
Action Bar
버튼 :
리더는 무선 연결이 복원 된 후 네트워크에 다시 연결해야합니다.
OTNS를 사용하면 사용자가 OTNS-CLI
또는 OTNS-Web
통해 쉽게 노드를 이동할 수 있습니다.
OTNS-CLI
통해 노드 이동
노드 5를 새 위치로 이동합니다.
> move 5 600 300 Done
이제 노드 5는 다른 라우터와 거리가 멀기 때문에 서로 연결이 끊어지고 약 12 초 (시뮬레이션 시간 120 초) 후에 둘 다 자신의 파티션의 리더가됩니다.
OTNS-Web을 통해 노드 이동
드래그하여 노드 5를 원래 위치로 다시 이동합니다. 두 파티션은 다시 하나의 파티션으로 병합되어야합니다.
OTNS-CLI
통해 노드 삭제
노드 8 삭제 :
> del 8 Done
노드 8은 시뮬레이션에서 사라져야합니다.
OTNS-Web
통해 노드 삭제
노드 5를 선택하고 노드 5를 삭제하려면
Action Bar
버튼을 누르십시오.
Node 1
은 리더가되어야하고 Node 7
은 라우터에 도달 할 수 없으므로 분리되어야합니다.
시뮬레이션 지우기 (모든 노드 삭제)
OTNS-Web
통해 모든 노드를 삭제하여 시뮬레이션을 지울 수 있습니다.
딸깍 하는 소리
Action Bar.
버튼 Action Bar.
모든 노드가 한 번에 사라집니다.
계속하기 전에 ...
이 튜토리얼을 계속할 수 있도록 시뮬레이션에 노드를 직접 추가하십시오.
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 >
축하합니다. 첫 번째 OTNS 시뮬레이션을 성공적으로 실행했습니다!
OTNS와 그 종속성을 설치하는 방법을 배웠습니다. OTNS 용 OpenThread 를 빌드하고 OpenThread 시뮬레이션 인스턴스로 OTNS 시뮬레이션을 시작했습니다. OTNS-CLI
및 OTNS-Web
통해 다양한 방법으로 시뮬레이션을 조작하는 방법을 배웠습니다.
이제 OTNS가 무엇이며 OTNS를 사용하여 OpenThread 네트워크를 시뮬레이션하는 방법을 알게되었습니다.
무엇 향후 계획?
이 코드 랩 중 일부를 확인하세요 ...
- OpenThread로 스레드 네트워크 시뮬레이션
- Docker에서 OpenThread를 사용하여 스레드 네트워크 시뮬레이션
- nRF52840 보드 및 OpenThread로 스레드 네트워크 구축