Статус документа
Статус документа

ГОСТ Р 58603-2019 (ИСО/МЭК 20922:2016) Информационные технологии (ИТ). Интернет вещей. Протокол организации очередей доставки телеметрических сообщений MQTT. Версия 3.1.1

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


Каждый управляющий пакет MQTT содержит фиксированный заголовок. В таблице 4 приведен фиксированный формат заголовка.

Таблица 4 - Фиксированный формат заголовка

Бит

7

6

5

4

3

2

1

0

Байт 1

Тип управляющего пакета MQTT

Флаги, определенные для каждого типа управляющего пакета MQTT

Байт 2...

Остаток байтов

5.2.1 Тип управляющего пакета MQTT

Позиция: байт 1, биты 7-4.

Значения, представленные в виде 4-разрядной величины без знака, приведены в таблице 5.

Таблица 5 - Типы управляющих пакетов

Название

Значение

Направление потока

Описание

Зарезервировано

0

Запрещено

Зарезервировано

CONNECT

1

Клиент - Сервер

Запрос Клиента на подключение к Серверу

CONNACK

2

Сервер - Клиент

Подтверждение подключения

PUBLISH

3

Клиент - Сервер или Сервер - Клиент

Опубликовать сообщение

PUBACK

4

Клиент - Сервер или Сервер - Клиент

Подтверждение публикации

PUBREC

5

Клиент - Сервер или Сервер - Клиент

Получение публикации (часть 1 механизма гарантированной поставки)

PUBREL

6

Клиент - Сервер или Сервер - Клиент

Сообщение для публикации отправлено (часть 2 механизма гарантированной поставки

PUBCOMP

7

Клиент - Сервер или Сервер - Клиент

Публикация сообщения окончена (часть 3 механизма гарантированной поставки)

SUBSCRIBE

8

Клиент - Сервер

Запрос подписки от Клиента

SUBACK

9

Сервер - Клиент

Подтверждение подписки

UNSUBSCRIBE

10

Клиент - Сервер

Запрос об отказе от подписки

UNSUBACK

11

Сервер - Клиент

Подтверждение отказа от подписки

PINGREQ

12

Клиент - Сервер

Запрос PING

PINGRESP

13

Сервер - Клиент

Ответ PING

DISCONNECT

14

Клиент - Сервер

Сообщение об отключении Клиента

Зарезервировано

15

Запрещено

Зарезервировано

5.2.2 Флаги

Остальные биты [3-0] байта 1 в фиксированном заголовке содержат флаги, специфичные для каждого типа управляющего пакета MQTT, как приведено в таблице 6. Если в таблице 6 бит флага отмечен, как "Зарезервировано", то он зарезервирован для будущего использования и ДОЛЖЕН быть установлен в значение, указанное в данной таблице [MQTT-5.2.2-1]. Если полученный пакет содержит неверные флаги, получатель ДОЛЖЕН прервать сетевое соединение [MQTT-5.2.2-2]. Более подробная информация об обработке ошибок приведена в подразделе 7.8.

Таблица 6 - Биты флагов

Управляющий пакет

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

Бит 3

Бит 2

Бит 1

Бит 0

CONNECT

Зарезервировано

0

0

0

0

CONNACK

Зарезервировано

0

0

0

0

PUBLISH

Используется в MQTT 3.1.1

DUP

QoS

QoS

RETAIN

PUBACK

Зарезервировано

0

0

0

0

PUBREC

Зарезервировано

0

0

0

0

PUBREL

Зарезервировано

0

0

1

0

PUBCOMP

Зарезервировано

0

0

0

0

SUBSCRIBE

Зарезервировано

0

0

1

0

SUBACK

Зарезервировано

0

0

0

0

UNSUBSCRIBE

Зарезервировано

0

0

1

0

UNSUBACK

Зарезервировано

0

0

0

0

PINGREQ

Зарезервировано

0

0

0

0

PINGRESP

Зарезервировано

0

0

0

0

DISCONNECT

Зарезервировано

0

0

0

0

______________

DUP = Повторная доставка управляющего пакета PUBLISH

QoS = Качество услуги передачи PUBLISH

RETAIN = Флаг сохранения пакета PUBLISH

В пункте 6.3.1 приведено описание DUP, QoS и RETAIN в составе управляющего пакета PUBLISH.

5.2.3 Остаток байтов

Позиция: начинается с байта 2.

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

Число оставшихся в данном пакете байтов кодируется с использованием схемы кодирования с переменной длиной, которая использует один байт для значений до 127. Более крупные величины обрабатываются следующим образом. Наименее значимые семь бит каждого байта кодируют данные, а самый старший бит используется для указания, что в представлении присутствуют следующие байты. Таким образом, каждый байт кодирует 128 значений и "бит продолжения". Максимальное количество байтов в поле "Остаток байтов" равно четырем.

Пример - Десятичное число 64 кодируется как один байт, десятичное значение 64, шестнадцатеричное 0x40. Десятичное число 321 (= 65+2*128) кодируется как два байта, наименее значимые указываются первыми. Первый байт равен 65+128=193. Обратите внимание, что верхний бит установлен для указания хотя бы одного следующего байта. Второй байт равен 2.

Примечание - Кодирование остатка байтов позволяет приложениям отправлять управляющие пакеты размером до 268435455 (256 МБ). Представление этого числа в закодированном виде: 0xFF, 0xFF, 0xFF, 0x7F.