Bluetooth mesh — базовые составляющие сети

image

В продолжение темы о сети bluetooth mesh, об анонсе и ключевых составляющих которой было написано в этой заметке, для понимания её топологии мы рассмотрим основной набор технических терминов и понятий, ранее отсутствовавших в мире Bluetooth LE.

Кому это интересно, добро пожаловать…

Большинство устройств BLE обмениваются данными друг с другом, используя простую топологию сети типа «точка-точка» (p2p), позволяющую осуществлять связь один к одному, которая в спецификации ядра Bluetooth называется «piconet».

Представим себе смартфон, который установил соединение типа «точка-точка» с пульсометром и получает от последнего данные о частоте пульса. Так как спецификация Bluetooth позволяет устройствам устанавливать одновременно несколько соединений, то тот же смартфон, уже имея соединение типа p2p с пульсометром, может установить другое соединение такого же типа с другим устройством, например с трекером активности. В этом случае смартфон может напрямую связываться с каждым из этих других устройств, но сами устройства не могут напрямую связываться друг с другом.

В отличие от p2p, mesh-сеть позволяет каждому устройству взаимодействовать с любым другим устройством в сети. Связь осуществляется путем передачи сообщений, а устройства эти сообщения могут как передавать, так и ретранслировать другим устройствам, таким образом, увеличивая дальность связи далеко за пределы диапазона радиосвязи каждого отдельного узла.

Устройства и узлы


Допустим, Вы приобрели люстру с поддержкой Bluetooth mesh. Для того чтобы ей управлять при помощи выключателей, так же использующих Bluetooth mesh, люстру сначала необходимо сделать частью вашей mesh-сети, то есть «подготовить». В данном контексте появились новые термины:

  • «Узел» (Node) — устройство, являющееся частью mesh-сети.
  • «Неподготовленное устройство» (Unprovisioned device) — устройство, не являющееся частью сети.
  • «Инициализация» (Provisioning) — процесс ввода неподготовленного устройства в сеть, после чего, устройство станет узлом. Это определенные действия в контексте безопасности сети, которые приводят к тому, что устройство, обмениваясь определенным набором ключей шифрования с устройством, обладающим функцией регистрации в сети, становится участником сети. Устройством, обладающим функцией регистрации в сети обычно является планшет или смартфон. Один из ключей шифрования называется «сетевой ключ» или кратко «NetKey».

Все узлы mesh-сети имеют хотя бы один «NetKey» и наличие такого ключа делает устройство членом сети, то есть узлом. Существуют и другие требования, которые должны быть выполнены до того, как узел станет полезным, но безопасное создание «NetKey» с помощью процесса инициализации является первым и основным шагом. Процесс инициализации более подробно мы рассмотрим чуть ниже.

Элементы


imageНекоторые узлы могут состоять из несколько частей, каждой из которых можно управлять независимо. В терминологии mesh-сети Bluetooth эти части называются элементами (Elements). На рисунке слева изображена светодиодная люстра, которая при добавлении в сеть, представляет собой единый узел с тремя элементами и каждый из элементов является индивидуальным источником света.


Сообщения


Если узлу необходимо запросить статус других узлов или, каким-то образом, управлять другими узлами, он отправляет сообщение определенного типа. Если узел должен сообщить свой статус другим узлам, он тоже отправляет сообщение. Таким образом, mesh-сеть основана на сообщениях, и уже определено множество типов сообщений, каждый из которых имеет свой собственный уникальный код операции.

Сообщения делятся на 2 категории:

  • подтверждаемые: сообщения, подразумевающие получение ответа от узлов, получаемых сообщения. Отвечая, узел подтверждает то, что сообщение было получено и возвращает отправителю какие-то данные. Отправитель подтверждаемого сообщения может повторно отправить сообщение в случае, если он не получит ожидаемый ответ. То есть значение подтверждаемого сообщения, поступающего на узел несколько раз, будет таким же, как и то, которое было бы получено при отправке только один раз (идемпотентно).
  • неподтверждаемые: сообщения, не требующие ответа.

Адреса


Сообщения должны отправляться с адреса и на адрес. В сети Bluetooth определено три типа адресов:

  • unicast (индивидуальный адрес): однозначно идентифицирует отдельный элемент сети. Такой тип присваивается устройству в процессе инициализации.

  • multicast (групповой адрес): представляет один или несколько элементов сети. Адреса групп определяются Bluetooth SIG под названием «SIG Fixed Group Addresses» или могут назначаться динамически. Bluetooth SIG определят 4 фиксированных группы адресов: «All-proxies», «All-friends», «All-Relays» и «All-nodes». Подробнее они будут описаны ниже. Динамические же групповые адреса могут устанавливаться пользователем с помощью приложения конфигурации. Если, например, динамические групповые адреса отражают физическую конфигурацию здания, то можно определить группы адресов, соответствующих каждой комнате в здании.

  • виртуальный адрес: адрес, который может быть назначен одному или нескольким элементам, охватываемых одним или несколькими узлами. Он имеет значение 128-битного уникального идентификатора (UUID). Виртуальные адреса, вероятно, будут формироваться во время производства устройства.

Публикации и подписки


image

Публикация (Publish) – это действие по отправке сообщения.
Подписка (Subscribe) – это выбор определенных сообщений для обработки, отправленных на определенные адреса.

Как правило, сообщения адресованы группе адресов или виртуальному адресу.

На рисунке выше, мы видим, что узел «Выключатель 1» публикуется для группового адреса «Кухня». Каждый из узлов «Лампа 1», «Лампа 2» и «Лампа 3» подписан на адрес «Кухня» и, следовательно, получают и обрабатывают сообщения, опубликованные для этого адреса. Другими словами, «Лампу 1», «Лампу 2» и «Лампу 3» можно включить или выключить с помощью «Выключателя 1».

«Выключатель 2» публикуется для группового адреса «Столовая». И на этот адрес подписана только «Лампа 3». Она является единственной, контролируемой «Выключателем 2». Этот пример иллюстрирует факт того, что узлы могут подписываться на сообщения, адресованные более чем одному отдельному адресу. Здесь проявляется гибкость сети. Обратите внимание, как оба узла «Выключатель 5» и «Выключатель 6» публикуются для одного и того же адреса: «Сад».

Использование групповых и виртуальных адресов с моделью «издатель-подписчик» имеет дополнительное преимущество в том, что удаление, замена или добавление новых узлов в сеть не требует перенастройки других узлов. Представим, что надо сделать при добавлении нового источника света, допустим, в столовую: новое устройство будет добавлено в сеть с использованием процесса подготовки и настроит подписку на адрес «Столовая», при этом данные изменения не повлияют на другие узлы. «Выключатель 2» как и прежде, будет публиковать сообщения для «Столовой», но теперь на это будет реагировать как «Лампа 3», так и новая лампа.

Состояния и свойства


Элементы сети могут находиться в разных состояниях и эти состояния представлены в сети концепцией «значение состояния».

Состояние — это значение определенного типа, содержащегося внутри элемента (в пределах модели сервера — см. ниже). В качестве примера рассмотрим лампочку, которая может быть включена или выключена. В bluetooth сети определено состояние "Generic OnOff". Лампочка, обладая этим состоянием со значением "On" будет гореть, а в состоянии со значением "Off" естественно гореть не будет.

Свойства аналогичны состояниям, поскольку они содержат определенные значения, относящиеся к элементу. Но они существенно отличаются от состояний другими признаками. Те, кто знаком с BLE знают о понятии «характеристика сервиса» (нечто, представляющее собой типы данных, в которых представлены какие-то значения определяющие метаданные сервиса). Так вот "свойство" предоставляет контекст для интерпретации характеристики.

Чтобы оценить важность использования контекста, рассмотрим, например, характеристику «Температура 8» — 8-битный тип состояния температуры, имеющий ряд связанных с ним свойств, включая текущую внутреннюю температуру окружающей среды и существующую наружную температуру окружающей среды. Эти два свойства позволяют датчику публиковать показания таким образом, чтобы клиент-получатель мог определить контекст, который имеет значение температуры.

Свойства разделены на две категории:

  • категория производителя (устройства): свойства могут только читаться;
  • категория администратора: свойства имеют доступ на чтение и на запись.

Сообщения, состояния и свойства


Любой конкретный тип сообщения представляет собой операцию с состоянием или совокупностью нескольких значений состояния. Все сообщения имеют три основных типа, отражающие типы операций, поддерживаемых сетью Bluetooth:

  • GET сообщения запрашивают значение текущего состояния у одного или нескольких узлов. В ответ на него отправляется сообщение с типом STATUS и содержит соответствующее значение состояния.
  • SET сообщения изменяют значение определенного состояния. Отправка подтверждаемого сообщения данного типа требует ответного сообщения с типом STATUS, тогда как неподтверждаемое сообщение типа SET ответа не требует.
  • STATUS сообщения отправляются в ответ на сообщения типа GET, на подтверждаемые сообщения типа SET или независимо от других сообщений, например, управляемые таймером, выполняемым внутри элемента, который отправляет сообщение.

Модели


Модель – это объединение концепций, определяющая функциональные возможности элемента, находящегося в сети. Определены 3 категории моделей.

  • Модель сервера: определяет совокупность состояний, переходов состояний, привязок состояний и сообщений, которые элемент, содержащий данную модель, может отправлять или получать. Эта модель также определяет поведение, связанное с сообщениями, состояниями и переходами состояний.

  • Модель клиента: не определяет какие-либо состояния, а определяет сообщения, которые можно отправить или получить.

  • Модель управления: совмещает в себе модель сервера, позволяющую обмениваться данными с другими клиентскими моделями с моделью клиента, которая позволяет связываться с моделями серверов.

Модели могут быть созданы путем расширения других моделей. Модели неизменяемы, это означает, что они не могут быть изменены путем добавления или удаления поведения. Правильный и единственно допустимый подход к добавлению новых требований к модели заключается в расширении существующей.

Обобщения


Многие различные типы устройств, часто имеют похожие состояния, примером которого является простая идея «On»-«Off», то есть устройства, которые могут быть включены или выключены. По этому, спецификация сети bluetooth определяет набор обобщенных состояний, таких например, как "Generic OnOff" и "Generic Level". Аналогично определен ряд обобщенных сообщений, которые работают с такими состояниями, например: "Generic OnOff Get" и "Generic Level Set". Обобщения позволяют использовать широкий диапазон типов устройств без необходимости создавать новые модели.

image

Сцены


Сцена представляет собой сохраненную коллекцию состояний, которые могут быть вызваны или сделаны текущими при получении специального типа сообщения или в определенное время. Сцены идентифицируются с помощью 16-ти битного номера сцены "Scene Number", являющимся уникальным в mesh-сети. Сцены позволяют устанавливать ряд узлов в заданный набор ранее сохраненных, дополняющих состояний в одном скоординированном действии.

Представьте себе: Вы хотите, что бы вечером температура в комнате была 23 градуса, шесть ламп в люстре светили с определенной яркостью, а лампа на столе была настроена на приятный теплый желтый оттенок. После того как вы вручную установили узлы в эти состояния, Вы можете сохранить эти состояния как сцену с помощью приложения конфигурации и позже вызвать эту сцену по запросу, отправив соответствующее, связанное со сценой сообщение или вызвать автоматически в запланированное время.

Инициализация


Инициализация (provisioning), как было сказано ранее, это процесс, с помощью которого устройство соединяется с mesh-сетью и становится узлом. Процесс включает в себя несколько этапов, приводит к созданию различных ключей безопасности и сам по себе является безопасным процессом. Инициализация осуществляется при помощи приложения на устройстве, таком как, например, планшет. Устройство, используемое для управления процессом инициализации, называется "Provisioner". Процесс подготовки состоит из пяти шагов, описанных ниже.

  1. "Я маяк" (Beaconing). Для поддержки различных функций сети bluetooth, были добавлены новые типы адвертизинга профиля GAP (GAP AD), в частности тип AD «Mesh Beacon». Неподготовленное устройство указывает свою доступность в эфире, используя в пакетах адвертизинга этот тип. Для того, что бы устройство начало передавать такие данные, пользователю может понадобится принудительно перевести устройство в этот режим, например, нажав комбинацию кнопок или удерживая кнопку в течение определенного периода времени.

  2. Приглашение (Invitation). На этом этапе устройство, используемое для управления процессом инициализации, отправляет приглашение. Устройство «Маяк», в ответ на приглашение, отправляет информацию о себе.

  3. Обмен публичными ключами. Оба устройства обмениваются своими открытыми ключами либо напрямую, либо используя метод OOB (out-of-band).

  4. Аутентификация. На данном этапе устройство, которое должно войти в сеть, в той или иной форме отображает пользователю случайное число. Пользователь вводит это число в устройство управления, после чего между двумя устройствами происходит определенный обмен зашифрованными данными. Результатом данного обмена является обоюдное подтверждение подлинности двух устройств.

  5. Рассылка предоставленных данных. После завершения проверки подлинности создается ключ сеанса, используемый для обеспечения безопасности последующего обмена данными, необходимыми для завершения процесса инициализации, включая генерацию ключа безопасности «NetKey». После завершения инициализации подготавливаемое устройство становится обладателем
    • сетевого ключа «NetKey»;
    • параметром безопасности сети, именуемым «индекс IV» (IV Index);
    • адресом unicast, выделенный устройствоv управления.


После чего устройство становится узлом.

Особенности


Все узлы сети могут передавать и принимать сообщения данной сети, но есть ряд дополнительных функций, которыми может обладать узел. Узел может не поддерживать, поддерживать некоторые или все из указанных дополнительных функций, и любая поддерживаемая функция может в какой-то момент времени быть включена или отключена.
Перечислим эти функции:

  • Relay: Релейные узлы. Узлы, которые поддерживают функцию ретрансляции и называемые узлами ретрансляции, могут повторно передавать принятые сообщения. Ретрансляция — механизм, посредством которого сообщение может перемещаться по всей сети, делая несколько «прыжков» (hops) между устройствами путем ретрансляции. PDU сети включает поле под названием TTL (Time To Live). Оно принимает целочисленное значение и используется для ограничения количества прыжков. Например, если TTL равно 3, то будет передано сообщение, используя 3 «прыжка» от исходного узла. Установка TTL в 0 приведет к тому, что значение не будет ретранслироваться, а будет перемещаться на участке одного прыжка. Таким образом, узлы могут использовать поле TTL для более эффективного использования mesh-сети.

  • Low Power: Узлы с низким энергопотреблением. Некоторые узлы, имеющие ограничения по питанию, должны максимально экономить потребляемую энергию. К тому же, устройства такого типа могут быть в основном связаны с отправкой сообщений, но иногда им приходится получать сообщения. Возьмем температурный датчик, который питается от батареи размером с монету. Он посылает показания температуры один раз в минуту, в случае, если температура превышает установленные верхний и нижний пороги. Если температура остается в пределах этих пороговых значений, то датчик не отправляет никаких сообщений. Такое поведение легко реализуется без особых проблем, связанных с потреблением энергии. В то же время пользователь может отправить сообщение на этот датчик, изменяющее значения состояния порогов. Такое событие может происходить очень редко, но датчик должен его поддерживать. Если датчик не будет пропускать ни одно сообщение, то у него будет повышенное энергопотребление, а при экономии энергии можно пропустить сообщения о конфигурации. Для таких случаев существует концепция дружбы и функция узла с названием «Friend». Узлы, такие как датчик температуры в этом примере, могут быть обозначены как узлы с низким энергопотреблением (LPN), а в конфигурации датчика будет стоять флаг функции, обозначающий узел как таковой. Узел LPN работают в тандеме с другим узлом, который не имеет ограничений по мощности (например, имеющий постоянный источник питания переменного тока). Это устройство называется узлом «Friend».

  • Friend: Узел-друг. Узел с такой функцией хранит сообщения, адресованные узлу LPN и доставляет их в LPN всякий раз, когда LPN опрашивает друга об «ожидающих сообщениях». LPN может опрашивать друга относительно редко, но так, чтобы сбалансировать количество потребляемой энергии и частоту получения и обработки сообщений конфигурации. При выполнении запроса, все сообщения, хранящиеся у друга, пересылаются в LPN с флагом «MD» (More Data) (дополнительные данные), указывающим узлу LPN на то, есть ли дополнительные сообщения для отправки с узла «Friend». Взаимоотношения между узлом LPN и узлом «Friend» называется «Дружба» (Frienfship).

  • Proxy: Узлы прокси. В мире существует огромное количество устройств, поддерживающих BLE, в том числе и большинство смартфонов и планшетов, но устройства, выпущенные до того, как была анонсирована mesh-сеть Bluetooth, не поддерживают стек этой сети. А так как у них есть стек BLE, данные устройства имеют возможность подключаться к другим устройствам и взаимодействовать с ними с помощью профиля GATT (Generic Attribute Profile). Прокси-узлы предоставляют интерфейс GATT, который можно использовать для взаимодействия с сетью. Протокол, называемый прокси-протоколом, как раз и используется с GATT и с его помощью прокси-узел преобразует эти PDU устройств в/из PDU сети. Таким образом, прокси-узлы позволяют устройствам BLE, не имеющим стек mesh-сети, взаимодействовать с узлами этой сети.

На рисунке ниже изображено взаимодействие c узлом mesh через прокси-узел этой сети.

image

Системную архитектуру, безопасность сети и описание её работы в действии, мы рассмотрим в заключительной части.

Спасибо за внимание.


Источник: RSS-лента https://habrahabr.ru/post/334478/

  • 0


0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.