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

Message Queuing Telemetry Transport

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

История

Протокол MQTT был разработан в 1999 году инженерами компании IBM Энди Стэнфорд-Кларком (Andy Stanford-Clark) и Arcom (ныне Cirrus Link) для мониторинга нефтепроводов. Первоначальная версия предназначалась для работы по спутниковым каналам с высокой задержкой и низкой пропускной способностью. Название «MQTT» происходит от «MQ» (Message Queue — очередь сообщений) и «TT» (Telemetry Transport — телеметрическая транспортировка), хотя протокол не использует традиционную модель очередей.

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

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

MQTT реализует модель «издатель-подписчик» (pub/sub), где все сообщения проходят через центральный узел — брокер (MQTT broker). В отличие от прямого соединения клиент-клиент, брокер принимает сообщения от издателей и распределяет их подписчикам на основе тем (topics).

Основные компоненты

  • Клиент (Client) — любое устройство или приложение, подключающееся к брокеру. Клиент может быть как издателем (publisher), так и подписчиком (subscriber), или одновременно выполнять обе роли.
  • Брокер (Broker) — серверное программное обеспечение, отвечающее за фильтрацию, маршрутизацию и доставку сообщений. Популярные реализации: Mosquitto, EMQX, VerneMQ, HiveMQ.
  • Тема (Topic) — иерархическая строка, определяющая канал сообщения. Например, home/kitchen/temperature. Темы поддерживают шаблоны с символами + (один уровень) и # (все вложенные уровни).
  • Сообщение (Message) — полезные данные (payload), обычно в бинарном или текстовом формате (JSON, XML, CBOR). Размер сообщения в классической версии ограничен 256 МБ, но на практике редко превышает несколько килобайт.

Процесс обмена

  1. Клиент-издатель подключается к брокеру и публикует сообщение в определённую тему.
  2. Брокер принимает сообщение и проверяет список подписчиков на эту тему.
  3. Брокер отправляет сообщение всем подписчикам, которые подписались на данную тему (или на шаблон, включающий её).

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

MQTT определяет три уровня надёжности доставки сообщений:

  • QoS 0 (At most once) — сообщение доставляется не более одного раза, без подтверждения. Максимальная скорость, возможна потеря данных.
  • QoS 1 (At least once) — сообщение доставляется минимум один раз, с подтверждением от получателя. Возможны дубликаты.
  • QoS 2 (Exactly once) — гарантированная доставка ровно один раз, с четырёхэтапным подтверждением. Минимальная скорость, максимальная надёжность.

Выбор QoS зависит от критичности данных: для датчиков температуры допустим QoS 0, для команд управления насосом — QoS 1 или 2.

Сеансы и сохранение состояния

MQTT поддерживает два типа сеансов:

  • Чистый сеанс (Clean Session) — при отключении клиента все данные о подписках и неотправленных сообщениях удаляются.
  • Постоянный сеанс (Persistent Session) — брокер сохраняет состояние клиента (подписки, очередь сообщений) на период отключения. При повторном подключении клиент получает все накопленные сообщения.

Также существует механизм Retained Messages (сохранённые сообщения): брокер хранит последнее сообщение по каждой теме и отправляет его новым подписчикам немедленно.

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

ВерсияГодКлючевые особенности
MQTT v3.12010Базовая версия, стандартизирована OASIS
MQTT v3.1.12014Упрощение, улучшение совместимости, отмена некоторых необязательных полей
MQTT v5.02018Расширенная версия: пользовательские свойства, коды причин, потоковая передача, улучшенная обработка ошибок

Применение

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

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

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

Протокол используется для интеграции программируемых логических контроллеров (ПЛК), частотных преобразователей и сенсоров в единые системы мониторинга и управления. MQTT часто применяется в связке с OPC UA.

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

Из-за низкого потребления трафика MQTT используется для push-уведомлений, чатов и обмена данными в реальном времени. Например, Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ) Messenger использовал MQTT для доставки сообщений на мобильные устройства.

Телеметрия и мониторинг

Сбор данных с удалённых объектов (нефтяные вышки, метеостанции, транспорт) через спутниковые или мобильные сети с низкой пропускной способностью.

Автомобильная промышленность

Обмен данными между транспортными средствами и облачными сервисами (V2X, телематика).

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

Базовый MQTT не включает встроенного шифрования, поэтому для защиты соединений рекомендуется использовать:

Версия MQTT 5.0 ввела поддержку аутентификации с расширенными механизмами (например, SCRAM).

Критика и ограничения

  • Централизация — брокер является единой точкой отказа. Для отказоустойчивости используют кластеризацию брокеров (например, EMQX поддерживает распределённую архитектуру).
  • Отсутствие встроенного шифрования — требуется дополнительная настройка TLS.
  • Размер сообщений — хотя протокол лёгкий, заголовок MQTT минимален (2 байта), но полезная нагрузка может быть большой, что неэффективно для очень маленьких пакетов.
  • Задержки при QoS 2 — четырёхэтапное подтверждение увеличивает время доставки.
  • Сложность обработки дубликатов — при QoS 1 возможны повторные сообщения, что требует логики на стороне приложения.

Альтернативы

  • AMQP (Advanced Message Queuing Protocol) — более тяжёлый, но с поддержкой очередей, транзакций и маршрутизации.
  • CoAP (Constrained Application Protocol) — UDP-протокол для сверхограниченных устройств (например, на батарейках).
  • HTTP/2 и WebSocket — для веб-приложений, но с большим оверхедом.
  • DDS (Data Distribution Service) — децентрализованный протокол для реального времени, используется в авиации и обороне.

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

  • MQTT был изначально разработан для мониторинга нефтепроводов длиной более 10 000 км в пустыне.
  • Протокол поддерживает «Will Message» (последнее сообщение) — если клиент неожиданно отключается, брокер публикует заданное сообщение от его имени.
  • В 2019 году MQTT был признан одним из самых популярных протоколов IoT по опросу Eclipse IoT Working Group.
  • Некоторые реализации MQTT (например, Mosquitto) способны обрабатывать более 1 миллиона сообщений в секунду на одном сервере.

Источники

  • OASIS Standard: MQTT Version 3.1.1, 2014.
  • OASIS Standard: MQTT Version 5.0, 2018.
  • ISO/IEC 20922:2016 — Information technology — Message Queuing Telemetry Transport (MQTT) v3.1.1.
  • Eclipse Paho Documentation — MQTT Client Libraries.
  • HiveMQ MQTT Essentials — технические статьи и руководства.
  • Andrew Banks, Rahul Gupta. «MQTT Version 3.1.1», OASIS, 2014.

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

На главную BFOmetr →