Маршрутизатор границы потока — многоадресная передача IPv6

1. Введение

608c4c35050eb280.png

Что такое поток?

Thread — это беспроводной сетевой протокол с низким энергопотреблением на основе IP, который обеспечивает безопасную связь между устройствами и между устройствами и облаком. Сети Thread могут адаптироваться к изменениям топологии, чтобы избежать сбоев в одной точке.

Что такое OpenThread?

OpenThread, выпущенный Google, представляет собой реализацию Thread® с открытым исходным кодом.

Что такое пограничный маршрутизатор OpenThread?

OpenThread Border Router (OTBR), выпущенный Google, представляет собой реализацию Thread Border Router с открытым исходным кодом.

Многоадресная рассылка IPv6

Thread определяет ряд функций для поддержки многоадресной передачи в гетерогенной сети (сегменты Thread и сети Wi-Fi/Ethernet) для многоадресных адресов с областью действия, превышающей локальную область.

Пограничный маршрутизатор потока регистрирует свой набор данных магистрального маршрутизатора (BBR), а выбранная служба BBR является основным магистральным маршрутизатором (PBBR), который отвечает за многоадресную входящую/исходящую пересылку.

Устройство Thread отправляет сообщение CoAP для регистрации адреса многоадресной рассылки в PBBR (регистрация прослушивателя многоадресной рассылки, сокращенно MLR), если адрес больше локальной области. PBBR использует MLDv2 на своем внешнем интерфейсе для связи с более широкой сетью IPv6 LAN/WAN о группах многоадресной рассылки IPv6, которые ему необходимо прослушивать, от имени своей локальной сети Thread. И PBBR пересылает трафик многоадресной рассылки в сеть Thread только в том случае, если на пункт назначения подписано хотя бы одно устройство Thread.

Для конечных устройств с минимальным потоком они могут зависеть от своего родителя в плане агрегации многоадресного адреса и выполнения MLR от их имени или регистрироваться самостоятельно, если их родительский узел имеет поток 1.1.

Более подробную информацию см. в разделе «Спецификация резьбы» .

Что вы построите

В этой лабораторной работе вы настроите маршрутизатор Thread Border Router и два устройства Thread, а затем включите и проверьте функции Multicast на устройствах Thread и устройствах Wi-Fi.

Чему вы научитесь

  • Как собрать прошивку nRF52840 с поддержкой IPv6 Multicast.
  • Как подписаться на многоадресные адреса IPv6 на устройствах Thread.

Что вам понадобится

  • Рабочая станция Linux для сборки и прошивки Thread RCP, OpenThread CLI и тестирования многоадресной рассылки IPv6.
  • Raspberry Pi для маршрутизатора Thread Border.
  • 2 USB-ключа Nordic Semiconductor nRF52840 (один для RCP и два для конечных устройств Thread).

2. Настройка ОТБР

Самый быстрый способ настроить 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. Сборка и прошивка потоковых устройств

Создайте приложение Thread CLI с Multicast и прошейте две платы nRF52840 DK.

Сборка прошивки nRF52840 DK

Следуйте инструкциям по клонированию проекта и сборке прошивки nRF52840.

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

Продолжайте с Build a Thread network with nRF52840 boards and OpenThread codelab, как написано. После того, как конечное устройство будет прошито образом CLI, следуйте Присоедините второй узел к Thread network, чтобы добавить Thread device в Thread network. Повторите для второго конечного Thread device.

4. Подпишитесь на многоадресный адрес IPv6

Подпишитесь на ff05::abcd на nRF52840 Конечное устройство 1:

> 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 , чтобы подписаться ff05::abcd на сетевом интерфейсе Wi-Fi (например, wlan0):

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

Окончательная топология сети с многоадресными подписками показана ниже:

b118448c98b2d583.png

Теперь, когда мы подписали адрес многоадресной рассылки IPv6 на конечном устройстве nRF52840 1 в сети Thread и на ноутбуке в сети Wi-Fi, мы собираемся проверить доступность двунаправленной многоадресной рассылки IPv6 в следующих разделах.

5. Проверка входящей многоадресной рассылки IPv6

Теперь мы сможем связаться как с конечным устройством 1 nRF52840 в сети Thread, так и с ноутбуком, используя многоадресный адрес IPv6 ff05::abcd из сети Wi-Fi.

Пингуем ff05::abcd на OTBR через интерфейс Wi-Fi:

$ 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 может получать два ответа ping как от nRF52840 End Device 1, так и от Laptop, поскольку они оба подписаны на ff05::abcd . Это показывает, что OTBR может пересылать пакеты многоадресной рассылки IPv6 Ping Request из сети Wi-Fi в сеть Thread.

6. Проверка исходящей многоадресной рассылки IPv6

Пинг ff05::abcd на nRF52840 Конечное устройство 2:

> 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 может получать ответы на ping как от конечного устройства nRF52840 1, так и от ноутбука. Это показывает, что OTBR может пересылать пакеты многоадресной рассылки Ping Reply IPv6 из сети Thread в сеть Wi-Fi.

7. Поздравления

Поздравляем, вы успешно настроили Thread Border Router и проверили двунаправленную многоадресную рассылку IPv6!

Более подробную информацию об OpenThread можно найти на сайте openthread.io .

Справочные документы: