İleti Dizisi Kenarlık Yönlendirici - İleti Dizisi 1.2 Çoklu Yayın

1. Giriş

608c4c35050eb280

İleti Dizisi nedir?

Thread, IP'ye dayalı ve düşük güçle çalışan kablosuz örgü ağ iletişimi protokolüdür. Bu şekilde, cihazlar arası ve cihazlar arası güvenli iletişimlere olanak tanır. İş parçacığı ağları, tek nokta hatalarından kaçınmak için topoloji değişikliklerine uyum sağlayabilir.

OpenThread nedir?

OpenThread release Google, Thread®'nin açık kaynaklı bir uygulamasıdır.

OpenThread Kenarlık Yönlendirici nedir?

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

Thread 1.2 Çoklu Yayın

İş parçacığı 1.2, kapsamı yerelden daha büyük olan çok noktaya yayın adresleri için heterojen bir ağda (İleti dizisi ve Kablosuz/Ethernet Ağ segmentleri) çoklu yayını desteklemek için bir dizi özellik tanımlar.

İş Parçacığı 1.2 Kenarlık Yönlendiricisi, Omurga Yönlendiricisi (BBR) Veri Kümesini kaydeder. Seçilen BBR hizmeti, çok noktaya yayın yönlendirme/giden işlemlerinden sorumlu Birincil Omurga Yönlendiricisi'dir (PBBR).

İş parçacığı 1.2 Cihaz, adresin erişim alanı yerelden büyükse çoklu yayın adresini PBBR'ye (kısaca Multicast Dinleyici Kaydı, kısaca MLR) kaydetmek için bir CoAP iletisi gönderir. PBBR, yerel İş Parçacık 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. PBBR, yalnızca hedef yayına en az bir İş Parçacı cihazı tarafından abone olunduğunda çoklu yayın trafiğini İş Parçacısı Ağı'na yönlendirir.

İş Parçacığı 1.2 Minimal Son Cihazlarda, üst ağın çok noktaya yayın adresini toplayıp adına MLR işlemi yapmasına veya ebeveyni İş Parçacığı 1.1 ise kendini kaydettirmesine bağlı olabilir.

Daha ayrıntılı bilgi için İletim 1.2 Spesifikasyon Bölüm 5.24, Erişim Alanından Daha Fazla Erişim için Çoklu Yayın Yönlendirme bölümüne bakın.

Neyi geliştireceksiniz?

Bu codelab'de İş Parçacığı Kenarlık Yönlendiricisi ve iki İş Parçacığı cihazı kuracak, İş Parçacığı cihazlarında ve kablosuz cihazlarda Çoklu Yayın özelliklerini etkinleştirecek ve doğrulayacaksınız.

Neler öğreneceksiniz?

  • Thread 1.2 Multicast özellikleriyle nRF52840 donanım yazılımı oluşturma.
  • İş parçacığı cihazlarında IPv6 çoklu yayın adreslerine abone olma.

İhtiyacınız olanlar

  • Raspberry Pi 3/4 cihaz ve en az 8 GB kapasitesi olan bir SD kart.
  • 3 Nordic Semiconductor nRF52840 DK kartları.
  • Yönlendiricide IPv6 Yönlendirici Reklam Koruyucusu etkin olmayan bir Kablosuz Erişim Noktası.
  • Linux/macOS Laptop (Raspberry Pi de çalışır), Python3 yüklenmiştir.

2. OTBR'yi ayarla

Raspberry'de iş parçacığı kenarlığı yönlendiricisi ayarlamak içinİleti dizisi sınır yönlendiricisi - Çift yönlü IPv6 bağlantısı ve DNS tabanlı hizmet keşfi kod laboratuvarını uygulayın Pi

Tamamlandığında Raspberry Pi, çalışan bir İş Parçacısı ağı oluşturmuş ve Kablosuz ağa bağlı olmalıdır.

OTBR, saniyeler içinde Birincil Omurga Yönlendiricisi olmalıdır.

$ 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. Derleme ve Flash İş Parçacıkları cihazları

Çoklu Yayın ile Thread 1.2 CLI uygulamasını oluşturun ve iki nRF52840 DK kartını çıkarın.

nRF52840 DK donanım yazılımı derleme

Projeyi klonlamak ve nRF52840 donanım yazılımını derlemek için talimatları uygulayın.

$ 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

Başarıyla derlenen HEX donanım yazılımını ot-cli-ftd.hex adresinde bulabilirsiniz.

Flash nRF52840 DK donanım yazılımı

nRF Komut Satırı Araçlarının bir parçası olan nrfjprog ürününü kullanarak donanım yazılımını nRF52840 DK'ye flash.

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

4. İş parçacığı cihazlarını İş Parçası ağına ekle

OTBR, önceki adımlarda bir İş Parçacık ağı oluşturdu. Artık nRF52840 DK'lerini İş Parçacık ağına ekleyebiliriz:

OTBR'dan ham Active Dataset 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

İş Parçacığı yığınını başlatın ve birkaç saniye bekleyip cihazın başarıyla eklendiğini doğrulayın:

> ifconfig up
Done
> thread start
Done
> state
child

Diğer nRF52840 DK kartını İş Parçası ağına eklemek için yukarıdaki adımları tekrarlayın.

3 iş parçacığı cihaza sahip OTBR ve iki nRF52840 DK kartı kullanarak İş Parçacığı ağını başarıyla kurduk.

5. Kablosuz Ağ Kur

OTBR ve Laptop'ta aynı Kablosuz AP'ye bağlanmaları için Kablosuz ağı kurun.

Raspberry Pi OTBR'de kablosuz SSID'sini ve parolasını ayarlamak için raspi-config öğesini kullanabiliriz.

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

5d0f36fd69ebcc9a.png

6. IPv6 çoklu yayın adresine abone olma

nRF52840 Son Cihaz 1'de ff05::abcd abonesi olma:

> ipmaddr add ff05::abcd
Done

ff05::abcd alanının 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 abonesi olma:

Dizüstü bilgisayarda çoklu yayın adresine abone olabilmek için subscribe6.py Python komut dosyasına 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.')

Kablosuz ağ arayüzünde (ör. wlan0) ff05::abcd kanalına abone olmak için subscribe6.py komutunu çalıştırın:

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

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

b118448c98b2d583.png

Artık hem İş Parçası ağındaki nRF52840 Son Cihaz 1'de hem de kablosuz ağdaki Dizüstü bilgisayarda IPv6 çok noktaya yayın adresine abone olduğumuza göre, sonraki bölümlerde iki yönlü IPv6 çok noktaya yayın erişimini doğrulayacağız.

7. Gelen IPv6 Çoklu Yayınını Doğrulama

Artık, IPv6 çoklu yayın adresini kullanarak hem Thread ağında nRF52840 End Device 1'e hem de Dizüstü bilgisayara ulaşabilmemiz gerekir.ff05::abcd Kablosuz ağdan.

Kablosuz ağ üzerinden OTBR üzerinde ff05::abcd komutunu pingleyin:

$ 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, nRF52840 Bitiş Cihazı 1 ve Dizüstü Bilgisayarlardan ff05::abcd ürününe abone olduğu için iki ping yanıtı alabileceğini görüyoruz. Bu, OTBR'nin IPv6 Ping Request çoklu yayın paketlerini kablosuz ağdan İş Parçalı ağa yönlendirebildiğini gösterir.

8. Giden IPv6 Çoklu Yayınını Doğrulama

nRF52840 Bitiş Cihazı 2'de ping 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 Uç Cihaz 2, hem nRF52840 Uç Cihaz 1 hem de Dizüstü bilgisayardan ping yanıtları alabilir. Bu, OTBR'nin IPv6 Ping Response çoklu yayın paketlerini İş Parçacığından kablosuz ağa yönlendirebildiğini gösterir.

9. Tebrikler

Tebrikler, İş Parçacığı Sınır Yönlendiricisini başarıyla ayarladınız ve iki yönlü IPv6 çoklu yayınını doğruladınız!

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

Referans belgeleri: