Thread Border Router - Thread 1.2 Çok Noktaya Yayın

1. Giriş

608c4c35050eb280.png

İplik nedir?

Thread, cihazdan cihaza ve cihazdan buluta güvenli iletişim sağlayan IP tabanlı, düşük güçlü bir kablosuz ağ protokolüdür. İş parçacığı ağları, tek nokta hatalarını önlemek için topoloji değişikliklerine uyum sağlayabilir.

OpenThread nedir?

Google tarafından yayımlanan OpenThread Thread® bir açık kaynak uygulamasıdır.

OpenThread Sınır Yönlendiricisi nedir?

OpenThread Sınır Yönlendirici Google tarafından yayımlanan (OTBR) Konu Sınır Yönlendirici bir açık kaynak uygulamasıdır.

Konu 1.2 Çok Noktaya Yayın

Thread 1.2, kapsama alanı yerelden daha büyük olan çok noktaya yayın adresleri için heterojen bir ağ (İş parçacığı ve Wi-Fi/Ethernet Ağı segmentleri) genelinde çok noktaya yayını desteklemek için bir dizi özelliği tanımlar.

Bir Thread 1.2 Sınır Yönlendirici, Omurga Yönlendirici (BBR) Veri Kümesini kaydeder ve seçilen BBR hizmeti, çok noktaya yayın gelen/giden yönlendirmesinden sorumlu olan Birincil Omurga Yönlendiricisidir (PBBR).

Bir Thread 1.2 Aygıtı, adres yerel bölgeden daha büyükse, çok noktaya yayın adresini PBBR'ye (Çoklu Yayın Dinleyici Kaydı, kısaca MLR) kaydetmek için bir CoAP mesajı gönderir. PBBR, yerel İş Parçacığı Ağı adına dinlemesi gereken IPv6 çok noktaya yayın grupları hakkında daha geniş IPv6 LAN/WAN ile iletişim kurmak için Harici Arabiriminde MLDv2'yi kullanır. Ve PBBR, çok noktaya yayın trafiğini yalnızca, hedef en az bir Thread cihazı tarafından aboneyse, Thread Network'e iletir.

Thread 1.2 Minimal Son Cihazlar için, çok noktaya yayın adresini toplamak ve onlar adına MLR yapmak için ebeveynlerine bağlı olabilir veya üst öğeleri Thread 1.1'deyse kendilerini kaydettirebilirler.

Daha fazla ayrıntı için Realm-Yerel Kapsam daha büyük için 1.2 Şartname Bölüm 5.24 Çoklu Yayın Yönlendirme Konu bakınız.

ne inşa edeceksin

Bu kod laboratuvarında, bir Thread Border Router ve iki Thread cihazı kuracak, ardından Thread cihazlarında ve Wi-Fi cihazlarında Multicast özelliklerini etkinleştirecek ve doğrulayacaksınız.

Ne öğreneceksin

  • Thread 1.2 Çok Noktaya Yayın özellikleriyle nRF52840 ürün yazılımı nasıl oluşturulur.
  • Thread cihazlarında IPv6 çok noktaya yayın adreslerine nasıl abone olunur.

Neye ihtiyacın olacak

  • Bir Raspberry Pi 3/4 cihazı ve en az 8 GB kapasiteli bir SD kart.
  • 3 Nordic Semiconductor nRF52840 DK panoları.
  • Olmayan bir Wi-Fi AP IPv6 Yönlendirici Bildirisi Guard yönlendirici etkinleştirilmiş.
  • Python3 yüklü Linux/macOS Dizüstü Bilgisayar (Raspberry Pi de çalışır).

2. OTBR'yi kurun

Takip Çift Yönlü IPv6 Bağlantı ve DNS Tabanlı Hizmet Bulma - Konu Sınır Yönlendirici Ahududu Pi üzerinde Konu Sınır Yönlendirici kurmak codelab.

Tamamlandığında, Raspberry Pi çalışan bir Thread ağı oluşturmuş ve bir Wi-Fi ağına bağlanmış olmalıdır.

OTBR, saniyeler içinde Birincil Omurga Yönlendiricisi haline gelmelidir.

$ 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. Build ve Flash Thread cihazları

Çok Noktaya Yayın ile Thread 1.2 CLI uygulamasını oluşturun ve iki nRF52840 DK kartını flaşlayın.

nRF52840 DK üretici yazılımı oluşturun

Projeyi klonlamak ve nRF52840 ürün yazılımı oluşturmak için talimatları izleyin.

$ 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

Biz de başarıyla inşa HEX firmware bulabilirsiniz ot-cli-ftd.hex .

Flash nRF52840 DK üretici yazılımı

Kullanarak nRF52840 DK üzerine firmware Flaş nrfjprog parçasıdır, NRF Komut Satırı Araçları .

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

4. Thread cihazlarını Thread ağına bağlayın

OTBR, önceki adımlarda bir Thread ağı oluşturmuştur. Artık nRF52840 DK'leri Thread ağına ekleyebiliriz:

OTBR'den ham Aktif Veri Kümesini alın:

$ sudo ot-ctl dataset active -x
0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff

Bir nRF52840 DK kartına bağlanın:

$ screen /dev/ttyACM0 115200

nRF52840 DK için Etkin Veri Kümesini yapılandırın:

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

Thread yığınını başlatın ve birkaç saniye bekleyin ve cihazın başarıyla eklendiğini doğrulayın:

> ifconfig up
Done
> thread start
Done
> state
child

Diğer nRF52840 DK kartını Thread ağına bağlamak için yukarıdaki adımları tekrarlayın.

Şimdi 3 Thread cihazı ile Thread ağını başarıyla kurduk: OTBR ve iki nRF52840 DK kartı.

5. Wi-Fi Ağı Kurulumu

OTBR ve Dizüstü bilgisayarda Wi-Fi ağını aynı Wi-Fi AP'ye bağlı olacak şekilde kurun.

Biz kullanabilirsiniz Raspi-config Ahududu Pi OTBR üzerinde kurulum Kablosuz SSID ve parolaya.

Son ağ topolojisi aşağıda gösterilmiştir:

5d0f36fd69ebcc9a.png

6. IPv6 çok noktaya yayın adresine abone olun

nRF52840 Uç Cihaz 1'de ff05::abcd'ye abone olun:

> ipmaddr add ff05::abcd
Done

Doğrulama ff05::abcd başarıyla abone olduğu:

> 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

Dizüstü bilgisayarda ff05::abcd'ye abone olun:

Bir Python komut ihtiyaç subscribe6.py Laptop bir noktaya yayın adresine abone olmak.

Aşağıdaki kodu kopyalayıp olarak kaydedin 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.')

Run subscribe6.py abone olmak ff05::abcd Kablosuz ağ arayüzünde (örneğin wlan0):

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

Çok noktaya yayın abonelikleriyle son ağ topolojisi aşağıda gösterilmiştir:

b118448c98b2d583.png

IPv6 çok noktaya yayın adresine hem Thread ağındaki nRF52840 Son Aygıt 1'e hem de Wi-Fi ağındaki Dizüstü Bilgisayara abone olduğumuza göre, aşağıdaki bölümlerde çift yönlü IPv6 çok noktaya yayın erişilebilirliğini doğrulayacağız.

7. Gelen IPv6 Çok Noktaya Yayını Doğrulayın

Şimdi, Konu ağında hem nRF52840 sonu Cihazı 1 ve IPv6 çok noktaya yayın adresi kullanarak Dizüstü ulaşmak mümkün olmalıdır ff05::abcd Wi-Fi ağından.

Wi-Fi arabirimi aracılığıyla OTBR'de ff05::abcd'ye Ping:

$ 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 iki ping hem nRF52840 sonu Cihazı 1 den cevap ve Dizüstü çünkü ikisine de sahip abone için alabilmesini görebiliyoruz ff05::abcd . Bu, OTBR'nin IPv6 Ping İsteği çok noktaya yayın paketlerini Wi-Fi ağından Thread ağına iletebileceğini gösterir.

8. Giden IPv6 Çok Noktaya Yayını Doğrulayın

nRF52840 Uç Cihaz 2'de ff05::abcd'ye Ping:

$ 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 Uç Aygıt 2, hem nRF52840 Uç Aygıt 1'den hem de Dizüstü Bilgisayardan ping yanıtları alabilir. Bu, OTBR'nin IPv6 Ping Yanıtı çok noktaya yayın paketlerini Thread ağından Wi-Fi ağına iletebileceğini gösterir.

9. Tebrikler

Tebrikler, bir Thread Border Router'ı başarıyla kurdunuz ve çift yönlü IPv6 çoklu yayınını doğruladınız!

OpenThread ziyaret hakkında daha fazlası için openthread.io .

Referans dokümanlar: