stringtranslate.com

MQTT

MQTT ( первоначально аббревиатура MQ Telemetry Transport [a] ) — это легкий сетевой протокол «издатель-подписчик » для очереди сообщений / службы очередей сообщений . Он предназначен для соединений с удаленными местоположениями, имеющими устройства с ограничениями по ресурсам или ограниченной пропускной способностью сети , например, в Интернете вещей (IoT). Он должен работать по транспортному протоколу, который обеспечивает упорядоченные двунаправленные соединения без потерь — обычно TCP/IP . [1] Это открытый стандарт OASIS и рекомендация ISO ( ISO/IEC 20922 ).

История

Энди Стэнфорд-Кларк ( IBM ) и Арлен Ниппер (тогда работавший в Eurotech, Inc. ) создали первую версию протокола в 1999 году. [4] Он использовался для мониторинга нефтепроводов в промышленной системе управления SCADA . [5] Целью было создание протокола, который был бы эффективен с точки зрения пропускной способности, легок и потреблял бы мало энергии батареи, поскольку устройства подключались через спутниковую связь, которая в то время была чрезвычайно дорогой. [6]

Исторически «MQ» в «MQTT» пришло из линейки продуктов IBM MQ (тогда «MQSeries»), где оно означает «Message Queue» (очередь сообщений). Однако протокол обеспечивает обмен сообщениями по принципу «публикация-подписка» (без очередей, несмотря на название). [7] В спецификации, открытой IBM в версии 3.1, протокол упоминался как «MQ Telemetry Transport» (транспорт телеметрии MQ). [8] [9] Последующие версии, выпущенные OASIS, строго ссылаются на протокол как на «MQTT», хотя сам технический комитет называется «Технический комитет OASIS Message Queuing Telemetry Transport» (технический комитет телеметрии очереди сообщений OASIS). [2] С 2013 года «MQTT» ничего не обозначает. [10] [7]

В 2013 году IBM представила MQTT v3.1 в орган спецификации OASIS с уставом, который гарантировал, что только незначительные изменения спецификации могут быть приняты. [2] После принятия на себя поддержки стандарта от IBM, OASIS выпустила версию 3.1.1 29 октября 2014 года. [11] [12] Более существенное обновление до MQTT версии 5, добавляющее несколько новых функций, [13] было выпущено 7 марта 2019 года. [1]

MQTT-SN (MQTT для сенсорных сетей) — это разновидность основного протокола, предназначенная для встраиваемых устройств с питанием от батареи в сетях, отличных от TCP/IP, [14] таких как Zigbee . [15]

Обзор

Протокол MQTT определяет два типа сетевых сущностей: брокер сообщений и несколько клиентов. Брокер MQTT — это сервер, который получает все сообщения от клиентов, а затем направляет их соответствующим клиентам-получателям. [16] Клиент MQTT — это любое устройство (от микроконтроллера до полноценного сервера), которое запускает библиотеку MQTT и подключается к брокеру MQTT по сети. [17]

Информация организована в иерархию тем. Когда у издателя есть новый элемент данных для распространения, он отправляет контрольное сообщение с данными подключенному брокеру. Затем брокер распространяет информацию всем клиентам, которые подписались на эту тему. Издателю не нужно иметь никаких данных о количестве или местоположении подписчиков, а подписчики, в свою очередь, не должны быть настроены с какими-либо данными об издателях.

Если брокер получает сообщение по теме, на которую нет текущих подписчиков, брокер отбрасывает сообщение, если только издатель сообщения не обозначил сообщение как сохраненное сообщение. Сохраненное сообщение — это обычное сообщение MQTT с флагом сохранения, установленным в значение true. Брокер сохраняет последнее сохраненное сообщение и соответствующее качество обслуживания (QoS) для выбранной темы. Каждый клиент, который подписывается на шаблон темы, соответствующий теме сохраненного сообщения, получает сохраненное сообщение сразу после подписки. Брокер сохраняет только одно сохраненное сообщение на тему. [18] Это позволяет новым подписчикам темы получать самое актуальное значение, а не ждать следующего обновления от издателя.

Когда клиент-публикатор впервые подключается к брокеру, он может настроить сообщение по умолчанию, которое будет отправляться подписчикам, если брокер обнаружит, что клиент-публикатор неожиданно отключился от брокера.

Клиенты взаимодействуют только с брокером, но система может содержать несколько серверов брокеров, которые обмениваются данными на основе тем своих текущих подписчиков.

Минимальное управляющее сообщение MQTT может содержать всего два байта данных. Управляющее сообщение может нести около 256 мегабайт данных, если это необходимо. Существует четырнадцать определенных типов сообщений, используемых для подключения и отключения клиента от брокера, для публикации данных, для подтверждения получения данных и для контроля соединения между клиентом и сервером.

MQTT использует протокол TCP для передачи данных. Вариант MQTT-SN используется поверх других транспортных протоколов, таких как UDP или Bluetooth.

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

Незашифрованный порт MQTT по умолчанию — 1883. Зашифрованный порт — 8883. [19]

MQTT-брокер

Брокер MQTT — это часть программного обеспечения, работающая на компьютере (локально или в облаке), и может быть самостоятельно созданной или размещенной третьей стороной. Она доступна как в открытом исходном коде, так и в проприетарных реализациях.

Брокер действует как почтовое отделение. Клиенты MQTT не используют прямой адрес подключения предполагаемого получателя, а используют строку темы под названием «Тема». Любой подписчик получает копию всех сообщений по этой теме. Несколько клиентов могут подписаться на тему от одного брокера (возможность «один ко многим»), и один клиент может регистрировать подписки на темы у нескольких брокеров (многие к одному).

Каждый клиент может как производить, так и получать данные как путем публикации, так и подписки, т. е. устройства могут публиковать данные датчиков и при этом иметь возможность получать информацию о конфигурации или команды управления (MQTT — это двунаправленный протокол связи). Это помогает как в обмене данными, так и в управлении и контроле устройств. Клиент не может транслировать одни и те же данные в ряд тем и должен публиковать несколько сообщений брокеру, каждое из которых будет содержать одну тему.

Благодаря архитектуре брокера MQTT клиентские устройства и серверное приложение становятся развязанными. Таким образом, клиенты не знают информацию друг друга. MQTT, если настроен, может использовать шифрование TLS с защищенными сертификатом, именем пользователя и паролем соединениями. При желании соединение может потребовать сертификацию в форме файла сертификата, который предоставляет клиент и который должен совпадать с копией сервера.

В случае сбоя программное обеспечение брокера и клиенты могут автоматически переключиться на резервного/автоматического резервного брокера. Резервные брокеры также могут быть настроены для распределения нагрузки клиентов между несколькими серверами на месте, в облаке или их комбинацией.

Брокер может поддерживать как стандартный MQTT, так и MQTT для совместимых спецификаций, таких как Sparkplug. [20] Это можно сделать с тем же сервером, в то же время и с теми же уровнями безопасности.

Брокер отслеживает всю информацию сеанса, когда устройство включается и выключается, в функции, называемой «постоянные сеансы». В этом состоянии брокер будет хранить как информацию о подключении для каждого клиента, темы, на которые подписан каждый клиент, так и любые сообщения для темы с QoS 1 или 2. [21]

Основными преимуществами MQTT-брокера являются:

  1. Устраняет уязвимые и небезопасные клиентские соединения, если настроено соответствующим образом
  2. Легко масштабируется от одного устройства до тысяч
  3. Управляет и отслеживает все состояния клиентских подключений, включая учетные данные безопасности и сертификаты, если настроено
  4. Снижение нагрузки на сеть без ущерба для безопасности, если настроено (сотовая или спутниковая сеть)

Типы сообщений

Соединять

Пример соединения MQTT (QoS 0) с подключением, публикацией/подпиской и отключением. Первое сообщение от клиента B сохраняется благодаря флагу сохранения.

Ожидает установления соединения с сервером и создает связь между узлами.

Отключить

Ожидает, пока клиент MQTT завершит всю необходимую ему работу и сеанс TCP/IP будет отключен.

Публиковать

Немедленный возврат в поток приложения после передачи запроса клиенту MQTT.

Версия 5.0

В 2019 году OASIS выпустил официальный стандарт MQTT 5.0. [1] Версия 5.0 включает в себя следующие основные новые функции: [22]

Качество обслуживания

Каждое подключение к брокеру может указывать меру QoS. [23] Они классифицируются в порядке возрастания накладных расходов:

Это поле не влияет на обработку базовых передач данных TCP; оно используется только между отправителями и получателями MQTT.

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

Безопасность протокола MQTT была скомпрометирована [24] в 2020 году итальянскими исследователями, выполнившими медленные DoS-атаки на этот протокол (см. CVE-2020-13849).

Кластеризация

Кластеризация MQTT — это метод, используемый для обеспечения высокой доступности, отказоустойчивости и масштабируемости в развертываниях MQTT. [25] Будучи эффективным и легким протоколом обмена сообщениями, кластеризация MQTT позволяет создавать отказоустойчивую сеть взаимосвязанных брокерских узлов, гарантируя непрерывную и надежную доставку сообщений даже в случае сбоев оборудования или сетевых сбоев.

Смотрите также

Примечания

  1. ^ MQ означает «очереди сообщений» (message queues), что происходит от названия продукта IBM MQ .

Ссылки

  1. ^ abcde "MQTT Version 5.0". OASIS . 2019-03-07 . Получено 2020-12-15 .
  2. ^ abc "Устав технического комитета OASIS Message Queuing Telemetry Transport (MQTT)". OASIS . Получено 2020-12-15 .
  3. ^ "Подкомитет MQTT SN". OASIS . Получено 2020-12-15 .
  4. ^ "10th birthday party". MQTT.org . Июль 2009. Архивировано из оригинала 15 марта 2015. Получено 25 апреля 2015 .
  5. ^ "Транскрипт подкаста IBM" (PDF) . IBM.com . Ноябрь 2011 . Получено 7 января 2021 .
  6. ^ "Начало работы с MQTT". HiveMQ. 2020-04-24.
  7. ^ Команда ab , HiveMQ. «Введение в протокол MQTT — Основы MQTT: Часть 1». www.hivemq.com . Получено 26.09.2021 .
  8. ^ "MQTT v3.1 и MQTT v3.1.1 Различия". OASIS Message Queuing Telemetry Transport (MQTT) TC. 12 февраля 2015 г. Получено 19 августа 2021 г.
  9. ^ "Спецификация протокола MQTT V3.1". Eurotech, International Business Machines Corporation (IBM). 2010. Получено 15.12.2020 .
  10. ^ «Протокол заседания технического комитета OASIS MQTT, состоявшегося в четверг, 25 апреля 2013 г., телеконференция» (PDF) .
  11. ^ "MQTT Version 3.1.1". 2014-10-29 . Получено 2020-12-16 .
  12. ^ "6 фактов, почему стоит обновиться до новой версии MQTT 3.1.1". 2014-10-30 . Получено 2020-12-16 .
  13. ^ "Различия между 3.1.1 и 5.0". GitHub .
  14. ^ Стэнфорд-Кларк, Энди ; Хонг Линь Труонг (14 ноября 2013 г.). «Спецификация протокола MQTT для сенсорных сетей (MQTT-SN) версии 1.2» (PDF) . oasis-open.org . Технический комитет OASIS по телеметрии и очереди сообщений (MQTT). стр. 28 . Получено 15 декабря 2020 г. .
  15. ^ "Введение в MQTT-SN (MQTT для сенсорных сетей)". 25 января 2017 г. Получено 16 сентября 2020 г.
  16. ^ Юань, Майкл. «Знакомство с MQTT». IBM Developer . Получено 13 октября 2019 г.
  17. ^ «Клиент, брокер/сервер и установление соединения — основы MQTT: часть 3». hivemq.com . 17 июля 2019 г. . Получено 13 октября 2019 г. .
  18. ^ "Сохраненные сообщения - Основы MQTT: Часть 8". hivemq.com . 2 марта 2015 г. . Получено 13 октября 2019 г. .
  19. ^ "FAQ - Часто задаваемые вопросы | MQTT" . Получено 2020-03-19 .
  20. ^ "Свеча зажигания MQTT/Таху" . www.cirrus-link.com . Проверено 5 ноября 2019 г.
  21. ^ Коуп, Стивен (2020). MQTT для начинающих . стр. 17. ISBN 9798779030762.
  22. ^ "Что такое MQTT? Определение и подробности". www.paessler.com . Получено 2020-06-09 .
  23. ^ "Центр знаний IBM - IBM MQ - Использование MQTT с IBM Integration Bus - Качество обслуживания и управление соединениями". www.ibm.com . Получено 2018-01-30 .
  24. ^ Ваккари, И., Айелло, М. и Камбиазо, Э. (2020). SlowITe, новая атака типа «отказ в обслуживании», влияющая на MQTT. Датчики, 20(10), 2932.
  25. ^ "Кластер MQTT высокой доступности - Bevywise Networks". www.bevywise.com . Получено 22.12.2023 .
  26. ^ "API и протоколы". Solace . Получено 2021-04-08 .
  27. ^ "MQTT 5.0 Support 🎉". Solace Community . 4 января 2021 г. Получено 2021-04-08 .

Внешние ссылки