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 МБ, но на практике редко превышает несколько килобайт.
¶Процесс обмена
- Клиент-издатель подключается к брокеру и публикует сообщение в определённую тему.
- Брокер принимает сообщение и проверяет список подписчиков на эту тему.
- Брокер отправляет сообщение всем подписчикам, которые подписались на данную тему (или на шаблон, включающий её).
¶Уровни качества обслуживания (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.1 | 2010 | Базовая версия, стандартизирована OASIS |
| MQTT v3.1.1 | 2014 | Упрощение, улучшение совместимости, отмена некоторых необязательных полей |
| MQTT v5.0 | 2018 | Расширенная версия: пользовательские свойства, коды причин, потоковая передача, улучшенная обработка ошибок |
¶Применение
¶Интернет вещей (IoT)
MQTT является стандартным протоколом для сбора данных с датчиков и управления устройствами в умных домах, промышленных системах и сельском хозяйстве. Примеры: передача показаний температуры, влажности, давления; управление освещением, замками, насосами.
¶Промышленная автоматизация (Industry 4.0)
Протокол используется для интеграции программируемых логических контроллеров (ПЛК), частотных преобразователей и сенсоров в единые системы мониторинга и управления. MQTT часто применяется в связке с OPC UA.
¶Мобильные приложения и мессенджеры
Из-за низкого потребления трафика MQTT используется для push-уведомлений, чатов и обмена данными в реальном времени. Например, Facebook (продукт Meta, признанной экстремистской и запрещённой в РФ) Messenger использовал MQTT для доставки сообщений на мобильные устройства.
¶Телеметрия и мониторинг
Сбор данных с удалённых объектов (нефтяные вышки, метеостанции, транспорт) через спутниковые или мобильные сети с низкой пропускной способностью.
¶Автомобильная промышленность
Обмен данными между транспортными средствами и облачными сервисами (V2X, телематика).
¶Безопасность
Базовый MQTT не включает встроенного шифрования, поэтому для защиты соединений рекомендуется использовать:
- TLS/SSL — шифрование транспортного уровня (по умолчанию порт 8883).
- Аутентификация — логин/пароль (username/password) или сертификаты X.509.
- Авторизация — права доступа к темам на уровне брокера (ACL — Access Control Lists).
Версия 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 →


