MQTT Кодек
Кодирование и декодирование пакетов протокола MQTT
Вставьте данные пакетов MQTT, захваченные из Wireshark, сетевого анализатора или логов брокера
Примеры пакетов
Результат декодирования
Введите данные пакета и нажмите Декодировать для просмотра результатов
Просмотр байтов
Результат кодирования
Настройте параметры и нажмите Построить пакет для генерации
Просмотр байтов
Предварительный просмотр структуры пакета
Справочник типов пакетов MQTT
| Код | Название | Направление | Описание |
|---|---|---|---|
| 0x10 | CONNECT | C→S | Запрос соединения от клиента |
| 0x20 | CONNACK | S→C | Подтверждение соединения |
| 0x30 | PUBLISH | C↔S | Публикация сообщения |
| 0x40 | PUBACK | C↔S | Подтверждение публикации (QoS 1) |
| 0x50 | PUBREC | C↔S | Публикация получена (QoS 2 часть 1) |
| 0x60 | PUBREL | C↔S | Публикация освобождена (QoS 2 часть 2) |
| 0x70 | PUBCOMP | C↔S | Публикация завершена (QoS 2 часть 3) |
| 0x80 | SUBSCRIBE | C→S | Запрос подписки |
| 0x90 | SUBACK | S→C | Подтверждение подписки |
| 0xA0 | UNSUBSCRIBE | C→S | Запрос отмены подписки |
| 0xB0 | UNSUBACK | S→C | Подтверждение отмены подписки |
| 0xC0 | PINGREQ | C→S | Запрос пинга (keep-alive) |
| 0xD0 | PINGRESP | S→C | Ответ на пинг |
| 0xE0 | DISCONNECT | C→S | Отключение клиента |
Руководство по протоколу MQTT
Понимание протокола MQTT
MQTT (Message Queuing Telemetry Transport) — это легковесный протокол обмена сообщениями, построенный поверх TCP/IP. Разработанный IBM в 1999 году для мониторинга спутниковых каналов, он стал де-факто стандартом для IoT коммуникаций. Протокол использует паттерн публикации-подписки, где клиенты общаются через центрального брокера, что идеально для нестабильных сетей и устройств с ограниченными ресурсами.
Бинарная структура пакета
Каждый пакет MQTT начинается с фиксированного заголовка (1-5 байт), за которым следует опциональный переменный заголовок и полезная нагрузка. Первый байт содержит тип пакета в битах 7-4 и специфичные для типа флаги в битах 3-0. Поле оставшейся длины использует кодировку переменной длины.
| Диапазон битов | Имя поля | Описание |
|---|---|---|
| 7-4 | Тип пакета | Тип управляющего пакета (1-15) |
| 3-0 | Флаги | Специфичные для типа флаги (DUP, QoS, RETAIN для PUBLISH) |
Кодирование переменной длины
MQTT использует компактную кодировку для поля оставшейся длины. Каждый байт использует 7 бит для данных и 1 бит как флаг продолжения. Значения 0-127 требуют 1 байт, 128-16383 требуют 2 байта, максимум до 4 байт для длин до 268 435 455.
| Байты | Мин. значение | Макс. значение |
|---|---|---|
| 1 | 0 | 127 |
| 2 | 128 | 16,383 |
| 3 | 16,384 | 2,097,151 |
| 4 | 2,097,152 | 268,435,455 |
Детали пакета CONNECT
Пакет CONNECT отправляется первым после установления TCP-соединения. Содержит версию протокола, интервал keep-alive, ID клиента и опциональные учетные данные. Флаги подключения управляют поведением сессии, включая Clean Session, настройку завещания и аутентификацию.
Механика пакета PUBLISH
Пакеты PUBLISH переносят прикладные сообщения. Флаги фиксированного заголовка указывают уровень QoS, поведение удержания и статус дублирования. QoS 0 — отправил и забыл, QoS 1 гарантирует доставку минимум один раз, QoS 2 гарантирует ровно одну доставку через четырёхэтапное рукопожатие.
Гарантии доставки QoS
Практическое применение
- Анализ захваченных пакетов из Wireshark или tcpdump для отладки
- Построение тестовых пакетов для проверки реализаций MQTT брокеров или клиентов
- Изучение внутренностей протокола MQTT через практическую инспекцию пакетов
- Устранение проблем подключения и доставки сообщений IoT устройств
- Генерация примеров пакетов для сценариев автоматизированного тестирования
Версии протокола
Три основные версии MQTT используются в настоящее время: MQTT 3.1 (уровень протокола 3), MQTT 3.1.1 (уровень протокола 4, ISO/IEC 20922:2016) и MQTT 5.0 (уровень протокола 5) с расширенными возможностями. Этот инструмент ориентирован в основном на MQTT 3.1.1 — наиболее широко развёрнутую версию.
Связанные инструменты
MQTT WebSocket-клиент
Браузерный MQTT-клиент для подключения, публикации, подписки и отладки IoT-сообщений через WebSocket
Тестер MQTT топиков
Тестирование и проверка шаблонов MQTT топиков с подстановочными знаками + и # для тестирования подписок
Парсер Modbus RTU/ASCII/TCP
Парсинг, кодирование и отладка кадров протокола Modbus RTU/ASCII/TCP с расчётом CRC-16/LRC и последовательной отладкой
Конвертер систем счисления
Конвертация между двоичной, восьмеричной, десятичной и шестнадцатеричной системами с поддержкой произвольных оснований (2-36)