İş Parçacığı Sınır Yönlendirici - IPv6 Çoklu Yayın

1. Giriş

608c4c35050eb280.png

Thread nedir?

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

OpenThread nedir?

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

OpenThread sınır yönlendirici nedir?

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

IPv6 Çoklu Yayın

Thread, alan yerelinden daha geniş kapsamlı çoklu yayın adresleri için heterojen bir ağda (Thread ve Wi-Fi/Ethernet ağ segmentleri) çoklu yayını destekleyecek bir dizi özellik tanımlar.

Thread Border Router, Backbone Router (BBR) veri kümesini kaydeder ve seçilen BBR hizmeti, çoklu yayın gelen/giden yönlendirmesinden sorumlu olan birincil Backbone Router (PBBR) olur.

Bir Thread cihazı, adres alan yerelinden büyükse çoklu yayın adresini PBBR'ye kaydetmek için bir CoAP mesajı gönderir (kısaca Çoklu Yayın Dinleyici Kaydı, MLR). PBBR, yerel Thread ağı adına dinlemesi gereken IPv6 çoklu yayın grupları hakkında daha geniş IPv6 LAN/WAN ile iletişim kurmak için Harici Arayüzünde MLDv2'yi kullanır. PBBR, çoklu yayın trafiğini yalnızca hedefte en az bir Thread cihazı abone olmuşsa Thread ağına yönlendirir.

Thread Minimal End Devices, çoklu yayın adresini toplamak ve kendi adına MLR yapmak için üst cihazına bağlı olabilir veya üst cihazı Thread 1.1 ise kendisini kaydedebilir.

Daha fazla bilgi için lütfen Thread Spesifikasyonu'na bakın.

Ne oluşturacaksınız?

Bu codelab'de bir Thread sınır yönlendiricisi ve iki Thread cihazı kuracak, ardından Thread cihazlarında ve kablosuz cihazlarda çoklu yayın özelliklerini etkinleştirip doğrulayacaksınız.

Neler öğreneceksiniz?

  • IPv6 çoklu yayın desteğiyle nRF52840 donanım yazılımı oluşturma
  • Thread cihazlarda IPv6 çoklu yayın adreslerine abone olma

İhtiyacınız olanlar

  • Thread RCP, OpenThread CLI oluşturma ve yanıp sönme ve IPv6 çoklu yayını test etme için Linux iş istasyonu.
  • Thread sınır yönlendirici için Raspberry Pi.
  • 2 Nordic Semiconductor nRF52840 USB Dongle (bir tanesi RCP, iki tanesi Thread uç cihazları için).

2. OTBR'yi kurma

OTBR'yi ayarlamanın en hızlı yolu OTBR Kurulum Kılavuzu'nu takip etmektir.

OTBR kurulumu tamamlandıktan sonra, OTBR'nin birkaç saniye içinde birincil omurga yönlendiricisi olduğunu doğrulamak için ot-ctl'yi kullanın.

> bbr state
Primary
Done
> bbr
BBR Primary:
server16: 0xF800
seqno:    21
delay:    5 secs
timeout:  3600 secs
Done

3. Thread cihazları oluşturma ve flash etme

Çoklu yayın ile Thread CLI uygulamasını oluşturun ve iki nRF52840 DK kartını flashlayın.

nRF52840 DK donanım yazılımını oluşturma

Projeyi klonlama ve nRF52840 donanım yazılımını oluşturma talimatlarını uygulayın.

$ cd ~/src/ot-nrf528xx
$ rm -rf build
$ script/build nrf52840 USB_trans -DOT_MLR=ON

nRF52840 kartları ve OpenThread ile Thread ağı oluşturma codelab'ine yazıldığı şekilde devam edin. Uç cihaz, CLI görüntüsüyle güncellendikten sonra Thread cihazını Thread ağına eklemek için İkinci düğümü Thread ağına ekleme bölümündeki adımları uygulayın. İkinci Thread uç cihazı için de aynı işlemi tekrarlayın.

4. IPv6 çoklu yayın adresine abone olma

nRF52840 End Device 1'de ff05::abcd'ye abone olma:

> ipmaddr add ff05::abcd
Done

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

> 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

Dizüstü bilgisayarda ff05::abcd adresine abone olma:

Dizüstü bilgisayarda bir çoklu yayın adresine abone olmak için Python komut dosyası subscribe6.py gerekir.

Aşağıdaki kodu kopyalayıp 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) subscribe6.py komutunu çalıştırarak ff05::abcd aboneliğini başlatın:

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

Çoklu yayın aboneliklerinin bulunduğu nihai ağ topolojisi aşağıda gösterilmektedir:

b118448c98b2d583.png

Artık hem Thread ağındaki nRF52840 End Device 1'da hem de kablosuz ağdaki dizüstü bilgisayarda IPv6 çoklu yayın adresine abone olduğumuza göre, aşağıdaki bölümlerde çift yönlü IPv6 çoklu yayın erişilebilirliğini doğrulayacağız.

5. Gelen IPv6 Çok Noktaya Yayınını Doğrulama

Artık, Thread ağındaki nRF52840 End Device 1'e ve dizüstü bilgisayara, kablosuz ağdan IPv6 çoklu yayın adresi ff05::abcd kullanılarak erişilebilmelidir.

Kablosuz arayüz üzerinden OTBR'de ff05::abcd adresini ping'leyin:

$ 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

OTBR'nin hem nRF52840 End Device 1 hem de dizüstü bilgisayardan iki ping yanıtı alabildiğini görüyoruz. Bunun nedeni, her ikisinin de ff05::abcd'ya abone olmasıdır. Bu, OTBR'nin IPv6 Ping Request çoklu yayın paketlerini Kablosuz ağdan Thread ağına iletebileceğini gösterir.

6. Giden IPv6 Çok Noktaya Yayınını Doğrulama

nRF52840 End Device 2'de ff05::abcd adresine ping gönderin:

> 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 dizüstü bilgisayardan ping yanıtları alabilir. Bu, OTBR'nin Thread ağındaki IPv6 Ping Reply çoklu yayın paketlerini kablosuz ağa iletebileceğini gösterir.

7. Tebrikler

Tebrikler, Thread sınır yönlendiriciyi başarıyla kurdunuz ve çift yönlü IPv6 çoklu yayını doğruladınız.

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

Referans belgeleri: