MQTT (Message Queuing Telemetry Transport) — лёгкий сетевой протокол обмена сообщениями, предназначенный для передачи данных между устройствами в распределённых системах, включая приложения интернета вещей (IoT). Протокол ориентирован на работу в сетях с ограниченной пропускной способностью, высокой задержкой или нестабильным соединением.
MQTT стандартизирован международной организацией OASIS и является открытым протоколом.
Терминология
MQTT представляет собой прикладной протокол обмена сообщениями, реализующий модель публикации и подписки (publish/subscribe). В отличие от клиент-серверных протоколов, MQTT отделяет отправителей сообщений от получателей посредством промежуточного узла — брокера сообщений.
Назначение и область применения
MQTT применяется для передачи телеметрических данных, событий и управляющих команд между устройствами и сервисами. Основные области применения включают:
- системы интернета вещей;
- промышленную автоматизацию;
- мониторинг и управление инфраструктурой;
- телеметрию и сбор данных;
- облачные сервисы и распределённые приложения.
Протокол не предназначен для передачи больших объёмов данных или мультимедийного контента.
Архитектура и модель взаимодействия
MQTT использует архитектуру publish/subscribe, в которой выделяются следующие компоненты:
- Broker — центральный узел, принимающий сообщения от клиентов и распределяющий их подписчикам;
- Publisher — клиент, публикующий сообщения;
- Subscriber — клиент, подписывающийся на сообщения.
Клиенты взаимодействуют друг с другом исключительно через брокер.
Принцип работы
Обмен сообщениями в MQTT осуществляется по логическим каналам, называемым топиками. Каждый топик идентифицирует категорию сообщений. Клиенты могут публиковать сообщения в топики и подписываться на интересующие их топики.
Сообщения передаются поверх транспортного протокола TCP. Для защиты соединений может использоваться шифрование с применением TLS.
Качество обслуживания (QoS)
MQTT поддерживает три уровня качества обслуживания сообщений:
- QoS 0 — доставка без подтверждения;
- QoS 1 — доставка как минимум один раз;
- QoS 2 — доставка ровно один раз.
Выбор уровня QoS позволяет балансировать между надёжностью доставки и сетевой нагрузкой.
Протокольный стек
MQTT функционирует на прикладном уровне модели OSI и использует:
- транспортный уровень — TCP;
- механизмы безопасности — TLS (опционально);
- прикладной уровень — MQTT.
Существует также вариант MQTT-SN, предназначенный для сетей с ограниченными ресурсами и не использующий TCP напрямую.
Версии протокола
- MQTT 3.1.1 — широко распространённая версия, стандартизированная OASIS;
- MQTT 5.0 — расширенная версия, включающая улучшенную обработку ошибок, свойства сообщений и расширенные механизмы управления сессиями.
Безопасность
MQTT не включает встроенного механизма шифрования, однако поддерживает использование TLS для защиты соединений. Аутентификация клиентов может осуществляться с использованием имени пользователя и пароля, сертификатов или внешних механизмов безопасности.
Производительность и ограничения
MQTT характеризуется низким сетевым и вычислительным накладным расходом, что делает его пригодным для устройств с ограниченными ресурсами. Ограничениями протокола являются зависимость от брокера и необходимость устойчивого транспортного соединения.
Сравнение с другими протоколами
MQTT часто сравнивается с протоколами HTTP, AMQP и CoAP. Основным отличием MQTT является модель publish/subscribe и оптимизация для передачи небольших сообщений в условиях нестабильных сетей.
Заблуждения
Распространённым заблуждением является восприятие MQTT как прямого аналога HTTP. MQTT предназначен для событийного обмена сообщениями и не ориентирован на запросно-ответную модель взаимодействия.
MQTT-SN (MQTT for Sensor Networks)
MQTT-SN (Message Queuing Telemetry Transport for Sensor Networks) — расширение протокола MQTT, разработанное для использования в сенсорных сетях и средах с ограниченными ресурсами, где применение TCP/IP затруднено или нецелесообразно.
В отличие от классического MQTT, MQTT-SN не требует использования TCP и может работать поверх альтернативных транспортных протоколов, включая UDP и специализированные канальные технологии (например, IEEE 802.15.4).
Назначение
MQTT-SN предназначен для устройств с крайне ограниченными вычислительными ресурсами, малым объёмом памяти и низким энергопотреблением, таких как беспроводные датчики и встроенные системы.
Архитектура
MQTT-SN сохраняет модель публикации и подписки, но вводит дополнительный компонент:
- MQTT-SN Gateway — шлюз, преобразующий сообщения MQTT-SN в стандартный MQTT и обеспечивающий взаимодействие с брокером MQTT.
Устройства MQTT-SN (клиенты) взаимодействуют с брокером исключительно через шлюз.
Особенности протокола
К ключевым особенностям MQTT-SN относятся:
- отсутствие зависимости от TCP;
- поддержка коротких идентификаторов топиков вместо строковых имён;
- оптимизация формата сообщений для снижения накладных расходов;
- возможность работы в сетях с периодическим соединением.
Применение
MQTT-SN применяется в:
- беспроводных сенсорных сетях;
- системах промышленного мониторинга;
- автономных устройствах интернета вещей;
- сетях с высокой задержкой или нестабильным соединением.
Ограничения
MQTT-SN не получил такого же широкого распространения, как классический MQTT, и требует наличия специализированных шлюзов для интеграции с существующей MQTT-инфраструктурой.
Сравнение MQTT, CoAP и HTTP
| Характеристика | MQTT | CoAP | HTTP |
|---|---|---|---|
| Модель взаимодействия | Publish/Subscribe | Запрос–ответ | Запрос–ответ |
| Уровень модели OSI | Прикладной | Прикладной | Прикладной |
| Транспортный протокол | TCP (TLS опционально) | UDP (DTLS опционально) | TCP (TLS для HTTPS) |
| Ориентация на IoT | Да | Да | Ограниченно |
| Накладные расходы | Низкие | Низкие | Высокие |
| Работа при нестабильном соединении | Поддерживается | Поддерживается | Ограничена |
| Центральный узел | Брокер | Не требуется | Сервер |
| Поддержка событийной модели | Да | Ограниченно | Нет |
| Качество доставки сообщений | QoS 0–2 | Подтверждения | Зависит от реализации |
| Энергоэффективность | Высокая | Высокая | Низкая |
| Типичные области применения | IoT, телеметрия | IoT, встроенные системы | Веб-приложения, API |
Обобщение
- MQTT оптимален для событийного обмена сообщениями и телеметрии в распределённых системах.
- CoAP ориентирован на REST-подобное взаимодействие в сетях с ограниченными ресурсами.
- HTTP применяется преимущественно в веб-ориентированных и сервисных архитектурах и менее пригоден для автономных IoT-устройств.
