Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

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

1. 소개

5abd22afa2f2ee9a.png

스레드 및 OTNS란?

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

Google에서 출시한 OpenThread는 Thread의 오픈소스 구현입니다. OpenThread는 작은 코드 크기와 메모리 공간에도 불구하고 스레드 사양에 정의된 모든 기능을 지원합니다.

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

실습 내용

  • OTNS 및 종속 항목 설치
  • OTNS용 OpenThread 빌드
  • OTNS-Web에서 노드 추가/이동/삭제 방법
  • OTNS-Web의 기타 유용한 기능을 사용하여 네트워크 시뮬레이션 운영
  • OpenThread의 no-single-point-of-Failure 확인

이 Codelab에서는 OTNS-CLI 및 OTNS-Web에 중점을 둡니다. Python 스크립팅과 같은 OTNS의 기타 기능은 다루지 않습니다.

준비물

  • Linux x86_64 또는 Mac OS
  • Git로 이동합니다.
  • Go 1.11+.
  • 웹브라우저 OTNS-Web은 웹브라우저를 사용하여 시뮬레이션을 표시합니다.
  • 스레드 기본 지침서. 이 Codelab에서 학습하는 내용을 이해하려면 스레드의 기본 개념을 알아야 합니다.

2 설치

Go 설치

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

  1. https://golang.org/dl/에서 Go를 설치합니다.
  2. $PATH$(go env GOPATH)/bin (일반적으로 $HOME/go/bin)을 추가합니다.
$ 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 앱이 제대로 설치되어 있는지 확인하겠습니다.

  1. which otns를 실행하여 $PATH.에서 otns 실행 파일을 검색할 수 있는지 확인합니다.
  2. 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

OpenThread 실행 파일은 output 디렉터리에서 찾을 수 있습니다.

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).

a0e05178d66929b1.png

OTNS-Web의 빈 페이지만 표시되면 브라우저에 WebGL이 사용 설정되지 않은 것일 수 있습니다. WebGL 사용 설정 방법은https://superuser.com/a/836833 페이지를 참고하세요.

다음 섹션에서는 OTNS-CLIOTNS-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 참조를 확인하세요. 이 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를 통해 노드를 추가할 수도 있습니다. Action BarNew Router 버튼을 클릭합니다. 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를 통해 속도를 조정합니다.

속도 제어 버튼

Action Bar에서 속도 제어 버튼 9329157c1bd12672.png을 찾습니다. 버튼은 현재 시뮬레이션 속도를 보여주며, 시뮬레이션 속도를 조정하고 시뮬레이션을 일시중지/재개하는 데 사용할 수 있습니다.

시뮬레이션 시간 단축

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

시뮬레이션 종료

31cca8d5b52fa900.png 버튼을 클릭하여 시뮬레이션 속도를 줄일 수 있습니다.

시뮬레이션 일시중지

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

시뮬레이션 재개

시뮬레이션이 일시중지되었을 때 ce25eda3496ffcd4.png 버튼을 클릭하여 시뮬레이션을 재개합니다. 버튼이 다시 46cc2088c9aa7ab6.png(으)로 변경됩니다.

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

시간을 절약하려면

OTNS-CLI 시뮬레이션 속도를

10X 네트워크의 토폴로지 변경사항을 훨씬 빠르게 관찰할 수 있습니다.

> speed 10
Done

8 라디오 켜기/끄기

이제 시뮬레이션에는 2개의 라우터 (육각형)와 여러 하위 요소가 포함되며 10배 속도로 실행됩니다.

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

8c6a2e191cdae0c7.png

무선 끄기

작업 모음의 7ca085f470491dd4.png 버튼을 클릭하여 리더 노드의 라디오를 사용 중지합니다.

a3bf58d9d125f95f.png

리더는 라디오가 사용 중지된 상태에서 메시지를 주고받을 수 없습니다.

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

e3d32f85c4a1b990.png

스레드 네트워크는 새로운 리더로 새 파티션을 형성하여 리더 오류에서 자동으로 복구됩니다. 또한 새 파티션에도 새 파티션 색상이 적용됩니다.

무선 켜기

라디오가 사용 중지된 리더를 선택합니다. Action Bar에서 2d9cecb8612b42aa.png 버튼을 클릭하여 라디오 연결을 복원합니다.

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를 선택하고 Action Bar에서 7ff6afd565f4eafc.png 버튼을 클릭하여 노드 5를 삭제합니다.

d4079cceea0105f0.png

Node 1은 리더가 되어야 하고 Node 7은 라우터에 연결할 수 없으므로 분리되어야 합니다.

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

OTNS-Web를 통해 모든 노드를 삭제하여 시뮬레이션을 삭제할 수 있습니다.

Action Bar.에서 89618191721e79a0.png 버튼을 클릭합니다. 모든 노드가 한 번에 사라집니다.

계속하기 전에...

이 가이드를 계속 진행할 수 있도록 일부 노드를 시뮬레이션에 직접 추가하세요.

1일 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-CLIOTNS-Web를 통해 다양한 방법으로 시뮬레이션을 조작하는 방법을 알아보았습니다.

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

다음 단계

다음 Codelab을 확인하세요.

참조 문서