1. 소개
스레드란 무엇인가요?
스레드는 기기 간 및 기기-클라우드 간 보안 통신을 지원하는 IP 기반 저전력 무선 메시 네트워킹 프로토콜입니다. 스레드 네트워크는 토폴로지 변경에 적응하여 단일 장애점을 방지할 수 있습니다.
OpenThread란 무엇인가요?
Google에서 출시한 OpenThread는 Thread®의 오픈소스 구현입니다.
OpenThread 보더 라우터란 무엇인가요?
Google에서 출시한 OpenThread Border Router (OTBR)는 스레드 보더 라우터의 오픈소스 구현입니다.
IPv6 멀티캐스트
스레드는 영역 로컬보다 범위가 큰 멀티캐스트 주소의 이종 네트워크 (스레드 및 Wi-Fi/이더넷 네트워크 세그먼트)에서 멀티캐스트를 지원하는 일련의 기능을 정의합니다.
스레드 테두리 라우터는 백본 라우터 (BBR) 데이터 세트를 등록하고 선택된 BBR 서비스는 멀티캐스트 인바운드/아웃바운드 전달을 담당하는 기본 백본 라우터 (PBBR)입니다.
스레드 기기는 주소가 영역 로컬보다 큰 경우 멀티캐스트 주소를 PBBR에 등록하는 CoAP 메시지를 전송합니다 (멀티캐스트 리스너 등록, MLR). PBBR은 외부 인터페이스에서 MLDv2를 사용하여 로컬 스레드 네트워크를 대신하여 수신해야 하는 IPv6 멀티캐스트 그룹에 관해 더 넓은 IPv6 LAN/WAN과 통신합니다. 또한 PBBR은 대상이 하나 이상의 스레드 기기에 의해 구독된 경우에만 멀티캐스트 트래픽을 스레드 네트워크로 전달합니다.
스레드 최소 엔드 기기의 경우 멀티캐스트 주소를 집계하고 MLR을 대신 실행하기 위해 상위에 의존하거나 상위가 스레드 1.1인 경우 자체적으로 등록할 수 있습니다.
자세한 내용은 스레드 사양을 참고하세요.
빌드할 항목
이 Codelab에서는 스레드 보더 라우터와 스레드 기기 두 개를 설정한 다음 스레드 기기와 Wi-Fi 기기에서 멀티캐스트 기능을 사용 설정하고 확인합니다.
학습할 내용
- IPv6 멀티캐스트를 지원하는 nRF52840 펌웨어를 빌드하는 방법
- 스레드 기기에서 IPv6 멀티캐스트 주소를 구독하는 방법
필요한 항목
- 스레드 RCP와 OpenThread CLI를 빌드하고 플래시하며 IPv6 멀티캐스트를 테스트하는 데 사용되는 Linux 워크스테이션
- 스레드 보더 라우터용 Raspberry Pi
- Nordic Semiconductor nRF52840 USB 동글 2개 (RCP용 1개, 스레드 엔드 기기용 2개)
2. OTBR 설정
OTBR을 설정하는 가장 빠른 방법은 OTBR 설정 가이드를 따르는 것입니다.
OTBR 설정이 완료되면 ot-ctl
를 사용하여 OTBR이 몇 초 내에 기본 백본 라우터가 되었는지 확인합니다.
> bbr state Primary Done > bbr BBR Primary: server16: 0xF800 seqno: 21 delay: 5 secs timeout: 3600 secs Done
3. 스레드 기기 빌드 및 플래시
멀티캐스트로 스레드 CLI 애플리케이션을 빌드하고 두 nRF52840 DK 보드를 플래시합니다.
nRF52840 DK 펌웨어 빌드
안내에 따라 프로젝트를 클론하고 nRF52840 펌웨어를 빌드합니다.
$ cd ~/src/ot-nrf528xx $ rm -rf build $ script/build nrf52840 USB_trans -DOT_MLR=ON
nRF52840 보드 및 OpenThread로 스레드 네트워크 빌드 Codelab을 작성된 대로 계속 진행합니다. CLI 이미지로 엔드 기기를 플래시한 후 두 번째 노드를 스레드 네트워크에 가입에 따라 스레드 기기를 스레드 네트워크에 추가합니다. 두 번째 스레드 최종 기기에 대해 반복합니다.
4. IPv6 멀티캐스트 주소 구독
nRF52840 최종 기기 1에서 ff05::abcd 구독:
> ipmaddr add ff05::abcd Done
ff05::abcd
이 성공적으로 구독되었는지 확인합니다.
> ipmaddr ff05:0:0:0:0:0:0:abcd <--- ff05::abcd subscribed ff33:40:fdde:ad00:beef:0:0:1 ff32:40:fdde:ad00:beef:0:0:1 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 구독:
노트북에서 멀티캐스트 주소를 구독하려면 Python 스크립트 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
를 실행하여 Wi-Fi 네트워크 인터페이스 (예: wlan0)에서 ff05::abcd
를 구독합니다.
$ sudo python3 subscribe6.py wlan0 ff05::abcd Subscribed ff05::abcd on interface wlan0. Press ENTER to quit.
멀티캐스트 구독이 있는 최종 네트워크 토폴로지는 아래와 같습니다.
이제 스레드 네트워크의 nRF52840 엔드 기기 1과 Wi-Fi 네트워크의 노트북 모두에서 IPv6 멀티캐스트 주소를 구독했으므로 다음 섹션에서 양방향 IPv6 멀티캐스트 연결 가능 여부를 확인합니다.
5. 인바운드 IPv6 멀티캐스트 확인
이제 Wi-Fi 네트워크에서 IPv6 멀티캐스트 주소 ff05::abcd
를 사용하여 스레드 네트워크의 nRF52840 엔드 기기 1과 노트북에 모두 연결할 수 있습니다.
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!) # If using MacOS, use this command. The interface is typically not "wlan0" for Mac. $ ping6 -h 5 -I wlan0 ff05::abcd
nRF52840 엔드 기기 1과 노트북이 모두 ff05::abcd
를 구독했으므로 OTBR이 두 기기에서 모두 핑 응답을 수신할 수 있습니다. 이는 OTBR이 Wi-Fi 네트워크에서 Thread 네트워크로 IPv6 핑 요청 멀티캐스트 패킷을 전달할 수 있음을 보여줍니다.
6. 아웃바운드 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 엔드 기기 2는 nRF52840 엔드 기기 1과 노트북 모두로부터 핑 응답을 수신할 수 있습니다. 이는 OTBR이 스레드 네트워크에서 Wi-Fi 네트워크로 IPv6 핑 응답 멀티캐스트 패키지를 전달할 수 있음을 보여줍니다.
7. 축하합니다
수고하셨습니다. 스레드 보더 라우터를 설정하고 양방향 IPv6 멀티캐스트를 확인했습니다.
OpenThread에 대한 자세한 내용은 openthread.io를 참고하세요.
참조 문서: