스레드 경계 라우터-스레드 1.2 멀티 캐스트

1. 소개

608c4c35050eb280.png

쓰레드란?

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

오픈스레드란?

구글에 의해 발표 OpenThread는 Thread®의 오픈 소스 구현입니다.

OpenThread 경계 라우터란 무엇입니까?

OpenThread 국경 라우터 구글 발표 (OTBR)는 스레드 국경 라우터의 오픈 소스 구현입니다.

스레드 1.2 멀티캐스트

스레드 1.2는 영역 로컬보다 큰 범위의 멀티캐스트 주소에 대해 이기종 네트워크(스레드 및 Wi-Fi/이더넷 네트워크 세그먼트)에서 멀티캐스트를 지원하는 일련의 기능을 정의합니다.

스레드 1.2 보더 라우터는 백본 라우터(BBR) 데이터 세트를 등록하고 선택된 BBR 서비스는 멀티캐스트 인바운드/아웃바운드 전달을 담당하는 PBBR(기본 백본 라우터)입니다.

스레드 1.2 장치는 주소가 영역 로컬보다 큰 경우 PBBR(멀티캐스트 수신기 등록, 짧게 MLR)에 멀티캐스트 주소를 등록하기 위해 CoAP 메시지를 보냅니다. PBBR은 외부 인터페이스에서 MLDv2를 사용하여 로컬 스레드 네트워크를 대신하여 수신해야 하는 IPv6 멀티캐스트 그룹에 대해 더 넓은 IPv6 LAN/WAN과 통신합니다. 그리고 PBBR은 대상이 하나 이상의 스레드 장치에 가입되어 있는 경우에만 멀티캐스트 트래픽을 스레드 네트워크로 전달합니다.

스레드 1.2 최소 종단 장치의 경우 멀티캐스트 주소를 집계하고 대신 MLR을 수행하기 위해 상위에 의존하거나 상위가 스레드 1.1인 경우 스스로 등록할 수 있습니다.

자세한 내용은 영역 - 지역 범위보다 큰 1.2 사양 섹션 5.24 멀티 캐스트 포워딩 스레드를 참조하십시오.

무엇을 만들 것인가

이 코드랩에서는 스레드 경계 라우터와 두 개의 스레드 장치를 설정한 다음 스레드 장치 및 Wi-Fi 장치에서 멀티캐스트 기능을 활성화하고 확인합니다.

무엇을 배울 것인가

  • 스레드 1.2 멀티캐스트 기능으로 nRF52840 펌웨어를 빌드하는 방법.
  • 스레드 장치에서 IPv6 멀티캐스트 주소를 구독하는 방법.

필요한 것

  • Raspberry Pi 3/4 장치 및 최소 8GB 용량의 SD 카드.
  • 3 개 노르딕 반도체 nRF52840 DK의 보드.
  • 없는 와이파이 AP 의 IPv6 라우터 광고 경비대는 라우터에 사용 가능.
  • Python3이 설치된 Linux/macOS 노트북(Raspberry Pi도 작동).

2. OTBR 설정

을 따르지 양방향의 IPv6 연결 및 DNS 기반 서비스 검색 - 스레드 국경 라우터 라즈베리 파이에 스레드 국경 라우터를 설정하는 코드 랩을.

완료되면 Raspberry Pi는 작동하는 스레드 네트워크를 생성하고 Wi-Fi 네트워크에 연결해야 합니다.

OTBR은 몇 초 안에 기본 백본 라우터가 되어야 합니다.

$ sudo ot-ctl bbr state
Primary
Done
$ sudo ot-ctl bbr
BBR Primary:
server16: 0xD800
seqno:    23
delay:    1200 secs
timeout:  3600 secs
Done

3. 빌드 및 플래시 스레드 장치

멀티캐스트로 스레드 1.2 CLI 애플리케이션을 구축하고 2개의 nRF52840 DK 보드를 플래시합니다.

nRF52840 DK 펌웨어 빌드

지침에 따라 프로젝트를 복제하고 nRF52840 펌웨어를 빌드합니다.

$ mkdir -p ~/src
$ cd ~/src
$ git clone --recurse-submodules --depth 1 https://github.com/openthread/ot-nrf528xx.git
$ cd ot-nrf528xx/
$ script/build nrf52840 USB_trans -DOT_MLR=ON -DOT_THREAD_VERSION=1.2
$ arm-none-eabi-objcopy -O ihex build/bin/ot-cli-ftd ot-cli-ftd.hex

우리는에서 성공적으로 구축 HEX 펌웨어를 찾을 수 있습니다 ot-cli-ftd.hex .

플래시 nRF52840 DK 펌웨어

사용 nRF52840 DK 위에 펌웨어 플래시 nrfjprog 의 일부입니다 NRF 명령 행 도구를 .

$ nrfjprog -f nrf52 --chiperase --program ot-cli-ftd.hex --reset

4. 스레드 장치를 스레드 네트워크에 연결

OTBR은 이전 단계에서 스레드 네트워크를 생성했습니다. 이제 nRF52840 DK를 스레드 네트워크에 추가할 수 있습니다.

OTBR에서 원시 활성 데이터 세트 가져오기:

$ sudo ot-ctl dataset active -x
0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff

nRF52840 DK 보드에 연결:

$ screen /dev/ttyACM0 115200

nRF52840 DK에 대한 활성 데이터 세트를 구성합니다.

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

스레드 스택을 시작하고 몇 초 동안 기다렸다가 장치가 성공적으로 연결되었는지 확인합니다.

> ifconfig up
Done
> thread start
Done
> state
child

