Открыть сервис

ISO/IEC 20922

ISO/IEC 20922 — это международный стандарт, определяющий протокол прикладного уровня MQTT (Message Queuing Telemetry Transport) версии 3.1.1. Протокол предназначен для обмена сообщениями между устройствами в условиях ограниченных вычислительных ресурсов, низкой пропускной способности каналов связи и нестабильной сети. Стандарт был опубликован совместно Международной организацией по стандартизации (ISO) и Международной электротехнической комиссией (IEC) в 2016 году.

История

Протокол MQTT был разработан в 1999 году компаниями IBM и Arcom (ныне Eurotech) для мониторинга нефтепроводов в системах SCADA. Первоначально он не был открытым стандартом. В 2010 году IBM передала спецификацию MQTT версии 3.1 в организацию OASIS для стандартизации. В 2014 году OASIS выпустила версию 3.1.1, которая стала основой для международного стандарта ISO/IEC 20922. В 2019 году OASIS опубликовала версию 5.0, которая не вошла в ISO/IEC 20922, но является самостоятельным стандартом.

Область применения

ISO/IEC 20922 охватывает следующие аспекты протокола MQTT 3.1.1:

  • Формат пакетов сообщений (контрольные пакеты).
  • Процедуры установления и завершения соединения.
  • Механизмы публикации и подписки.
  • Уровни качества обслуживания (QoS).
  • Механизмы сохранения сообщений (Retained Messages) и последней воли (Will Message).

Архитектура и принцип работы

Модель «издатель-подписчик»

Протокол MQTT работает по модели «издатель-подписчик» (publish-subscribe). В отличие от традиционной модели «клиент-сервер», где клиент напрямую обращается к серверу, в MQTT все сообщения проходят через центральный узел — брокер. Клиенты (устройства) могут выступать в роли издателей (publishers), отправляющих сообщения на определённые темы (topics), или подписчиков (subscribers), получающих сообщения по интересующим их темам. Брокер фильтрует и перенаправляет сообщения.

Топики

Топики представляют собой иерархические строки, разделённые символом «/» (слеш). Например, home/kitchen/temperature. Подписка может быть точной (home/kitchen/temperature) или с использованием подстановочных символов:

  • + — заменяет один уровень иерархии (например, home/+/temperature подписывается на температуру в любой комнате).
  • # — заменяет все последующие уровни (например, home/# подписывается на все топики, начинающиеся с home/).

Контрольные пакеты

Протокол определяет 14 типов контрольных пакетов (Control Packets), каждый из которых имеет фиксированный заголовок и переменную часть. Основные из них:

  • CONNECT — запрос на установление соединения.
  • CONNACK — подтверждение соединения.
  • PUBLISH — публикация сообщения.
  • PUBACK, PUBREC, PUBREL, PUBCOMP — подтверждения для QoS 1 и 2.
  • SUBSCRIBE — запрос на подписку.
  • SUBACK — подтверждение подписки.
  • UNSUBSCRIBE — отписка.
  • UNSUBACK — подтверждение отписки.
  • PINGREQ / PINGRESP — проверка соединения (keepalive).
  • DISCONNECT — разрыв соединения.

Уровни качества обслуживания (QoS)

ISO/IEC 20922 определяет три уровня QoS, которые определяют гарантии доставки сообщения:

УровеньНазваниеОписание
0At most onceСообщение доставляется не более одного раза. Потеря возможна. Используется для нечувствительных к потерям данных (например, показания датчиков).
1At least onceСообщение доставляется как минимум один раз. Возможна дупликация. Требует подтверждения (PUBACK).
2Exactly onceСообщение доставляется ровно один раз. Наиболее надёжный, но и самый медленный уровень. Требует четырёхэтапного подтверждения (PUBREC, PUBREL, PUBCOMP).

Сохранённые сообщения и последняя воля

Retained Messages

Издатель может пометить сообщение как «сохранённое» (Retained). Брокер хранит последнее сохранённое сообщение для каждого топика. При подключении нового подписчика к этому топику брокер немедленно отправляет ему сохранённое сообщение. Это позволяет новым клиентам получать актуальное состояние системы без ожидания следующей публикации.

Will Message

При установлении соединения клиент может указать «сообщение последней воли» (Will Message). Если соединение клиента неожиданно разрывается (например, из-за потери питания или обрыва сети), брокер публикует это сообщение от имени клиента. Это используется для оповещения других устройств о выходе клиента из строя.

Безопасность

Стандарт ISO/IEC 20922 не определяет механизмы шифрования или аутентификации на уровне протокола. Однако на практике безопасность обеспечивается:

  • Использованием TLS/SSL для шифрования канала передачи данных.
  • Аутентификацией клиентов по имени пользователя и паролю (поля в пакете CONNECT).
  • Использованием сертификатов X.509.
  • Механизмами ACL (Access Control List) на стороне брокера, ограничивающими доступ к топикам.

Применение

MQTT 3.1.1 (ISO/IEC 20922) широко используется в следующих областях:

Реализации

Существует множество открытых и коммерческих реализаций брокеров и клиентов MQTT, совместимых с ISO/IEC 20922:

  • Брокеры: Mosquitto (Eclipse Foundation), EMQX (EMQ Technologies), VerneMQ (Octavo Labs), HiveMQ (HiveMQ GmbH).
  • Клиентские библиотеки: Paho (Eclipse Foundation) для C, C++, Java, Python, JavaScript; MQTT.js для Node.js; Eclipse Paho для Arduino.

Критика и ограничения

  • Отсутствие шифрования на уровне протокола: безопасность полностью ложится на нижележащий транспортный уровень.
  • Ограниченная поддержка больших сообщений: максимальный размер полезной нагрузки — 256 МБ (за счёт 4-байтового поля длины), но на практике рекомендуется ограничиваться килобайтами.
  • Отсутствие механизма очередей: сообщения не хранятся на брокере для отключённых подписчиков (кроме сохранённых сообщений).
  • Сложность QoS 2: четырёхэтапное подтверждение может приводить к задержкам и увеличению трафика.
  • Не поддерживает сжатие данных на уровне протокола: сжатие должно реализовываться на прикладном уровне.

Источники

  • ISO/IEC 20922:2016 «Information technology — Message Queuing Telemetry Transport (MQTT) v3.1.1»
  • OASIS Standard «MQTT Version 3.1.1», 29 October 2014
  • Andrew Banks, Rahul Gupta «MQTT Version 3.1.1 Plus Errata 01», OASIS, 2015
  • «MQTT and the Internet of Things», IBM developerWorks, 2011
  • Документация Eclipse Mosquitto, Eclipse Paho

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →