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

Протокол 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, бинарные форматы или обычный текст.

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

УровеньНазваниеГарантияОсобенности
0At most onceДоставка не более одного разаБез подтверждения, минимальные накладные расходы
1At least onceМинимум одна доставкаПодтверждение (PUBACK), возможны дубли
2Exactly 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
Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru