Открыть сервис

Протокол MQTT

MQTT (Message Queuing Telemetry Transport) — это сетевой протокол прикладного уровня, работающий поверх стека TCP/IP и реализующий модель обмена сообщениями по схеме «издатель-подписчик» (publish-subscribe). Протокол разработан для обеспечения лёгкого, надёжного и экономичного обмена данными в условиях ограниченной пропускной способности каналов связи, высокой задержки или нестабильного соединения. MQTT ориентирован на использование в системах Интернета вещей (IoT), M2M-коммуникациях (machine-to-machine), промышленной автоматизации и мобильных приложениях.

История

Протокол MQTT был разработан в 1999 году Энди Стэнфорд-Кларком (Andy Stanford-Clark) из IBM и Арленом Ниппером (Arlen Nipper) из компании Eurotech. Первоначальной целью было создание протокола для мониторинга нефтепроводов через спутниковую связь, которая отличалась высокой стоимостью и низкой пропускной способностью. Требовался минимальный размер служебных данных и низкое энергопотребление устройств.

В 2010 году IBM передала спецификацию протокола в организацию OASIS (Organization for the Advancement of Structured Information Standards) для стандартизации. В 2014 году была опубликована версия MQTT 3.1.1, ставшая международным стандартом OASIS. В 2019 году вышла версия MQTT 5.0, которая расширила функциональность протокола, добавив поддержку метаданных, улучшенное управление сессиями и более гибкие механизмы обработки ошибок.

Наибольшее распространение MQTT получил в индустрии IoT, где используется для сбора данных с датчиков, управления исполнительными механизмами и обмена сообщениями между устройствами. В России протокол применяется в системах «умного дома», промышленной телеметрии, логистике и мониторинге транспорта.

Архитектура и принцип работы

Модель «издатель-подписчик»

MQTT использует асимметричную архитектуру, в которой все сообщения проходят через центральный узел — брокер (broker). Устройства-клиенты делятся на две роли:

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

Темы (Topics)

Тема — это иерархическая строка, определяющая канал обмена сообщениями. Темы имеют структуру, разделённую слешами (например, home/kitchen/temperature). MQTT поддерживает два типа масок для подписки:

Качество обслуживания (QoS)

MQTT определяет три уровня качества обслуживания (Quality of Service), которые гарантируют доставку сообщений:

Сессии и постоянные подписки

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

Последняя воля (Last Will and Testament)

Клиент может при подключении указать сообщение «последней воли» (will message). Если брокер обнаруживает, что клиент неожиданно отключился (например, из-за потери соединения), он публикует это сообщение от имени клиента. Это позволяет другим устройствам узнать о сбое.

Версии протокола

MQTT 3.1.1 (2014)

Базовая стабильная версия, ставшая стандартом OASIS. Поддерживает все основные функции: темы, QoS 0–2, постоянные сессии, последнюю волю. Минимальный размер заголовка — 2 байта. Максимальный размер полезной нагрузки — 256 МБ.

MQTT 5.0 (2019)

Значительное обновление, добавившее:

Применение

Интернет вещей (IoT)

MQTT является стандартом де-факто для IoT-платформ. Протокол используется для сбора данных с датчиков температуры, влажности, давления, вибрации, а также для управления исполнительными устройствами (реле, клапаны, двигатели). Примеры российских IoT-платформ, поддерживающих MQTT: «Стриж», «Wiren Board», «Jeti».

Промышленная автоматизация

В промышленности MQTT применяется для интеграции программируемых логических контроллеров (ПЛК), частотных преобразователей и сенсоров в единую систему мониторинга. Протокол поддерживается многими промышленными шлюзами и SCADA-системами.

Умный дом

В системах «умного дома» MQTT используется для обмена сообщениями между контроллерами, датчиками и исполнительными устройствами. Популярные платформы: Home Assistant, OpenHAB, MajorDoMo.

Мобильные приложения

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

Логистика и транспорт

Протокол используется для мониторинга местоположения, состояния грузов и параметров работы транспортных средств (скорость, расход топлива, температура в рефрижераторах).

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

Шифрование

MQTT не имеет встроенного шифрования, но стандартной практикой является использование поверх TCP-соединения протокола TLS (Transport Layer Security). Это обеспечивает защиту от перехвата и подмены данных. Рекомендуется использовать TLS версии 1.2 или 1.3.

Аутентификация

Брокеры MQTT поддерживают несколько способов аутентификации клиентов:

Авторизация

Брокеры могут ограничивать доступ клиентов к определённым темам на основе правил. Например, клиент с ролью «датчик» может только публиковать сообщения в тему sensors/#, но не подписываться на actuators/#.

Уязвимости

Основные угрозы для MQTT:

Для защиты рекомендуется использовать брандмауэры, ограничивать количество подключений с одного IP-адреса, применять TLS и регулярно обновлять программное обеспечение брокера.

Реализации

Брокеры

Клиентские библиотеки

Сравнение с другими протоколами

ХарактеристикаMQTTHTTPCoAPAMQP
Модель обменаИздатель-подписчикЗапрос-ответЗапрос-ответ / Публикация-подпискаОчередь сообщений / Публикация-подписка
Размер заголовка2–14 байт200–800 байт4 байта8–16 байт
ТранспортTCPTCPUDPTCP
QoS3 уровняНет2 уровня3 уровня
ЭнергопотреблениеНизкоеВысокоеОчень низкоеСреднее
Типичное применениеIoT, M2MВебIoT (ограниченные устройства)Корпоративные системы

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →