Что такое протокол MQTT?

2022-12-02 Промышленное  Комментариев нет

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

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

Для решения задач взаимодействия между собой различных устройств и объединения их в одну сеть были разработаны концепции, которые получили общее название Интернет вещей (Internet of Things, IoT), благодаря которым технически можно подключить к сети самые разнообразные устройства – от датчиков или актуаторов до бытовой техники.

Для реализации обмена информацией в IoT также используются свои протоколы связи, одним из которых и является MQTT.

История

Протокол MQTT (от англ. Message Queuing Telemetry Transport) был разработан еще 1999 г. Энди Стэнфорд-Кларком из компании IBM в сотрудничестве с  Арленом Ниппером  для проекта по созданию новых нефтепроводов.  Их целью было сделать более доступное и безопасное подключение промышленных устройств к удаленным серверам для мониторинга и управления, так как не один из существующих на тот момент протоколов не соответствовал в полной мере предъявляемым требованиям.

Впервые протокол MQTT был опубликован консорциумом OASIS (Organization for the Advancement of Structured Information Standards) в октябре 2014 г. В июне 2016 г. стандарт был признан Международной организацией по стандартизации (ISO).

В настоящее время есть два варианта спецификации MQTT:

  • MQTT v3.1 — основная спецификация для сетей на базе TCP/IP
  • MQTT-S v1.2 для датчиков и встраиваемых устройств в сетях, отличных от TCP/IP, например ZigBee.

Протокол MQTT

Протокол MQTT является сетевым протоколом на основе шаблона публикации/подписки, работающим поверх TCP/IP. Благодаря этому он идеально подходит для решения задач в системах интернета вещей или межмашинного взаимодействия  M2M (от англ. Machine to Machine).

Наряду с OPC UA, MQTT является, наверное, основой революции промышленного Интернета вещей (IIoT) и, безусловно, одним из ключевых протоколов телеметрии.

MQTT — это очень полезный инструмент, особенно когда мы объединяем мир автоматизации с виртуальным миром IT.

С одной стороны, он не связывает нас с определенным производителем, платформой или операционной системой, а с другой является масштабируемым и не затратным в реализации.

В мире промышленной автоматизации, где порой требуется информация обо всех деталях процесса производства, такой протокол, как MQTT является весьма перспективным. За счет применения шлюзов промышленного интернета вещей (IIoT GateWay), в качестве которых могут применяться HMI панели, коммуникационные модули, IIoT контроллеры, можно производить сбор, анализ и передачу данных со всех задействованных  устройств и передавать их в IT систему верхнего уровня или облако для дальнейшего анализа и мониторинга.

Преимущества и недостатки MQTT

Основными преимуществами протокола MQTT являются:

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

Наряду с достоинствами, у MQTT есть, конечно, и свои недостатки, к которым в первую очередь можно отнести:

  • ограниченное количество устройств с поддержкой MQTT
  • необходимость запуска брокера

Основные характеристики протокола

К основным характеристикам и отличительным особенностям протокола MQTT следует отнести:

  • скорость передачи данных до 1000 Мбит/с
  • количество устройств подключенных к одной сети зависит, прежде всего, от брокера, и их может быть более 1000
  • в качестве среды передачи используется Ethernet
  • передача данных защищена с помощью SSL на уровне самого брокера и, кроме того, авторизация на уровне доступа для брокера.

Реализация

Центральным элементом коммуникации является брокер (Broker), выполняющий роль сервера, который отвечает за обработку и отправку всех сообщений.

Каждый клиент, который хочет переслать сообщение через сервер, в терминологии протокола MQTT,  является издателем (Publisher).

Брокер фильтрует входящие сообщения и перенаправляет клиентам, принимающим сообщения. Клиенты, зарегистрированные в брокере и подписанные на соответствующие топики, называются подписчики (Subscriber).

Напрямую издатель и подписчик сообщения не передают и между собой никак не связаны. Для взаимодействия с брокером устройства используют стандартизированный набор сообщений:

  • Connect – установить соединение с брокером
  • Disconnect – разорвать соединение с брокером
  • Publish – опубликовать данные в топик на брокере
  • Subscribe – подписаться на топик на брокере
  • Unsubscribe – отписаться от топика

Сервер MQTT отвечает за аутентификацию и авторизацию клиентов. После успешной авторизации и аутентификации, клиенты смогут стать издателями и подписчиками.

Упрощенно связь между всеми участниками можно представить следующим образом:

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

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

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

Структура сообщения

В протоколе MQTT существует 15 типов сообщений, которые могут состоять из нескольких частей – фиксированного заголовка, переменного заголовка, данных «нагрузки».

Фиксированный заголовок

Фиксированный заголовок присутствует во всех типах сообщений. Четыре старших бита первого байта используются как специфические флаги:

MQTT Фиксированный заголовок

DUP – устанавливается, когда клиент или брокер MQTT утвердит повторную отправку пакета (используется в PUBLISH, SUBSCRIBE, UNSUBSCRIBE, PUBREL). Если флаг установлен, заголовок переменной должен содержать идентификатор сообщения.

QoS – качество обслуживания (0,1,2).

RETAIN – при публикации данных с установленным флагом retain, брокер сохранит его. При следующей подписке на этот топик брокер незамедлительно отправит сообщение с этим флагом. Используется только в сообщениях с типом PUBLISH.

Переменный заголовок

Переменный заголовок присутствует в некоторых типах заголовков и содержит следующие данные:

  • Packet identifier  - Идентификатор пакета – присутствует в большинстве типов сообщений.
  • Protocol name  - Название протокола – происходит только в типе сообщения CONNECT.
  • Protocol version  - Версия протокола – происходит только в типе сообщения CONNECT.
  • Connect  flags  - Подключенные флаги – флаги, которые определяют поведение клиента во время подключения.

MQTT Переменный заголовок

User name – если флаг установлен, тогда имя пользователя должно находиться в «нагрузке».

Password – если флаг установлен, то пароль должен быть указан в «нагрузке».

Will Retain – если флаг установлен, то Брокер хранит сообщение.

Will QoS – определяет качество услуги для сообщения.

Will Flag – если при установленном флаге  клиент отключится от сервера без отправки команды DISCONNECT, Брокер извещает всех подключенных клиентов об этом событии с помощью Will Message.

Clean Session – если флаг не установлен, брокер хранит сеанс, а также все подписки клиента, а при следующем подключении с заказчиком отправляет все сообщения с QoS1 и QoS2, которые были получены через брокера, когда клиент был отключен. Если флаг установлен, то при попытке установления следующего соединения клиент должен подписаться на все темы.

Данные, «нагрузка»

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

Темы

Важным элементом коммуникации MQTT являются темы, использующиеся для фильтрации сообщений.

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

Однако, если наши файлы сохранить в соответствующих тематических каталогах, это поиск станет намного проще.

Предположим, что у нас на объекте есть 100 датчиков.

Если мы обратимся к датчику в таком виде:

sensor1

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

Если же мы отправим такое сообщение:

machine1/sensor/temperature/motor1

то, исходя из темы, мы в состоянии определить, что это машина1 и датчик температуры двигателя1.

Для ввода названия темы, можно использовать любые символы UTF-8. Темы состоят из одного или нескольких уровней, которые разделены между собой символом «/».

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

Далее мы разберем, что такое уровни QoS (англ. Quality of Service”).

QoS  представляет собой технологию предоставления различным классам трафика различных приоритетов в обслуживании.

Спецификация протокола MQTT определяет 3 уровня качества обслуживания.

Уровень 0 – переданное сообщение не требует никакого подтверждения доставки, после его отправки мы забываем о том.

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

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

MQTT через WebSockets

MQTT через WebSockets позволяет браузеру использовать все функции, которые предлагает MQTT.

Такое решение позволяет:

  • Отображать оперативную информацию с устройства или датчика.
  • Получать push-уведомления (например, предупреждение о тревоге или критическом состоянии).
  • Смотреть текущее состояние устройств с LWT и сохраненные сообщения.
  • Эффективно взаимодействовать с мобильными веб-приложениями.

WebSocket — это сетевой протокол, который обеспечивает двунаправленную связь между браузером и веб-сервером.

Протокол был стандартизирован в 2011 году, и все современные браузеры обеспечивают его встроенную поддержку. Подобно MQTT, протокол WebSocket основан на TCP.

Использование WebSocket  является хорошим методом передачи данных по MQTT, так как он обеспечивает двусторонний обмен данными, упорядоченную и без потерь связь.

Для связи с брокером MQTT через WebSockets брокер должен иметь возможность обрабатывать собственные WebSockets. Не рекомендуется использовать веб-сервер для соединения WebSocket с брокером MQTT.

На сегодняшний день мы пока не можем говорить о чистом протоколе MQTT в браузере, потому что невозможно открыть необработанное TCP-соединение.  Решением проблемы может быть реализация Socket API, однако пока лишь немногие браузеры реализуют этот API.

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

Защиту протокола MQTT можно разделить на три уровня.

Уровень сети

Одним из способов обеспечения надежного соединения является применение физически защищенной сети или VPN для всех коммуникаций между клиентами и брокерами.

Транспортный уровень

Если наша главная цель состоит в конфиденциальности передаваемых данных, для шифрования используется протокол TLS/SSL. Этот метод эффективно защищает ваши данные от считывания в режиме передачи и обеспечивает проверку подлинности сертификата клиента для проверки личности обеих сторон.

Уровень приложения

Протокол MQTT обеспечивает идентификатор клиента и учетные данные в виде логина и пароля для проверки подлинности на уровне приложения. Авторизация или контроль определяется конкретной реализацией брокера.

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

Transport Layer Security — (TLS) — это протокол шифрования, который обеспечивает безопасную и зашифрованную связь между приложением клиента и сервера. Одновременно протокол TLS обеспечивает конфиденциальность данных. Подключенные устройства используют сертификаты для взаимной проверки подлинности.

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

Итог

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

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

С помощью шифрования данных по протоколу SSL/TLC непосредственно в системе управления, а также возможности использования безопасного туннелирования VPN значительно повышается уровень безопасности наших данных.

Комментарии

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>