Концепции модели взаимодействия

Модель данных узла не имеет значения, если мы не можем выполнять с ним операции. Модель взаимодействия (IM) определяет, как модель данных узла связана с моделями данных других узлов. Это общий язык для взаимодействия между моделями данных.

Узлы взаимодействуют друг с другом следующим образом:

  • Чтение атрибутов и событий и подписка на них
  • Запись в атрибуты
  • Вызов команд

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

Иерархия модели взаимодействия
Рисунок 1. Иерархия модели взаимодействия

В транзакциях поддерживается несколько действий, например действие Read Request, которое запрашивает атрибут или событие у другого узла, или ответ на него – действие Report Data, которое передает информацию обратно с сервера клиенту.

Инициаторы и цели

Узел, который инициирует транзакцию, называется инициатором, а узел, который отвечает, – целью. Обычно инициатором является кластер клиента, а целью – кластер сервера. Однако есть и исключения, например взаимодействия с подписками, которые рассматриваются ниже.

Группы

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

Для групповой связи (Groupcast) Matter использует сообщения IPv6 Multicast, а у всех участников группы один и тот же адрес Multicast.

Пути

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

Этот механизм важен для повышения оперативности связи. Например, если пользователь хочет выключить весь свет, голосовой помощник может установить одно взаимодействие с несколькими источниками света в группе, а не последовательность отдельных взаимодействий. Если инициатор создает отдельные взаимодействия с каждым светильником, это может привести к заметной задержке в реагировании устройств. Из-за этого устройства реагируют на команду с заметной задержкой. Это часто называют "эффектом попкорна".

Путь в Matter можно собрать одним из следующих способов:

<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID>        <cluster> <attribute | event | command>

Внутри этих блоков endpoint и cluster также могут содержать операторы подстановочных знаков для выбора нескольких экземпляров узлов.

С ограничением по времени и без

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

Чтобы понять, как работают транзакции с ограничением по времени, нужно разобраться, как происходят атаки с перехватом и почему важны транзакции с ограничением по времени.

Перехват

Атака с перехватом происходит по следующей схеме:

  1. Алиса отправляет Бобу первое сообщение, например действие "Запрос на запись".
  2. Ева, посредник, перехватывает сообщение и не дает Бобу получить его, например, с помощью радиопомех.
  3. Алиса, не получив ответа от Боба, отправляет второе сообщение.
  4. Ева снова перехватывает его и не дает Бобу получить его.
  5. Ева отправляет первое перехваченное сообщение Бобу, как если бы оно было от Алисы.
  6. Боб отправляет ответ Алисе (и Еве).
  7. Ева сохраняет второе перехваченное сообщение для последующего воспроизведения. Поскольку Боб никогда не получал исходное второе перехваченное сообщение от Алисы, он его примет. Это сообщение представляет собой нарушение безопасности, когда сообщение кодирует команду, например "открыть замок".

Чтобы предотвратить такие атаки, в начале транзакции устанавливается максимальное время ожидания. Даже если злоумышленнику удастся выполнить первые шесть шагов вектора атаки, он не сможет повторить сообщение на шаге 7 из-за истечения времени ожидания транзакции.

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

Абстракции SDK

В разделах Транзакции чтения, Транзакции записи и Транзакции вызова приведен общий обзор действий модели взаимодействия, выполняемых SDK.

Разработчик, создающий продукт, в котором используется SDK Matter, обычно не выполняет вызовы для непосредственного выполнения действий. Действия абстрагируются функциями SDK, которые инкапсулируют их во взаимодействие. Однако понимание действий IM важно для того, чтобы инженер хорошо разбирался в возможностях Matter, а также для точного контроля над реализацией SDK.