Терминология
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