위의 단계를 반복하여 다른 nRF52840 DK 보드를 스레드 네트워크에 연결합니다.

이제 3개의 스레드 장치(OTBR 및 2개의 nRF52840 DK 보드)로 스레드 네트워크를 성공적으로 설정했습니다.

5. Wi-Fi 네트워크 설정

OTBR과 노트북에서 동일한 Wi-Fi AP에 연결되도록 Wi-Fi 네트워크를 설정합니다.

우리는 사용할 수 raspi-설정을 라즈베리 파이 OTBR에 설치 와이파이 SSID와 암호로.

최종 네트워크 토폴로지는 다음과 같습니다.

5d0f36fd69ebcc9a.png

6. IPv6 멀티캐스트 주소 구독

nRF52840 최종 장치 1에서 ff05::abcd 구독:

> ipmaddr add ff05::abcd
Done

확인 ff05::abcd 성공적으로 가입되어있다 :

> ipmaddr
ff33:40:fdde:ad00:beef:0:0:1
ff32:40:fdde:ad00:beef:0:0:1
ff05:0:0:0:0:0:0:abcd            <--- ff05::abcd subscribed
ff02:0:0:0:0:0:0:2
ff03:0:0:0:0:0:0:2
ff02:0:0:0:0:0:0:1
ff03:0:0:0:0:0:0:1
ff03:0:0:0:0:0:0:fc
Done

노트북에서 ff05::abcd 구독:

우리는 파이썬 스크립트가 필요 subscribe6.py 노트북에 멀티 캐스트 주소에 가입 할 수 있습니다.

아래의 코드를 복사로 저장 subscribe6.py :

import ctypes
import ctypes.util
import socket
import struct
import sys

libc = ctypes.CDLL(ctypes.util.find_library('c'))
ifname, group = sys.argv[1:]
addrinfo = socket.getaddrinfo(group, None)[0]
assert addrinfo[0] == socket.AF_INET6
s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)
group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])
interface_index = libc.if_nametoindex(ifname.encode('ascii'))
mreq = group_bin + struct.pack('@I', interface_index)
s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
print("Subscribed %s on interface %s." % (group, ifname))
input('Press ENTER to quit.')

실행 subscribe6.py 가입 할 ff05::abcd Wi-Fi 네트워크 인터페이스 (예 : wlan0) :

$ sudo python3 subscribe6.py wlan0 ff05::abcd
Subscribed ff05::abcd on interface wlan0.
Press ENTER to quit.

멀티캐스트 구독이 있는 최종 네트워크 토폴로지는 다음과 같습니다.

b118448c98b2d583.png

스레드 네트워크의 nRF52840 최종 장치 1과 Wi-Fi 네트워크의 랩톱 모두에서 IPv6 멀티캐스트 주소를 구독했으므로 다음 섹션에서 양방향 IPv6 멀티캐스트 연결 가능성을 확인합니다.

7. 인바운드 IPv6 멀티캐스트 확인

이제, 우리는 스레드 네트워크에서 모두 nRF52840 엔드 디바이스 (1) 및 IPv6 멀티 캐스트 주소를 사용하여 노트북에 도달 할 수 있어야한다 ff05::abcd Wi-Fi 네트워크에서입니다.

Wi-Fi 인터페이스를 통해 OTBR에서 ff05::abcd 핑:

$ ping -6 -b -t 5 -I wlan0 ff05::abcd
PING ff05::abcd(ff05::abcd) from 2401:fa00:41:801:83c1:a67:ae22:5346 wlan0: 56 data bytes
64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=1 ttl=64 time=57.4 ms
64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=1 ttl=64 time=84.9 ms (DUP!)
64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=2 ttl=64 time=54.8 ms
64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=2 ttl=64 time=319 ms (DUP!)
64 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=3 ttl=64 time=57.5 ms
64 bytes from 2401:fa00:41:801:8c09:1765:4ba8:48e8: icmp_seq=3 ttl=64 time=239 ms (DUP!)

OTBR 두 핑 모두 nRF52840 엔드 디바이스 (1)의 응답과 노트북 때문에 둘 유무 구독을받을 수 있음을 우리는 볼 수 있습니다 ff05::abcd . 이것은 OTBR이 Wi-Fi 네트워크에서 스레드 네트워크로 IPv6 Ping Request 멀티캐스트 패킷을 전달할 수 있음을 보여줍니다.

8. 아웃바운드 IPv6 멀티캐스트 확인

nRF52840 최종 장치 2에서 ff05::abcd를 핑:

$ ping ff05::abcd 100 10 1
108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=12 hlim=64 time=297ms
108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=12 hlim=63 time=432ms
108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=13 hlim=64 time=193ms
108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=13 hlim=63 time=306ms
108 bytes from fdb5:8d36:6af9:7669:e43b:8e1b:6f2a:b8fa: icmp_seq=14 hlim=64 time=230ms
108 bytes from 2401:fa00:41:801:64cb:6305:7c3a:d704: icmp_seq=14 hlim=63 time=279ms

nRF52840 End Device 2는 nRF52840 End Device 1과 노트북 모두에서 ping 응답을 받을 수 있습니다. 이것은 OTBR이 스레드 네트워크에서 Wi-Fi 네트워크로 IPv6 Ping Reply 멀티캐스트 패키지를 전달할 수 있음을 보여줍니다.

9. 축하합니다

축하합니다. 스레드 경계 라우터를 성공적으로 설정하고 양방향 IPv6 멀티캐스트를 확인했습니다!

OpenThread, 방문에 대한 자세한 내용은 openthread.io .

참조 문서: