Google is committed to advancing racial equity for Black communities. See how.

İş Parçacığı Sınır Yönlendirici - İş Parçacığı 1.2 Çok Noktaya Yayın

608c4c35050eb280.png

Thread 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 arızalarını önlemek için topoloji değişikliklerine uyum sağlayabilir.

OpenThread nedir?

Google tarafından yayınlanan OpenThread , Thread®'ın açık kaynaklı bir uygulamasıdır.

OpenThread Sınır Yönlendiricisi nedir?

Google tarafından yayınlanan OpenThread Border Router (OTBR), Thread Border Router'ın açık kaynaklı bir uygulamasıdır.

Konu 1.2 Çok Noktaya Yayın

İş parçacığı 1.2, kapsamı yerel bölgeden daha büyük olan çok noktaya yayın adresleri için heterojen bir ağda çok noktaya yayını (İş Parçacığı ve Wi-Fi / Ethernet Ağı segmentleri) desteklemek için bir dizi özellik tanımlar.

Bir İş Parçacığı 1.2 Sınır Yönlendiricisi, Omurga Yönlendiricisi (BBR) Veri Kümesini kaydeder ve seçilen BBR hizmeti, çok noktaya yayın gelen / ileriye giden yollardan sorumlu olan Birincil Omurga Yönlendiricisidir (PBBR).

Bir İş Parçacığı 1.2 Cihazı, adres yerel bölge değerinden daha büyükse, çoklu yayın adresini PBBR'ye (Çok Noktaya 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 Arayüzünde MLDv2 kullanır. Ve PBBR, hedefin en az bir İş Parçacığı cihazı tarafından abone olması durumunda yalnızca çok noktaya yayın trafiğini İş Parçacığı Ağına iletir.

Thread 1.2 Asgari Son Cihazlar için, çok noktaya yayın adresini toplamak ve kendi adına MLR yapmak için ebeveynlerine güvenebilirler veya ebeveynleri Thread 1.1 ise kendilerini kaydettirebilirler.

Daha fazla ayrıntı için lütfen İş Parçacığı 1.2 Spesifikasyonu Bölüm 5.24 Bölge-Yerel Kapsamdan daha büyük Çok Noktaya Yayın İletme'ye bakın .

Ne inşa edeceksin

Bu kod laboratuvarında, bir İş Parçacığı Sınır Yönlendiricisi ve iki İş Parçacığı aygıtı kuracak, ardından İş Parçacığı aygıtlarında ve Wi-Fi aygıtlarında Çoklu Yayın özelliklerini etkinleştirecek ve doğrulayacaksınız.

Ne öğreneceksin

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

Neye ihtiyacın olacak

Ahududu Pi üzerinde bir İş Parçacığı Sınır Yönlendiricisi kurmak için İş Parçacığı Sınır Yönlendiricisi - Çift Yönlü IPv6 Bağlantısı ve DNS Tabanlı Hizmet Bulma kod laboratuvarını izleyin.

Tamamlandığında, Raspberry Pi çalışan bir İş Parçacığı ağı oluşturmalı ve bir Wi-Fi ağına bağlı 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

Thread 1.2 CLI uygulamasını Multicast ile oluşturun ve iki nRF52840 DK kartını flaşlayın.

NRF52840 DK ürün 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 UART_trans -DOT_MLR=ON -DOT_THREAD_VERSION=1.2
$ arm-none-eabi-objcopy -O ihex build/bin/ot-cli-ftd ot-cli-ftd.hex

Başarıyla oluşturulmuş HEX aygıt yazılımını ot-cli-ftd.hex .

Flash nRF52840 DK üretici yazılımı

Donanım yazılımını, nRF Komut Satırı Araçlarının bir parçası olan nrfjprog kullanarak nRF52840 DK üzerine yükleyin.

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

OTBR, önceki adımlarda bir İş Parçacığı ağı oluşturmuştur. Şimdi 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 panosuna bağlayın:

$ screen /dev/ttyACM0 115200

NRF52840 DK için Etkin Veri Kümesini Yapılandırın:

> dataset set active 0e080000000000000000000300000b35060004001fffc00208dead00beef00cafe0708fddead00beef00000510e50d3d0931b3430a59c261c684585a07030a4f70656e54687265616401022715041021cf5e5f1d80d2258d5cfd43416525e90c0302a0ff
Done

İş parçacığı yığınını başlatın ve birkaç saniye bekleyin ve aygıtın başarıyla takıldığını 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 Thread ağını 3 Thread cihazıyla başarıyla kurduk: OTBR ve iki nRF52840 DK kartı.

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

Raspberry Pi OTBR'de Wi-Fi SSID ve parolasını ayarlamak için raspi-config kullanabiliriz.

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

5d0f36fd69ebcc9a.png

NRF52840 Son Cihaz 1'de ff05 :: abcd'ye abone olun:

> ipmaddr add ff05::abcd
Done

ff05::abcd başarıyla abone olduğunu doğrulayın:

> 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:

Dizüstü bilgisayarda çok noktaya yayın adresine subscribe6.py için bir Python betiği subscribe6.py ihtiyacımız var.

Aşağıdaki kodu kopyalayın ve subscribe6.py olarak kaydedin:

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

Wi-Fi ağ arayüzünde ff05::abcd subscribe6.py için subscribe6.py'yi çalıştırın (örn. Wlan0):

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

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

b118448c98b2d583.png

IPv6 multicast adresine hem Thread ağındaki nRF52840 End Device 1 hem de Wi-Fi ağındaki Laptop'ta abone olduğumuza göre, aşağıdaki bölümlerde iki yönlü IPv6 çok noktaya yayın erişilebilirliğini doğrulayacağız.

Şimdi, Wi-Fi ağından IPv6 multicast adresi ff05::abcd kullanarak hem Thread ağındaki nRF52840 End Device 1'e hem de Laptop'a ulaşabilmeliyiz.

Wi-Fi arayüzü aracılığıyla OTBR'de ff05 :: abcd'ye ping atın:

$ 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'nin hem nRF52840 End Device 1 hem de Laptop'tan iki ping yanıtı alabildiğini görebiliriz çünkü ikisi de ff05::abcd abone olmuştur. Bu, OTBR'nin IPv6 Ping İsteği çoklu yayın paketlerini Wi-Fi ağından İş Parçacığı ağına iletebileceğini gösterir.

NRF52840 Uç Aygıt 2'de ff05 :: abcd 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 End Device 2, hem nRF52840 End Device 1 hem de Laptop'tan ping yanıtları alabilir. Bu, OTBR'nin IPv6 Ping Yanıtı çoklu yayın paketlerini İş Parçacığı ağından Wi-Fi ağına iletebileceğini gösterir.

Tebrikler, başarıyla bir İş Parçacığı Sınır Yönlendiricisi kurdunuz ve çift yönlü IPv6 çok noktaya yayınını doğruladınız!

OpenThread hakkında daha fazla bilgi için openthread.io adresini ziyaret edin .

Referans dokümanlar: