Анализ сообщений MQTT 5.0 03: ПОДПИСАТЬСЯ и ОТМЕНИТЬ ПОДПИСКУ
Анализ сообщений MQTT 5.0 03: ПОДПИСАТЬСЯ и ОТМЕНИТЬ ПОДПИСКУ

Добро пожаловать в третью статью серии сообщений MQTT 5.0. В предыдущей статье мы познакомились с функцией PUBLISH MQTT 5.0 и ее ответным сообщением. Теперь мы представим управляющие сообщения для подписки и отказа от подписки.

В MQTT сообщение SUBSCRIBE используется для инициирования запроса на подписку, а сообщение SUBACK используется для возврата результата подписки. Сообщения UNSUBSCRIBE и UNSUBACK используются при отмене подписки. По сравнению с отменой подписки, операция подписки используется чаще. Однако в этой статье мы все же познакомим вас со структурой и составом сообщений о подписке и отказе от подписки.

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

Сначала мы используем Wireshark для захвата реального запроса и ответа на подписку MQTT. Здесь мы используем CLI MQTTX для инициирования запроса на подписку на общедоступный сервер MQTT. Следующая команда создаст подписку с демонстрационной темой и максимальным QoS, равным 2:

Язык кода:MQTTX CLI
копировать
mqttx sub --hostname broker.emqx.io --mqtt-version 5 --topic demo --qos 2

Ниже приведены данные сообщений SUBSCRIBE и SUBACK, полученные Wireshark:

Язык кода:MQTT
копировать
# SUBSCRIBE
82 0a 05 be 00 00 04 64 65 6d 6f 02

# SUBACK
90 04 05 be 00 02

В среде Linux вы можете сначала использовать команду tcpdump для захвата пакетов, а затем импортировать их в Wireshark для анализа.

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

01subscribepacket.png
01subscribepacket.png
02subackpacket.png
02subackpacket.png

Возможно, вы начинаете задаваться вопросом, как они выполняют преобразование простых команд CLI MQTTX в сложные данные сообщения, или вам интересно, как следует извлекать нужную информацию при захвате сообщения MQTT.

Тогда в следующем ПОДПИСАТЬСЯ, ПОДПИСАТЬСЯ, ОТМЕНИТЬ ПОДПИСКУ, а также ОТПИСАТЬСЯ из Структура сообщений.Во ​​введении на ваши вопросы будут даны ответы.

ПОДПИСАТЬСЯ структура сообщения

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

существовать SUBSCRIBE в сообщении,фиксированный Первый байт в заголовке высокий 4 Значение места должно быть 8 (0b1000) пока низкий 4 Зарезервированные биты должны быть установлены на 2 (0b0010). После первого байта остается оставшаяся длина (Remaining Длина), которое представляет собой переменное целое число в байтах.

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

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

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

SUBSCRIBE переменный заголовок
SUBSCRIBE переменный заголовок
  • идентификатор сообщения(Packet Идентификатор): целое число без знака длиной два байта, используемое для уникальной идентификации запроса на подписку. ПУБЛИКОВАТЬ, ПОДПИСАТЬСЯ, ОТПИСАТЬСЯ В сообщении используется группа идентификаторов сообщения, что означает, что они не могут использовать один и тот же идентификатор одновременно сообщения。
  • свойство(Properties):В таблице ниже перечислены SUBSCRIBE Сообщения из всех доступныхсвойство.

Identifier

Property Name

Type

0x0B

Subscription Identifier

Байт переменной длины, целое число

0x26

User Property

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

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

SUBSCRIBE Сообщение изполезное Нагрузка содержит одну или несколько пар тематический фильтр/опция подписки. Тематический фильтр – это UTF-8 Закодированная строка, используемая для указания серверу темы, на которую клиент желает подписаться. Опция подписки занимает всего один байт и в настоящее время состоит из следующих четырех опций:

  • Reserved (Bit 7, 6):Зарезервированный бит,На данный момент должно быть установлено 0.
  • Retain Handling (Bit 5, 4):Используется для указания того, когда установлена ​​подписка.,Нужна ли серверу эта подписка для отправки сохраненных сообщений.
  • Retain As Published (Bit 3):Используется для указания серверусуществовать КНеобходимо ли этой подписке сохранять сообщение при пересылке сообщений приложения.из Retain логотип.
  • No Local (Bit 2):Используется для указания серверу是否可以将应用消息转发给该消息из Издатель。No Local и Retain As Published Обычно используется в сценариях моста.
  • Maximum QoS (Bit 1, 0):Эта опция определяет сервер КЭту подписку можно использовать при пересылке сообщенийизмаксимум QoS оценка. Если исходное сообщение QoS Если этот лимит превышен, сервер будет QoS Понизьте версию, чтобы обеспечить доставку сообщений.
SUBSCRIBE Сообщение изполезное нагрузка
SUBSCRIBE Сообщение изполезное нагрузка

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

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

Значение старших 4 битов первого байта сообщения SUBACK равно 9 (0b1001), а младшие 4 бита должны быть установлены в 0.

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

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

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

SUBACK переменный заголовок
SUBACK переменный заголовок
  • идентификатор сообщения(Packet Identifier):SUBACK в сообщенииизидентификатор сообщениядолженипереписыватьсяиз SUBSCRIBE Сообщения согласованы, поэтому другая сторона правильно сопоставляет ответ на запрос.
  • свойство(Properties):В таблице ниже перечислены SUBACK Сообщения из всех доступныхсвойство.

Identifier

Property Name

Type

0x1F

Reason String

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

0x26

User Property

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

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

SUBACK Сообщение изполезное файл содержит Reason Code Список, Причина Code Указывает, была ли подписка успешной или причина сбоя. один Reason Code переписываться SUBSCRIBE Тематический фильтр для сообщения, поэтому SUBACK в сообщении Reason Code Порядок должен быть таким же, как SUBSCRIBE в Несколько фильтров тем в последовательном порядке.

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

В следующей таблице перечислены все коды причин, доступные для сообщений SUBACK:

Value

Reason Code Name

Description

0x00

Granted QoS 0

Подписка принимается с максимальным уровнем QoS 0. Уровень QoS, предоставляемый сервером, может быть ниже уровня QoS, запрошенного клиентом, что в основном зависит от того, поддерживает ли сервер все QoS или соответствующие настройки разрешений.

0x01

Granted QoS 1

Подписка принимается с максимальным уровнем QoS 1.

0x02

Granted QoS 2

Подписка принимается с максимальным уровнем QoS 2.

0x80

Unspecified error

Указывает на неопределенную ошибку. Когда одна сторона не желает раскрывать конкретную причину ошибки другой стороне или в спецификации протокола нет положения, соответствующего текущей ситуации. Reason Code когда, тогда оно будет существоватьв мы воспользуемся этим Reason Code。

0x83

Implementation specific error

Сообщение SUBSCRIBE допустимо, но не принимается текущей реализацией сервера.

0x87

Not authorized

У клиента нет разрешения на подписку на эту подписку.

0x8F

Topic Filter invalid

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

0x91

Packet Identifier in use

Полученный сообщениииз Packet ID толькосуществоватьиспользоваться。

0x97

Quota exceeded

Указывает на превышение лимита квоты. Сервер может ограничить квоту подписки подписчика. Например, клиент может установить до 10 подписок.

0x9E

Shared Subscriptions not supported

Сервер не поддерживает общие подписки.

0xA1

Subscription Identifiers not supported

Сервер не поддерживает идентификаторы подписки.

0xA2

Wildcard Subscriptions not supported

Сервер не поддерживает подписки с подстановочными знаками.

UNПОДПИСАТЬСЯ структура сообщения

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

То же, что и сообщение SUBSCRIBE, с той лишь разницей, что значение поля типа сообщения меняется с 8 (0b1000) на 10 (0b1010).

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

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

То же, что и сообщение ПОДПИСАТЬСЯ.

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

UNSUBSCRIBE Сообщение изполезное Нагрузка содержит один или несколько фильтров тем, от которых клиент желает отказаться, и эти фильтры тем также Строка в кодировке UTF-8 и несколько фильтров тем тесно связаны между собой.

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

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

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

Значение старших 4 битов первого байта сообщения UNSUBACK равно 11 (0b1011), а младшие 4 бита должны быть установлены в 0.

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

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

UNSUBACK изпеременный заголовок содержит порядковый номер идентификатора сообщенияисвойство Поле,Доступныйизсвойствои SUBACK Сообщения те же самые.

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

UNSUBACK Сообщение изполезное нагрузка также содержит Reason Code Список, Причина Code Указывает, была ли отписка успешной или причина,по которой она не удалась. Эти Reason Code чтобыпереписываться UNSUBSCRIBE Тематический фильтр сообщения.

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

В следующей таблице перечислены все коды причин, доступные для сообщений UNSUBACK:

Value

Reason Code Name

Description

0x00

Success

Подписка удалена

0x11

No subscription existed

Подписка не существует на сервере.

0x80

Unspecified error

Отмена подписки не может быть завершена: сервер либо не желает раскрывать причину, либо не применяется другой код причины.

0x83

Implementation specific error

Сообщение UNSUBSCRIBE допустимо, но не принимается текущей реализацией сервера.

0x87

Not authorized

У клиента нет разрешения на отмену этой подписки.

0x8F

Topic Filter invalid

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

0x91

Packet Identifier in use

Полученный сообщениииз Packet ID толькосуществоватьиспользоваться。

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

SUBSCRIBE и SUBACK Сообщение используется для подписки, ОТПИСАТЬСЯ. и UNSUBACK для отказа от подписки,Хотите подписаться или отказаться от подписки на список фильтров тем,Всесуществоватьпереписываться Сообщение изполезное нагрузка Средний, ПОДПИСАТЬСЯ в моиз Каждый фильтр тем связан с набором опций подписки.

Указывает результат запроса Reason Code роды SUBACK и UNSUBACK Сообщение изполезное раздел нагрузки, а это список, один за другим переписывающиеся запросы wиз фильтры тем.

существуют в следующей статье,Мы продолжим изучать MQTT сообщение оби сердца.

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