Анализ сообщений MQTT 5.0 01: CONNECT и CONNACK
Анализ сообщений MQTT 5.0 01: CONNECT и CONNACK

существовать MQTT 5.0 Во введении к статье мы представили MQTT 报文由фиксированный заголовок、переменный заголовокиполезная Нагрузка состоит из трех частей, а также переменных байтовых целых чисел и атрибутов. MQTT Общие понятия в сообщениях. Теперь о существовании мы далее представим состав каждого типа сообщения в соответствии с фактическим использованием. Сначала мы сосредоточимся на построении MQTT Связанные сообщения.

Если мы хотим использовать MQTT Для общения первым шагом должно быть установление MQTT соединение при установлении MQTT Для соединения требуются два управляющих пакета, которые CONNECT сообщение и CONNACK сообщение. СОЕДИНЯТЬ Сообщение клиентскоеи Создание серверасетьПосле подключения,Первое управляющее сообщение, отправленное на сервер,Используется для инициации запросов на соединение. Сервер вернет CONNACK.

Пример сообщения

мы используем MQTTX CLI для публики MQTT Сервер инициирует соединение. При этом устанавливаем версию протокола. MQTT 5.0,Clean Start установлен на 1,Session Expiry Interval установлен на 300 Секунды, держи Alive установлен на 60, выбрано имя пользователя и пароль соответственно. на admin и общественный, соответствующий MQTTX CLI Команда:

Язык кода:javascript
копировать
mqttx conn --hostname broker.emqx.io --mqtt-version 5 \  --session-expiry-interval 300 --keepalive 60 --username admin --password public

Ниже показано сообщение CONNECT, отправленное CLI MQTTX, полученное с помощью инструмента Wireshark. В среде Linux вы можете использовать команду tcpdump, чтобы сначала захватить сообщение, а затем импортировать его в Wireshark для просмотра:

Язык кода:javascript
копировать
10 2f 00 04 4d 51 54 54 05 c2 00 3c 05 11 00 00 01 2c 00 0e 6d 71 74 74 78 5f 30 63 36 36 38 64 30 64 00 05 61 64 6d 69 6e 00 06 70 75 62 6c 69 63

Но это строка шестнадцатеричных байтов, которую нелегко понять, если ее не преобразовать в следующий формат:

Мы также зафиксировали сообщение CONNACK, возвращаемое общедоступным сервером MQTT:

Язык кода:javascript
копировать
20 13 00 00 10 27 00 10 00 00 25 01 2a 01 29 01 22 ff ff 28 01

существования После анализа этой строки данных сообщения мы видим, что CONNACK сообщение Reason Code для 0,выразить соединение успешно установлено,Следующие атрибуты дают список функций, поддерживаемых сервером.,Например, максимальная поддерживаемая длина сообщения,Поддерживать ли сохранениеинформацияи т. д.:

Конечно, Вайршарк Фактически, мы уже перечислили значения каждого поля в сообщении. CONNECT и Структура сообщения Введение в CONNACK в сочетании с Wireshark Судя по картинке результатов захвата пакетов, вы быстро освоите эти два пакета:

Структура сообщения CONNECT

фиксированный заголовок

CONNECT сообщениефиксированный заголовок, расположенный на высоте первого байта 4 Значение поля типа сообщения должно быть для 1 (0b0001), первый байт средний-низкий 4 Положение фиксированное и все для 0。

Итак, ПОДКЛЮЧАЙТЕСЬ Сообщение Значение первого байта должно быть для 0x10,Мы можем использовать это, чтобы определить, является ли сообщение сообщением CONNECT.

переменный заголовок

CONNECT сообщениепеременный заголовок содержит следующие поля по порядку:

  • Protocol Name:это Строка в кодировке UTF-8,Используется для выражения имени протокола. существуют MQTT Medium,Строка в кодировке Первые два байта UTF-8 единообразно используются для указания длины последующих символьных данных. MQTT 3.1.1 и MQTT 5.0 Имя протокола фиксировано для MQTT,Таким образом, соответствующие шестнадцатеричные байтывыражать Полное содержанието есть 00 04 4d 51 54 544d 51 54 54 то есть MQTT Эта струнная пара должна ASCII ценить. самый ранний MQTT 3.1 Имя протокола в MQIsdp,Так что это соответствует 00 06 4d 51 49 73 64 70
  • Protocol Version:это单个字节长度из无符号整数,используется длявыражать Версия протокола На данный момент существует только три возможных значения: 3. выражать MQTT 3.1,4 выражать MQTT 3.1.1,5 выражать MQTT 5.0。
  • Connect Flags:Идентификатор соединения,у него только один байт,Но содержит несколько строк управления или полезных инструкций. Существуют ли параметры в некоторых полях в нагрузке.
  • User Name Flag:используется для обозначенияполезная Содержит ли нагрузка имя пользователя Поле。
  • Password Flag:используется для обозначенияполезная Необходимо ли включать поле пароля.
  • Will Retain:используется для обозначения遗嘱информациялидлябронироватьинформация。
  • Will QoS:используется для обозначения遗嘱информацияиз QoS。
  • Will Flag:используется для обозначенияполезная Содержит ли нагрузка соответствующие поля завещания.
  • Clean Start:используется для обозначения当前连接是一个新из会话还是一个已存существовать会话из延续,Это определяет, будет ли сервер создавать новый сеанс напрямую или попытается повторно использовать существующий сеанс.
  • Reserved:этобронировать位,Его значение должно быть для 0.
  • Keep Alive:это双字节长度из无符号整数,Используется для выражения клиентом отправки двух соседних элементов управления сообщение максимального интервала времени.
  • Properties:В таблице ниже перечислены CONNECT Сообщение Все имеющиеся объекты.

Identifier

Property Name

Type

0x11

Session Expiry Interval

четырехбайтовое целое число

0x21

Receive Maximum

двухбайтовое целое число

0x27

Maximum Packet Size

четырехбайтовое целое число

0x22

Topic Alias Maximum

двухбайтовое целое число

0x19

Request Response Information

одиночный байт

0x17

Request Problem Information

одиночный байт

0x26

User Property

Пара строк UTF-8

0x15

Authentication Method

Строка в кодировке UTF-8

0x16

Authentication Data

двоичные данные

полезная нагрузка

CONNECT Сообщение полезноя Поля в нагрузке, кроме Client ID Кроме этого, остальные поля являются необязательными, и будут ли они сохранены, зависит от переменного. заголовокиз Connect Flags Значение соответствующего бита флага в . Но если они сохраняются, им необходимо следовать. Client ID、Will Properties、Will Topic、Will Payload、User Name、Password появиться в порядке.

Структура сообщения CONNACK

Исправлено сообщение

фиксированный Высота первого байта заголовка 4 Значение местадля 2 (0b0010), что указывает на то, что это CONNACK сообщение.

переменный заголовок

CONNACK сообщениепеременный заголовок содержит следующие поля по порядку:

  • Connect Acknowledge Флаги: флаг подтверждения соединения.
    • Reserved (Bit 7 - 1): Зарезервированный бит, должен быть установлен на 0.
    • Session Present (Bit 0):используется для обозначения服务端ли正существовать Использовать сохраненныесуществоватьиз会话и Клиент возобновляет общение。толькосуществоватьклиентсуществовать CONNECT Генерал-лейтенант Clean Start установлен на 0 Когда,сессия Present возможныйдля 1。
  • Reason Code:используется для обозначения连接结果。В таблице ниже перечислены一些существовать CONNACK Часто встречающееся в сообщениях Reason Код, полный список можно найти в MQTT 5.0 Reason Code Шпаргалка.

Value

Reason Code Name

Description

0x00

Success

Соединение принято.

0x81

Malformed Packet

Сервер не может правильно выполнить синтаксический анализ в соответствии со спецификацией протокола. CONNECT Сообщение, например, зарезервированные биты не соответствуют установленным требованиям протокола. на 0。

0x82

Protocol Error

Сообщение CONNECT может быть проанализировано правильно, но его содержимое не соответствует спецификации протокола. Например, значение поля Will Topic не является допустимой темой MQTT.

0x84

Unsupported Protocol Version

Сервер не поддерживает версию протокола MQTT, запрошенную клиентом.

0x85

Client Identifier not valid

Указывает, что идентификатор клиента является допустимой строкой, но не принимается сервером. Например, идентификатор клиента превышает максимальную длину, разрешенную сервером.

0x86

Bad User Name or Password

клиент因для使用了错误изимя пользователяили пароль, и в соединении было отказано.。

0x95

Packet too large

CONNECT Сообщение превышает максимальную длину, разрешенную сервером. Возможно, это связано с тем, что для содержит большую информацию.

0x8A

Banned

выразить клиенту запрещен вход в систему. Например, сервер обнаруживает ненормальное поведение соединения клиента.,Поэтому Client ID и IP-адрес этого клиента добавляются в черный список.,Кроме того, серверный администратор вручную заблокировал этого клиента.,Конечно, вышесказанное обычно зависит от конкретной реализации сервера.

  • Properties:В таблице ниже перечислены CONNACK Сообщение Все имеющиеся объекты.

Identifier

Property Name

Type

0x11

Session Expiry Interval

четырехбайтовое целое число

0x21

Receive Maximum

двухбайтовое целое число

0x24

Maximum QoS

одиночный байт

0x25

Retain Available

одиночный байт

0x27

Maximum Packet Size

четырехбайтовое целое число

0x12

Assigned Client Identifier

Строка в кодировке UTF-8

0x22

Topic Alias Maximum

двухбайтовое целое число

0x1F

Reason String

Строка в кодировке UTF-8

0x26

User Property

Пара строк UTF-8

0x28

Wildcard Subscription Available

одиночный байт

0x29

Subscription Identifier Available

одиночный байт

0x2A

Shared Subscription Available

одиночный байт

0x13

Server Keep Alive

двухбайтовое целое число

0x1A

Response Information

Строка в кодировке UTF-8

0x1C

Server Reference

Строка в кодировке UTF-8

0x15

Authentication Method

Строка в кодировке UTF-8

0x16

Authentication Data

двоичные данные

полезная нагрузка

CONNACK Сообщение не содержит полезного нагрузка。

Подвести итог

CONNECT Это первое сообщение, отправленное клиентом после установления сетевого соединения между клиентом и сервером. MQTT Сообщение, ПОДКЛЮЧЕНИЕ 作для CONNECT Ответное сообщение указывает результат соединения через код причины.

Клиент и сервер должны использовать CONNECT и CONNACK сообщения для завершения обмена необходимой информацией, такой как версия протокола, используемая клиентом, клиент Идентификатор, имя пользователя, пароль, наличие соответствующего сеанса на сервере, а также максимальная поддерживаемая длина сообщения и максимальное QoS Уровень и так далее.

Вышеупомянутое верно MQTT CONNECT и CONNACK сообщение введение, существование мы продолжим изучать в последующих статьях PUBLISH、DISCONNECT Структура данного сообщения и состоит из них.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose