Посмотреть исходный код на GitHub
Давайте посмотрим, как Thread идентифицирует каждое устройство в сети и какие типы адресов они используют для связи друг с другом.
Сферы

В сети Thread есть три области для одноадресной адресации:
- Link-Local — все интерфейсы доступны для одной радиопередачи.
- Mesh-Local — все интерфейсы доступны в одной сети Thread.
- Global — все интерфейсы, доступные из-за пределов сети Thread.
Первые две области соответствуют префиксам, назначенным сетью потоков. Link-Local имеет префиксы fe80::/16
, а Mesh-Local имеют префиксы fd00::/8
.
Одноадресная передача
Существует несколько одноадресных адресов IPv6, которые идентифицируют одно устройство Thread. Каждый из них имеет свою функцию в зависимости от области применения и варианта использования.
Прежде чем мы подробно рассмотрим каждый тип, давайте узнаем больше об одном из них, называемом локатором маршрутизации (RLOC). RLOC идентифицирует интерфейс Thread на основании его положения в топологии сети.
Как создается локатор маршрутизации
Всем устройствам назначается Router ID и Child ID. Каждый маршрутизатор поддерживает таблицу всех своих потомков, комбинация которых однозначно идентифицирует устройство в топологии. Например, рассмотрим выделенные узлы в следующей топологии, где число в маршрутизаторе (пятиугольник) — это идентификатор маршрутизатора, а число в конечном устройстве (круг) — это дочерний идентификатор:

Идентификатор каждого дочернего маршрутизатора соответствует их родительскому (маршрутизатору). Поскольку маршрутизатор не является дочерним, идентификатор дочернего элемента для маршрутизатора всегда равен 0. Вместе эти значения уникальны для каждого устройства в сети потоков и используются для создания RLOC16, который представляет последние 16 бит RLOC.
Например, вот как рассчитывается RLOC16 для верхнего левого узла (идентификатор маршрутизатора = 1 и идентификатор дочернего элемента = 1):

RLOC16 является частью идентификатора интерфейса (IID), который соответствует последним 64 битам адреса IPv6. Некоторые IID могут использоваться для идентификации некоторых типов интерфейсов Thread. Например, IID для RLOC всегда имеет следующую форму:
0000:00ff:fe00:RLOC16
IID в сочетании с префиксом Mesh-Local приводит к RLOC. Например, при использовании префикса Mesh-Local fde5:8dba:82e1:1::/64
RLOC для узла, где RLOC16 = 0x401
, будет следующим:

Эту же логику можно использовать для определения RLOC для всех выделенных узлов в примере топологии выше:

Однако, поскольку RLOC основан на расположении узла в топологии, RLOC узла может меняться по мере изменения топологии.
Например, возможно, узел 0x400
удален из сети Thread. Узлы 0x401
и 0x402
устанавливают новые ссылки на разные маршрутизаторы, и в результате каждому из них назначается новый RLOC16 и RLOC:

Типы одноадресных адресов
RLOC — это лишь один из множества одноадресных адресов IPv6, которые может иметь устройство Thread. Другая категория адресов называется идентификаторами конечной точки (EID), которые идентифицируют уникальный интерфейс потока в сетевом разделе потока. EID не зависят от топологии сети Thread.
Общие типы одноадресной рассылки подробно описаны ниже.
Link-Local Address (LLA) | |
---|---|
EID, который идентифицирует интерфейс потока, достижимый одной радиопередачей. | |
Пример | fe80::54db:881c:3845:57f4 |
IID | На основе расширенного адреса 802.15.4 |
Объем | Link-Local |
Подробности |
|
Mesh-локальный EID (ML-EID) | |
---|---|
EID, который идентифицирует интерфейс потока независимо от топологии сети. Используется для доступа к интерфейсу Thread в том же разделе Thread. Также называется уникальным локальным адресом (ULA). | |
Пример | fde5:8dba:82e1:1:416:993c:8399:35ab |
IID | Случайно, выбирается после завершения ввода в эксплуатацию |
Объем | Mesh-Local |
Подробности |
|
Локатор маршрутизации (RLOC) | |
---|---|
Идентифицирует интерфейс Thread на основе его расположения в топологии сети. | |
Пример | fde5:8dba:82e1:1::ff:fe00:1001 |
IID | 0000:00ff:fe00: RLOC16 |
Объем | Mesh-Local |
Подробности |
|
Локатор Anycast (ALOC) | |
---|---|
Идентифицирует интерфейс потока с помощью поиска RLOC, когда RLOC адресата неизвестен. | |
Пример | fde5:8dba:82e1:1::ff:fe00:fc01 |
IID | 0000:00ff:fe00:fc XX |
Объем | Mesh-Local |
Подробности |
|
Глобальный индивидуальный адрес (GUA) | |
---|---|
EID, который идентифицирует интерфейс Thread в глобальной области, за пределами сети Thread. | |
Пример | 2000::54db:881c:3845:57f4 |
IID |
|
Объем | Глобальный |
Подробности |
|
Мультикаст
Многоадресная рассылка используется для одновременной передачи информации нескольким устройствам. В сети Thread определенные адреса зарезервированы для многоадресного использования с различными группами устройств, в зависимости от области действия.
IPv6-адрес | Объем | Доставлен в |
---|---|---|
ff02::1 | Link-Local | Все FTD и MED |
ff02::2 | Link-Local | Все FTD |
ff03::1 | Mesh-Local | Все FTD и MED |
ff03::2 | Mesh-Local | Все FTD |
Вы могли заметить, что спящие конечные устройства (SED) не включены в качестве получателя в приведенную выше таблицу многоадресной рассылки. Вместо этого Thread определяет адрес многоадресной рассылки IPv6 на основе префикса одноадресной рассылки на основе префикса одноадресной рассылки на основе локального канала и локальной области области, используемый для всех узлов потока, включая SED. Эти многоадресные адреса различаются в зависимости от сети Thread, поскольку она построена на префиксе индивидуальной адресации Mesh-Local (дополнительные сведения о многоадресных адресах IPv6 на основе префикса индивидуальной рассылки см. в RFC 3306 ).
Произвольные области помимо уже перечисленных, также поддерживаются для устройств 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 | Лидер |
0xfc01 – 0xfc0f | Агент DHCPv6 |
0xfc10 – 0xfc2f | Услуга |
0xfc30 – 0xfc37 | комиссар |
0xfc40 – 0xfc4e | Агент обнаружения соседей |
0xfc38 – 0xfc3f 0xfc4f – 0xfcff | Сдержанный |
Резюме
Что вы узнали:
- Сеть потоков состоит из трех областей: Link-Local, Mesh-Local и Global.
- Устройство Thread имеет несколько одноадресных IPv6-адресов.
- RLOC представляет местоположение устройства в сети Thread.
- ML-EID уникален для устройства Thread в разделе и должен использоваться приложениями.
- Поток использует многоадресную рассылку для пересылки данных группам узлов и маршрутизаторов.
- Поток использует произвольную рассылку, когда RLOC адресата неизвестен.
Чтобы узнать больше об IPv6-адресации потока, см. разделы 5.2 и 5.3 спецификации потока .
Проверьте свое понимание
ff03::2
. Что это говорит нам об устройстве?ff03::2
. Они делают это в области Mesh-Local.