Гостевая статья MQTT – Нервная Система IoT

Источник:


Сегодня в нашем мире существуют миллиарды интеллектуальных устройств, но что было бы, если эти устройства были взаимосвязаны? Что если эти устройства могли бы взаимодействовать друг с другом так же, как это делают их владельцы, образуя глобальную нервную систему? По сути, это описывает то, что сегодня люди называют Интернетом вещей или IoT. IoT произвел революцию в мире информационных технологий и внедрении инноваций. Углубляясь в IoT необходимо учитывать все, начиная от производительности и заканчивая безопасностью.


Message Queueing Telemetry Transport Protocol (MQTT)

MQTT – это облегченный протокол обмена сообщениями на основе модели публикации-подписки для обмена данными между компьютерами (M2M) поверх протокола TCP / IP. Протокол обеспечивает технологию телеметрии, и разработчики MQTT работают над тем, чтобы соединить развивающийся мир интернета, который, как ожидается, будет производить еще больше разнообразных интеллектуальных устройств. Первая версия протокола MQTT была разработана Стэнфорд-Кларком, IBM и Арленом Ниппером.

Почему MQTT?

MQTT используется Facebook для приложения Messenger, которому требуется постоянное подключение к своим серверам без потери заряда батареи. Он так же требует стабильной работы при низкой пропускной способности сети и имеет небольшой объем кода. Подобные функции являются преимуществами для устройств с небольшим объемом памяти и вычислительной мощности.

Другие примечательные особенности MQTT:

  • Открытый исходный код, отсутствие лицензионных платежей и, следовательно, легкость введения в использование и адаптации
  • Следует модели публикации-подписки и «один-ко-многим»
  • Имеет небольшие заголовки сообщений
  • Имеет несколько уровней качества обслуживания
  • Имеет простые командные сообщения
  • Не зависит от типа данных
  • Возможность отложенного получения сообщений для новых клиентов
  • Механизм поддержания продолжительных клиентских сессий
  • Механизм уведомления клиентов при потере соединения (LWT)
MQTT vs. HTTP

word-image-64.png


Пример топологии MQTT:

http-blog-catchpoint-com-wp-content-uploads-2017.png



Уровни качества обслуживания

Значение QoS определяет способ доставки каждого сообщения, и является обязательным значением для каждого отправляемого сообщения.

QoS 0 (не более одной попытки доставки сообщения)

Когда для сообщения установлено значение QoS, равное 0, ответ не ожидается, и правила повторных попыток его отправления не определены. Сообщение приходит брокеру либо один раз, либо совсем не поступает. Сообщение QoS 0 теряется, если клиент отключен или произошел сбой сервера. MQTT не повторяет попытку отправки. С точки зрения производительности — это самый быстрый способ отправки сообщения с использованием MQTT. Здесь используется команда MQTT PUBLISH и никакие другие команды не передаются для сообщения QoS 0.

3.png


QoS 1 (минимум одна доставка сообщения)

Клиент или сервер MQTT попытается доставить сообщение хотя бы один раз, при этом появляется возможность дублирования сообщений. Когда брокер получает сообщение, отправляется подтверждение PUBACK. Если PUBACK не получен, отправитель снова отправляет сообщение с установленным битом DUP (дубликата). Получив сообщение с установленным битом DUP, посредник повторно публикует сообщение всем своим подписчикам и отправляет другое сообщение PUBACK. Таким образом может быть достигается устойчивость соединения MQTT. Когда происходит PUBLISH, сообщение сохраняется на постоянном уровне, таком как диск, и удаляется при получении PUBACK. Сообщение с QoS 1 имеет идентификатор сообщения в заголовке сообщения.

4.png


QoS 2 (доставка только одного сообщения)

Дополнительные потоки к QoS 1 гарантируют, что сообщение доставляется ровно один раз. Сообщение отправляется в потоке PUBLISH, и сообщение сохраняется клиентом. Сообщение PUBREC отправляется как ответ на PUBLISH. Между тем сообщение заблокировано на сервере. При получении PUBREC PUBREL отправляется на сервер. Получив PUBREL, брокер отправляет сообщения, отправляет PUBCOMP и сбрасывает сохраненное состояние. Сообщение с QoS 2 будет иметь идентификатор сообщения в заголовке сообщения.

5.png



Безопасность в MQTT

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

Безопасность в MQTT подразделяется на несколько уровней.

Сетевой уровень: обеспечение безопасного соединения за счет использования физически защищенной сети или VPN.

Транспортный уровень: использование TLS / SSL для транспортного шифрования, которое обеспечивает защищенную передачу данных и аутентификацию.

Уровень приложения: протокол имеет идентификатор клиента, имя пользователя / пароль, используемые для аутентификации устройства. Другим способом является шифрование полезной нагрузки без использования расширенного транспортного шифрования.

MQTT в действии

Решение для домашнего мониторинга


Классическим примером для приложения на основе MQTT является система домашнего мониторинга. Например, система, определяющая текущую температуру комнатного обогревателя и отправляющая эту информацию на устройство по запросу.

6.png


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

Мы можем отслеживать производительность и доступность устройств IoT, используя протокол MQTT. Для отправки сообщений публикации/подписки через MQTT, можно использовать тест MQTT. Публикуя и подписываясь на сообщения определенной темы и можно измерить сколько времени это займет.

7.png
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!