Протокол MQTT¶
MQTT (Message Queuing Telemetry Transport) — лёгкий сетевой протокол передачи сообщений поверх TCP/IP, работающий по модели «издатель — подписчик» (publish/subscribe). Разработан в 1999 году компанией IBM для передачи телеметрических данных по ненадёжным каналам связи с ограниченной пропускной способностью. Протокол широко применяется в системах «Интернета вещей» (IoT), промышленной автоматизации, умном доме и телеметрии.
¶История
Протокол создан в 1999 году инженерами IBM Энди Стэнфорд-Кларком (Andy Stanford-Clark) и компанией Arcom (ныне Eurotech) — Ассеном Наласом (Arlen Nipper). Первоначальная цель — обеспечить надёжный обмен данными между наземными системами и нефтяными платформами через спутниковую связь с высокой задержкой и низкой пропускной способностью.
В 2010 году спецификация MQTT 3.1.1 была опубликована в качестве стандарта организации OASIS. В 2014 году протокол был принят как международный стандарт ISO/IEC 20922. В 2019 году вышла версия MQTT 5.0, добавившая расширенные возможности для масштабируемых систем и улучшенную диагностику ошибок.
¶Принцип работы
MQTT построен на архитектуре «издатель — подписчик» с посредником — брокером (broker). Клиенты не обмениваются данными напрямую: издатели отправляют сообщения брокеру, а брокер пересылает их всем подписчикам, чьи темы совпадают с темой сообщения.
Ключевые элементы:
- Брокер — сервер, принимающий сообщения от издателей и маршрутизирующий их подписчикам. Популярные реализации: Mosquitto, EMQX, HiveMQ, VerneMQ, Astra MQTT.
- Клиент — любое устройство или приложение, подключающееся к брокеру для публикации или подписки.
- Топик (topic) — строковый идентификатор сообщения, например
home/livingroom/temperature. Поддерживается иерархическая структура с разделителем/и подстановочные символы+(один уровень) и#(несколько уровней). - QoS (Quality of Service) — три уровня гарантии доставки: 0 (at most once — доставка не более одного раза), 1 (at least once — минимум одна доставка), 2 (exactly once — ровно одна доставка).
¶Структура сообщения
Пакет MQTT состоит из фиксированного заголовка (от 2 байт), опционального расширенного заголовка и полезной нагрузки (payload). Фиксированный заголовок содержит тип пакета (14 типов: CONNECT, PUBLISH, SUBSCRIBE, PINGREQ и др.), флаги и длину оставшейся части пакета. Полезная нагрузка передаётся в виде неструктурированных байтов — протокол не навязывает формат данных, что позволяет использовать JSON, XML, бинарные форматы или обычный текст.
¶Уровни качества обслуживания
| Уровень | Название | Гарантия | Особенности |
|---|---|---|---|
| 0 | At most once | Доставка не более одного раза | Без подтверждения, минимальные накладные расходы |
| 1 | At least once | Минимум одна доставка | Подтверждение (PUBACK), возможны дубли |
| 2 | Exactly once | Ровно одна доставка | Четырёхфазный обмен, максимальная надёжность |
¶MQTT 5.0
Версия 5.0 расширила возможности протокола: появились причины отклонения сообщений (reason codes), свойства сообщений (user properties), совместная работа нескольких клиентов через один идентификатор (shared subscriptions), улучшенная компрессия дублирующихся данных, увеличенный максимальный размер полезной нагрузки и механизм согласования протокола (protocol negotiation).
¶Применение
MQTT является одним из основных протоколов в экосистеме «Интернета вещей». Стандарт OASIS 20922 рекомендован для IoT-устройств в ряде отраслевых спецификаций. Протокол используется в промышленной автоматизации (обмен данными между ПЛК и SCADA-системами), системах умного дома (интеграция с Home Assistant, «Яндекс Алиса», «Умный дом» от «Яндекса»), телеметрии транспорта, мониторинге энергосистем, агротехе и медицинском мониторинге.
В России MQTT применяется в проектах промышленного IoT и умного дома. Разработчики из РФ создают собственные реализации брокеров и клиентских библиотек на различных языках программирования (C, C++, Python, Java, Go, JavaScript).
¶Достоинства и ограничения
К достоинствам протокола относятся: минимальный размер заголовка (от 2 байт), низкое энергопотребление, поддержка слабых каналов связи, встроенная система качества обслуживания, масштабируемость через иерархические топики и возможность работы через TLS/SSL.
Ограничения: отсутствие встроенной системы обнаружения устройств (service discovery), зависимость от брокера как единой точки маршрутизации (устраняется кластеризацией), а также относительно позднее появление в MQTT 5.0 механизма контроля потока (flow control).
¶См. также
- AMQP
- CoAP
- Модбас
- Промышленный интернет вещей
¶Источники
- OASIS Standard: Message Queue Telemetry Transport (MQTT) v5.0
- ISO/IEC 20922:2016 — Information technology — Message Queuing Telemetry Transport (MQTT)
- mqtt.org — официальный сайт протокола
- Documentation of Mosquitto, EMQX, HiveMQ brokers
