существовать 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 Команда:
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 для просмотра:
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:
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 сообщениефиксированный заголовок, расположенный на высоте первого байта 4 Значение поля типа сообщения должно быть для 1 (0b0001), первый байт средний-низкий 4 Положение фиксированное и все для 0。
Итак, ПОДКЛЮЧАЙТЕСЬ Сообщение Значение первого байта должно быть для 0x10
,Мы можем использовать это, чтобы определить, является ли сообщение сообщением CONNECT.
CONNECT сообщениепеременный заголовок содержит следующие поля по порядку:
MQTT
,Таким образом, соответствующие шестнадцатеричные байтывыражать Полное содержанието есть 00 04 4d 51 54 54
,в 4d 51 54 54
то есть MQTT
Эта струнная пара должна ASCII ценить. самый ранний MQTT 3.1 Имя протокола в MQIsdp
,Так что это соответствует 00 06 4d 51 49 73 64 70
。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 появиться в порядке.
фиксированный Высота первого байта заголовка 4 Значение местадля 2 (0b0010), что указывает на то, что это CONNACK сообщение.
CONNACK сообщениепеременный заголовок содержит следующие поля по порядку:
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-адрес этого клиента добавляются в черный список.,Кроме того, серверный администратор вручную заблокировал этого клиента.,Конечно, вышесказанное обычно зависит от конкретной реализации сервера. |
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 Структура данного сообщения и состоит из них.