После того, как Клиент установил сетевое соединение с Сервером, первым пакетом, отправленным Клиентом на Сервер, ДОЛЖЕН быть пакет CONNECT (СОЕДИНЕНИЕ) [MQTT-6.1.0-1].
Клиент может отправить пакет CONNECT через сетевое подключение только один раз. Сервер ДОЛЖЕН обработать второй пакет CONNECT, отправленный Клиентом, как нарушение протокола, и прервать соединение с Клиентом [MQTT-6.1.0-2]. Информация об обработке приведена в подразделе 7.8.
Полезная нагрузка содержит одно или несколько закодированных полей. Они определяют уникальный идентификатор Клиента для Клиента, тему "последней воли", сообщение "последней воли", имя пользователя и пароль. Все поля, кроме идентификатора Клиента, являются необязательными и их наличие определяется на основе флагов в переменном заголовке.
6.1.1 Фиксированный заголовок
В таблице 11 приведен фиксированный заголовок пакета CONNECT.
Таблица 11 - Фиксированный заголовок пакета CONNECT
Бит | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Байт 1 | Тип управляющего пакета MQTT (1) | Зарезервировано | ||||||
0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | |
Байт 2... | Остаток байтов |
Поле "Остаток байтов"
Остаток байтов - это длина переменного заголовка (10 байт) плюс длина полезной нагрузки. Суммарное количество байт в остатке кодируется способом, описанным в подпункте 5.2.3.
6.1.2 Переменный заголовок
Переменный заголовок для пакета CONNECT состоит из четырех полей в следующем порядке: имя протокола, уровень протокола, флаги подключения и интервала поддержки активного соединения.
6.1.2.1 Имя протокола
В таблице 12 приведены байты имени протокола.
Таблица 12 - Байты имени протокола
Имя протокола | Описание | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Байт 1 | Длина MSB (0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Байт 2 | Длина LSB (4) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
Байт 3 | "М" | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 |
Байт 4 | "Q" | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 |
Байт 5 | "Т" | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
Байт 6 | "Т" | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
Имя протокола - это кодированная строка UTF-8, которая представляет собой имя протокола "МQТТ", записанное заглавными буквами, как показано. Строка, ее смещение и длина не меняются в последующих изданиях спецификации MQTT.
Если имя протокола неверно, Сервер МОЖЕТ прервать соединение с Клиентом, или МОЖЕТ продолжить обработку пакета CONNECT в соответствии с некоторыми другими спецификациями. В последнем случае Сервер НЕ ДОЛЖЕН продолжать обрабатывать пакет CONNECT в соответствии с настоящей спецификацией [MQTT-6.1.2-1].
Пример - Инспекторы пакетов, например, брандмауэры, могут использовать Имя протокола для идентификации трафика MQTT.
6.1.2.2 Уровень протокола
В таблице 13 приведен байт уровня протокола.
Таблица 13 - Байт уровня протокола
Уровень протокола | Описание | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Байт 7 | Уровень (4) | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |