Терминология OTBR - OpenThread Border Router Full Thread Device (FTD) always has its radio on, subscribes to the all-routers multicast address, and maintains IPv6 address mappings. There are three types of FTDs: * Router * Router Eligible End Device (REED) — can be promoted to a Router * Full End Device (FED) — cannot be promoted to a Router Minimal Thread Device A Minimal Thread Device does not subscribe to the all-routers multicast address and forwards all messages to its Parent. There are two types of MTDs: * Minimal End Device (MED) — transceiver always on, does not need to poll for messages from its parent * Sleepy End Device (SED) — normally disabled, wakes on occasion to poll for messages from its parent An MTD can only operate as an End Device (Child). ## Роли 1. Router A Router is a node that: * forwards packets for network devices * provides secure commissioning services for devices trying to join the network * keeps its transceiver enabled at all times 2. End Device An End Device (ED) is a node that: * communicates primarily with a single Router * does not forward packets for other network devices * can disable its transceiver to reduce power ### Типы устройств OTBR - OpenThread Border Router Full Thread Device (FTD) always has its radio on, subscribes to the all-routers multicast address, and maintains IPv6 address mappings. There are three types of FTDs: * Router * Router Eligible End Device (REED) — can be promoted to a Router * Full End Device (FED) — cannot be promoted to a Router Minimal Thread Device A Minimal Thread Device does not subscribe to the all-routers multicast address and forwards all messages to its Parent. There are two types of MTDs: * Minimal End Device (MED) — transceiver always on, does not need to poll for messages from its parent * Sleepy End Device (SED) — normally disabled, wakes on occasion to poll for messages from its parent An MTD can only operate as an End Device (Child). ### Особенности сети 1. Когда REED является единственным узлом, доступным для одного нового End Device, желающего присоединиться к сети Thread, он может обновиться и работать как Маршрутизатор. 2. И наоборот, когда у маршрутизатора нет дочерних устройств, он может перейти на более раннюю версию и работать как конечное устройство. ### Другие роли и типы 1. Thread Leader Thread Leader - это маршрутизатор, который отвечает за управление маршрутизаторами в сети. Он автоматически выбирается для обеспечения отказоустойчивости, а также собирает и распределяет информацию о конфигурации в масштабе всей сети. 2. Border Router Устройство, которое может пересылать информацию между сетью Thread и другой сетью (например, Wi-Fi). Он также настраивает сеть Thread для внешнего подключения. Любое устройство может служить пограничным маршрутизатором. ### Разделы (Partitions) Сеть Thread может состоять из разделов. Это происходит, когда одна группа устройств больше не может связываться с другой группой устройств. Каждый раздел логически работает как отдельная сеть со своим собственным лидером, назначениями идентификатора маршрутизатора и сетевыми данными, сохраняя при этом одни и те же учетные данные безопасности для всех устройств во всех разделах. Разделы в сети Thread не имеют беспроводного подключения друг к другу, и если разделы восстанавливают подключение, они автоматически объединяются в один раздел. ### Ограничения устройств | Роль | Ограничения | |--|--| | Leader | 1 | | Router | 32 | | End Device | 511 per Router | Thread пытается сохранить количество маршрутизаторов от 16 до 23. Если REED подключается как оконечное устройство, а количество маршрутизаторов в сети меньше 16, он автоматически повышается до маршрутизатора. ## Адресация IPv6 В сети Thread для одноадресной адресации есть три области: * Link-Local — все интерфейсы доступны с помощью одной радиопередачи * Mesh-Local — все интерфейсы доступны в одной сети Thtread * Global — все интерфейсы, доступные извне сети Thtread Первые две области соответствуют префиксам, обозначенным сетью Thread. Link-Local имеет префиксы fe80 :: / 16, а Mesh-Local имеет префиксы fd00 :: / 8. ### Unicast Существует несколько Unicast адресов IPv6, которые идентифицируют одно устройство Thread. У каждого есть своя функция в зависимости от области применения и варианта использования. Routing Locator (RLOC). RLOC идентифицирует интерфейс потока на основе его местоположения в топологии сети. ### Как создается RLOC Всем устройствам назначается Router ID и Child ID. Каждый маршрутизатор поддерживает таблицу всех своих дочерних устройств, комбинация которых однозначно идентифицирует устройство в топологии. Например: Router 0x400, а Child 0x401 RLOC16 является частью идентификатора интерфейса (IID - Interface Identifier). который соответствует последним 64 битам адреса IPv6. Некоторые IID могут использоваться для идентификации некоторых типов Thread интерфейсов. Например, IID для RLOC всегда имеет такую форму: ``` 0000:00ff:fe00:RLOC16 ``` IID в сочетании с префиксом Mesh-Local дает RLOC. Например, с использованием сетки-локального префикса fde5:8dba:82e1:1::/64 , в Rloc для узла , где RLOC16 = 0x401 является: fde5:8dba:82e1:1::/64 + 0000:00ff:fe00:0401 = fde5:8dba:82e1:1::ff:fe000401 Однако, поскольку RLOC основан на местоположении узла в топологии, RLOC узла может изменяться по мере изменения топологии. Например, узел 0x400 удаляется из сети Thread. Узлы 0x401 и 0x402 устанавливать новые ссылки на различные маршрутизаторы, и в результате каждый из них присваивается новый RLOC16 и RLOC ### Типы Unicast адресов RLOC - это лишь один из многих одноадресных IPv6-адресов, которые может иметь устройство Thread. Другая категория адресов называется идентификаторами конечных точек (EID - Endpoint Identifier), которые идентифицируют уникальный интерфейс Thread в сетевом разделе Thread. EID не зависят от топологии сети Thread. | Link-Local Address (LLA) | | |---|---| |EID, который идентифицирует интерфейс потока, доступный с помощью Unicast. | | | Пример | fe80::54db:881c:3845:57f4 | | IID | На основе 802.15.4 Extended Address | | Scope | Link-Local | | Подробности | Используется для обнаружения соседей, настройки ссылок и обмена маршрутной информацией Не маршрутизируемый адрес Всегда имеет префикс fe80::/16 | | Mesh-Local EID (ML-EID) | | |---|---| | EID, который идентифицирует интерфейс Thread, независимо от топологии сети. Используется для доступа к интерфейсу Thread в том же scope Thread. Также называется уникальным локальным адресом (ULA). | | | Пример | fde5:8dba:82e1:1:416:993c:8399:35ab | | IID | Случайно, выбирается после завершения ввода в эксплуатацию | | Scope | Link-Local | | Подробности | Не меняется при изменении топологии Должно использоваться приложениями Всегда имеет префикс fd00::/8 | | Локатор маршрутизации (RLOC) | | |---|---| | Определяет интерфейс Thread в зависимости от его расположения в топологии сети. | | | Пример | fde5:8dba:82e1:1::ff:fe00:1001 | | IID | 0000:00ff:fe00: RLOC16 | | Scope | Mesh-Local | | Подробности | Создается, когда устройство подключается к сети Для доставки дейтаграмм IPv6 в сети Thread Изменения по мере изменения топологии Обычно не используется приложениями | | Локатор Anycast (ALOC) | | |---|---| | Идентифицирует интерфейс Thread через поиск RLOC, когда RLOC места назначения неизвестен. | | | Пример | fde5:8dba:82e1:1::ff:fe00:fc01 | | IID | 0000:00ff:fe00:fc XX | | Scope | Mesh-Local | | Подробности | fc XX = Aloc назначения , который смотрит на соответствующий Rloc Обычно не используется приложениями | | Глобальный одноадресный адрес (GUA) | | |---|---| | EID, который идентифицирует интерфейс потока в глобальной области за пределами сети Thread.| | | Пример | 2000::54db:881c:3845:57f4 | | IID | SLAAC - произвольно назначается самим устройством DHCP - назначается сервером DHCPv6. Вручную - назначается на уровне приложения | | Scope | Глобальный | | Подробности | Общедоступный IPv6-адрес Всегда имеет префикс 2000::/3 | ### Multicast Многоадресная рассылка используется для передачи информации сразу нескольким устройствам. В сети Thread определенные адреса зарезервированы для многоадресного использования с различными группами устройств, в зависимости от области действия. | IPv6-адрес | Scope | Delivered to | |---|---|---| | ff02::1 | Link-Local | Все FTD и MED | | ff02::2 | Link-Local | Все FTD | | ff03::1 | Mesh-Local | Все FTD и MED | | ff03::2 | Mesh-Local | Все FTD | Основное различие между FTDs и MTDs является то, что FTD присоеднияется к ff03::2 адресу многоадресной рассылки. MTD - нет. Вы можете заметить, что Sleepy End Devices (SED) не включены в качестве получателя в приведенную выше таблицу многоадресной рассылки. Вместо этого Thread определяет многоадресный IPv6-адрес одноадресной рассылки на основе префикса одноадресной рассылки и локальной области, используемый для всех узлов Thread, включая SED. Эти групповые адреса различаются в зависимости от сети Thread, поскольку он построен на однонаправленной Mesh-локального префикса (см RFC 3306 для получения более подробной информации о одноадресной-приставке на основе многоадресной рассылки IPv6 - адрес). Для устройств Thread также поддерживаются произвольные области, помимо уже перечисленных. ### Anycast Anycast используется для маршрутизации трафика к интерфейсу Thread, когда RLOC пункта назначения неизвестен. Локатор Anycast (ALOC) определяет расположение нескольких интерфейсов в разделе Thread. Последние 16 битов в Aloc, называется ALOC16, находится в формате 0xfc XX , который представляет собой тип Aloc. Например, ALOC16 между 0xfc01 и 0xfc0f зарезервирован для DHCPv6 агентов. Если конкретный RLOC агента DHCPv6 неизвестен (возможно, из-за изменения топологии сети), сообщение может быть отправлено ALOC агента DHCPv6 для получения RLOC. Thread определяет следующие значения ALOC16: | ALOC16 | Тип | |---|---| | 0xfc00 | Leader | | 0xfc01 - 0xfc0f | Agent DHCPv6 | | 0xfc10 - 0xfc2f | Service | | 0xfc30 - 0xfc37 | Commissioner | | 0xfc40 - 0xfc4e | Neighbor Discovery Agent | | 0xfc4f - 0xfcff 0xfc38 - 0xfc3f | Зарезервированный ## Network Discovery and Formation Например, сеть потоков может иметь следующие идентификаторы: Сети Thread Сети Thread идентифицируются тремя уникальными идентификаторами: * 2-байтовый идентификатор персональной сети (PAN ID) * 8-байтовый расширенный идентификатор персональной сети (XPAN ID) * Удобочитаемое имя сети Например, сеть Thread имеет следующие идентификаторы: | Идентификатор | Значение | | PAN ID | 0xBEEF | | XPAN ID | 0xBEEF1111CAFE2222 | | Имя сети | yourThreadCafe | При создании новой сети Thread или поиске существующей, к которой можно присоединиться, устройство Thread выполняет активное сканирование сетей 802.15.4 в пределах радиодиапазона: 1. Устройство передает 802.15.4 Beacon Request по определенному каналу. 2. В свою очередь, любые маршрутизаторы или подходящие для маршрутизаторов конечные устройства (REED) в диапазоне передают Beacon, который содержит их идентификатор PAN ID, идентификатор XPAN и имя сети. 3. Устройство повторяет два предыдущих шага для каждого канала. После того, как устройство Thread обнаружило все сети в пределах досягаемости, оно может либо подключиться к существующей сети, либо создать новую, если сети не обнаружены. ### Mesh Link Establishment Thread использует протокол Mesh Link Establishment (MLE) для настройки соединений и распространения информации о сети на устройства Thread. В конфигурации канала MLE используется для: * Найдите соединения на соседние устройства * Определить качество соединений на соседние устройства * Установите соединения на соседние устройства * Согласование параметров соединений (тип устройства, счетчики кадров, тайм-аут) с одноранговыми узлами MLE распространяет следующие типы информации устройствам, желающим установить соединения: * Данные лидера (RLOC лидера, идентификатор раздела, вес раздела) * Сетевые данные (префиксы в сети, автоконфигурация адреса, более конкретные маршруты) * Распространение маршрута Распространение маршрута в потоке работает аналогично протоколу маршрутизации информации (RIP - Routing Information Protocol), протоколу маршрутизации на основе вектора расстояния. ### Создание новой сети Если устройство решает создать новую сеть, оно выбирает наименее загруженный канал и идентификатор PAN, который не используется другими сетями, затем становится маршрутизатором и выбирает себя лидером. Это устройство отправляет сообщения MLE Advertising другим устройствам 802.15.4, чтобы информировать их о состоянии своего канала, и отвечает на запросы маяка от других устройств Thread, выполняющих активное сканирование. ### Присоединение к существующей сети Если устройство решает присоединиться к существующей сети, оно настраивает свой Channel, PAN ID, XPAN ID и Network Name в соответствии с именем целевой сети с помощью ввода в эксплуатацию Thread, затем проходит процесс MLE Attach для подключения в качестве дочернего (конечное устройство). ). Этот процесс используется для Child-Parent соединений. Каждое устройство, маршрутизатор с поддержкой или нет, сначала подключается к сети Thread как Child (End Device). 1. Child отправляет групповой Parent Request ко всем соседним маршрутизаторам и REEDs в целевой сети. 2. Все соседние маршрутизаторы и REEDs (Parent Request Scan Mask includes REEDs) отправить Parent Responses с информацией о себе. 3. Child выбирает Parent устройство и отправляет Child ID Request на него. 4. Parent отправляет Child ID Response для подтверждения установления соединения. 1. Parent Request Parent Request - это multicast запрос от присоединяемого устройства, который используется для обнаружения соседних маршрутизаторов и допустимых конечных устройств (REED) в целевой сети. | Parent Request Message Contents | | |---|---| | Mode | Описывает прикрепляющее устройство | | Challenge | Tests the timeliness of the Parent Response to prevent replay attacks | | Scan Mask | Limits the request to only Routers or to both Routers and REEDs | 2. Parent Response Parent Response - это unicast на Parent Request, который предоставляет информацию о маршрутизаторе или REED присоединенному устройству. | Parent Response Message Contents| | |---|---| | Version | Thread protocol version | Response | Copy of the Parent Request Challenge | Link Frame Counter | 802.15.4 Frame Counter on the Router/REED | MLE Frame Counter | MLE Frame Counter on the Router/REED | Source Address | RLOC16 of the Router/REED | Link Margin | Receive signal quality of the Router/REED | Connectivity | Describes the Router/REED’s level of connectivity | Leader Data | Information about the Router/REED’s Leader | Challenge | Tests the timeliness of the Child ID Request to prevent replay attacks 3. Child ID Request Child ID Request - это unicast запрос от присоединяемого устройства (дочернего), который отправляется на маршрутизатор или REED (родительский) с целью установления связи между дочерним и родительским устройством. Если запрос направляется в REED, он обновляет себя как маршрутизатор, прежде чем принять запрос. | Child ID Request Message Contents | | |---|---| | Version | Thread protocol version| | Response | Copy of the Parent Response Challenge| | Link Frame Counter | 802.15.4 Frame Counter on the Child| | MLE Frame Counter | MLE Frame Counter on the Child| | Mode | Describes the Child| | Timeout | Inactivity duration before the Parent removes the Child| | Address Registration (MEDs and SEDs only) | Register IPv6 addresses| 4. Child ID Response Child ID Response - это unicast ответ от Родителя, который отправляется Дочернему, чтобы подтвердить, что была установлена связь между дочерним и родительским объектами. | Child ID Response | | |---|---| | Child ID Response Message Contents| | Source Address| Parent's RLOC16| | Address16| Child's RLOC16| | Leader Data | Information about the Parent’s Leader (RLOC, Partition ID, Partition weight)| | Network Data | Information about the Thread network (on-mesh prefixes, address autoconfiguration, more-specific routes)| | Route (REED only) | Route propagation| | Timeout | Inactivity duration before the Parent removes the Child| | Address Registration (MEDs and SEDs only) | Confirm registered addresses| ## Выбор маршрутизатора ## OpenThread commissioning Commissioning - это процесс, который позволяет новому устройству присоединиться к сети Thread. Новое устройство должно быть аутентифицировано и авторизовано, чтобы стать частью сети. ### Commissioning roles * Leader - наблюдает за конфигурацией сети, позволяет Commissioner Candidate стать Commissioner и обеспечивает наличие только одного активного комиссара. * Commissioner Candidate - роль для устройства, способного стать Commissioner, но еще не назначенная роль Commissioner. * Commissioner - аутентифицирует Joiner и предоставляет ему сетевые учетные данные, необходимые для присоединения к сети. Commissioner может быть частью сети или находиться вне сети. * Joiner - роль для нового устройства, которое хочет присоединиться к сети Thread. Он обменивается сообщениями с Commissioner через подключенный напрямую Joiner Router, который служит прокси-сервером. * Joiner Router - роль маршрутизатора, который находится на расстоянии одного перехода от устройства Joiner в сети Thread и является единственным устройством, подключенным к Joiner. Отвечает на Discovery Request от Joiner. Более того, когда он выбран Joiner, он передает последующие коммуникации безопасным способом. * Border Router - Role for a device equipped with at least two interfaces (for example Thread and Wi-Fi, Ethernet, LTE etc.) that forwards data between a Thread network and a non-Thread network. It can also be an interface for the Commissioner. * Border Router - роль для устройства, оснащенного как минимум двумя интерфейсами (например, Thread и Wi-Fi, Ethernet, LTE и т. Д.), Которое пересылает данные между сетью Thread и внешней сетью. Это также может быть интерфейс для Commissioner. https://www.threadgroup.org/news-events/blog#.YT0Tg50zaUk https://www.threadgroup.org/Portals/0/documents/support/ThreadInCommercialWhitePaper_2542_1.pdf https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/ug_thread.html #TODO Установить nrf-thread-topology-monitor https://wiki.makerdiary.com/nrf52840-mdk-usb-dongle/OTBR/ https://openthread.io/codelabs/openthread-hardware#6 https://blog.makerdiary.com/build-a-thread-network-with-nrf52840-mdk/ https://www.nordicsemi.com/Products/Development-tools/nrf-thread-topology-monitor