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