MQTT
Статус | Опубликовано |
---|---|
Год начался | 1999 |
Последняя версия | 5.0 [1] 7 марта 2019 г. |
Организация | ОАЗИС |
комитет | Технический комитет транспорта телеметрии очереди сообщений OASIS [2] |
Редакторы | Эндрю Бэнкс (IBM), Эд Бриггс (Microsoft), Кен Боргендейл (IBM), Рахул Гупта (IBM) [1] |
Сопутствующие стандарты | MQTT-SN [3] |
Веб-сайт | mqtt |
Набор интернет-протоколов |
---|
Прикладной уровень |
Транспортный уровень |
Интернет-слой |
Слой связи |
MQTT (первоначально инициализм MQ Telemetry Transport) . [а] ) — это облегченный публикации и подписки для межмашинный сетевой протокол службы сообщений / очереди очередей сообщений . Он предназначен для подключений к удаленным местоположениям, где есть устройства с ограниченными ресурсами или ограниченной пропускной способностью сети , например, в Интернете вещей (IoT). Он должен работать по транспортному протоколу, который обеспечивает упорядоченные без потерь двунаправленные соединения — обычно TCP/IP . [1] Это открытый стандарт OASIS и рекомендация ISO ( ISO/IEC 20922 ).
История
[ редактировать ]Энди Стэнфорд-Кларк ( IBM ) и Арлен Ниппер (тогда работавший в Eurotech, Inc. ) написали первую версию протокола в 1999 году. [4] Он использовался для мониторинга нефтепроводов в рамках промышленной системы управления SCADA . [5] Целью было создать протокол, который бы эффективно использовал полосу пропускания, был легким и потреблял мало энергии аккумулятора, поскольку устройства подключались через спутниковую связь, что в то время было чрезвычайно дорого. [6]
Исторически сложилось так, что «MQ» в «MQTT» произошло из линейки продуктов IBM MQ (тогда «MQSeries»), где оно означает «Очередь сообщений». Однако протокол обеспечивает обмен сообщениями публикации и подписки (без очередей, несмотря на название). [7] В спецификации, открытой IBM как версия 3.1, протокол назывался «MQ Telemetry Transport». [8] [9] В последующих версиях, выпущенных OASIS, этот протокол строго именуется просто «MQTT», хотя сам технический комитет называется «Технический комитет по передаче телеметрии очереди сообщений 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] например, Зигби . [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-брокера являются:
- Устраняет уязвимые и небезопасные клиентские соединения, если это настроено.
- Легко масштабируется от одного устройства до тысяч
- Управляет и отслеживает все состояния клиентских подключений, включая учетные данные безопасности и сертификаты, если это настроено.
- Снижение нагрузки на сеть без ущерба для безопасности, если она настроена на (сотовую или спутниковую сеть)
Типы сообщений
[ редактировать ]Соединять
[ редактировать ]Ожидает установления соединения с сервером и создает связь между узлами.
Отключить
[ редактировать ]Ожидает, пока клиент 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 позволяет создавать отказоустойчивую сеть взаимосвязанных брокерских узлов, обеспечивая непрерывную и надежную доставку сообщений даже в случае аппаратных сбоев или сбоев в работе сети.
См. также
[ редактировать ]- Сравнение реализаций MQTT
- Расширенный протокол очереди сообщений (AMQP)
- Протокол потокового текстоориентированного обмена сообщениями (STOMP)
- Протокол ограниченных приложений (CoAP)
- Апач ActiveMQ
- Утешение PubSub+ [26] [27]
- КроликMQ
Примечания
[ редактировать ]- ^ MQ означает «очереди сообщений», что происходит от названия продукта IBM MQ .
Ссылки
[ редактировать ]- ^ Jump up to: а б с д и «MQTT версии 5.0» . ОАЗИС . 07.03.2019 . Проверено 15 декабря 2020 г.
- ^ Jump up to: а б с «Устав Технического комитета OASIS Message Queuing Telemetry Transport (MQTT)» . ОАЗИС . Проверено 15 декабря 2020 г.
- ^ «Подкомитет MQTT SN» . ОАЗИС . Проверено 15 декабря 2020 г.
- ^ «10-летний юбилей» . MQTT.org . Июль 2009. Архивировано из оригинала 15 марта 2015 года . Проверено 25 апреля 2015 г.
- ^ «Стенограмма подкаста IBM» (PDF) . IBM.com . Ноябрь 2011 года . Проверено 7 января 2021 г.
- ^ «Начало работы с MQTT» . HiveMQ. 24 апреля 2020 г.
- ^ Jump up to: а б Команда HiveMQ. «Знакомство с протоколом MQTT — Основы MQTT: Часть 1» . www.hivemq.com . Проверено 26 сентября 2021 г.
- ^ «Различия MQTT v3.1 и MQTT v3.1.1» . Транспорт телеметрии очереди сообщений OASIS (MQTT) TC. 12 февраля 2015 года . Проверено 19 августа 2021 г.
- ^ «Спецификация протокола MQTT V3.1» . Евротек, Международная корпорация бизнес-машин (IBM). 2010 . Проверено 15 декабря 2020 г.
- ^ «Протокол технического комитета OASIS MQTT телеконференции в четверг, 25 апреля 2013 г.» (PDF) .
- ^ «MQTT версии 3.1.1» . 29 октября 2014 г. Проверено 16 декабря 2020 г.
- ^ «6 фактов, почему стоит перейти на новую версию MQTT 3.1.1» . 30 октября 2014 г. Проверено 16 декабря 2020 г.
- ^ «Различия между 3.1.1 и 5.0» . Гитхаб .
- ^ Стэнфорд-Кларк, Энди ; Хун Линь Чыонг (14 ноября 2013 г.). «Спецификация протокола MQTT для сенсорных сетей (MQTT-SN), версия 1.2» (PDF) . oasis-open.org . Технический комитет OASIS по передаче телеметрии очереди сообщений (MQTT). п. 28 . Проверено 15 декабря 2020 г.
- ^ «Введение в MQTT-SN (MQTT для сенсорных сетей)» . 25 января 2017 года . Проверено 16 сентября 2020 г.
- ^ Юань, Майкл. «Знакомство с MQTT» . Разработчик IBM . Проверено 13 октября 2019 г.
- ^ «Клиент, брокер/сервер и установление соединения — Основы MQTT: Часть 3» . hivemq.com . 17 июля 2019 года . Проверено 13 октября 2019 г.
- ^ «Сохраненные сообщения. Основы MQTT: часть 8» . hivemq.com . 2 марта 2015 года . Проверено 13 октября 2019 г.
- ^ «FAQ — Часто задаваемые вопросы | MQTT» . Проверено 19 марта 2020 г.
- ^ «Свеча зажигания MQTT/Таху» . www.cirrus-link.com . Проверено 5 ноября 2019 г.
- ^ Коуп, Стивен (2020). MQTT для начинающих . п. 17. ISBN 9798779030762 .
- ^ «Что такое MQTT? Определение и подробности» . www.paessler.com . Проверено 9 июня 2020 г.
- ^ «Центр знаний IBM — IBM MQ — Использование MQTT с IBM Integration Bus — Качество обслуживания и управление соединениями» . www.ibm.com . Проверено 30 января 2018 г.
- ^ Ваккари И., Айелло М. и Камбьязо Э. (2020). SlowITe, новая атака типа «отказ в обслуживании», затрагивающая MQTT. Датчики, 20(10), 2932.
- ^ «Кластер MQTT высокой доступности — Bevywise Networks» . www.bevywise.com . Проверено 22 декабря 2023 г.
- ^ «API и протоколы» . Утешение . Проверено 8 апреля 2021 г.
- ^ «Поддержка MQTT 5.0 🎉» . Сообщество Утешения . 4 января 2021 г. Проверено 8 апреля 2021 г.
Внешние ссылки
[ редактировать ]- Официальный сайт
- Официальный сайт Технического комитета
- Спецификации MQTT
- Версия 5.0, 07.03.2019: Версия PDF , Версия HTML
- Версия 3.1.1 Plus Errata 01, 10 декабря 2015 г.: PDF-версия , HTML-версия
- Версия 3.1.1, 29 октября 2014 г.: PDF-версия , HTML-версия
- Версия 3.1, 2010 г.: издание в формате PDF. Архивировано 4 декабря 2022 г. в Wayback Machine , издание в формате HTML.
- Технические характеристики MQTT-SN
- Версия 1.2, 14 ноября 2013 г.: PDF-версия