Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

MQTT ( Message Queuing Телеметрия транспорт ) является открытым OASIS и стандарт ISO (ISO / IEC 20922) легким, публикация-подписка сетевого протокола , который передает сообщения между устройствами. Протокол обычно работает через TCP / IP ; однако любой сетевой протокол, который обеспечивает упорядоченные двунаправленные соединения без потерь , может поддерживать MQTT. [1] Он разработан для подключений к удаленным местам, где требуется «небольшой объем кода» или ограничена пропускная способность сети .

История [ править ]

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

В 2013 году IBM представила MQTT v3.1 органу спецификаций OASIS с уставом, который гарантировал принятие только незначительных изменений в спецификации. [2] MQTT-SN (MQTT для сенсорных сетей) [7] - это вариант основного протокола, предназначенный для встроенных устройств с питанием от батарей [8] в сетях, отличных от TCP / IP, таких как Zigbee . После принятия поддержки стандарта от IBM, версия 3.1.1 с небольшими изменениями [9] была выпущена в качестве стандарта OASIS 29 октября 2014 года. [10] [11] Более заменяющее обновление до MQTT версии 5, добавляющее несколько новых функций , [12] был выпущен 7 марта 2019 г. [1]

Исторически «MQ» в «MQTT» происходило из линейки продуктов IBM MQ (затем «MQSeries») MQ. [13] Однако протокол обеспечивает обмен сообщениями с возможностью публикации и подписки (без очередей, несмотря на название) и был специально разработан для устройств с ограниченными ресурсами и сетей с низкой пропускной способностью и высокой задержкой, таких как коммутируемые линии и спутниковые каналы, для пример. [14]

В спецификации, открытой IBM как версия 3.1, формальное название было «MQ Telemetry Protocol (MQTT)», но аббревиатура MQTT широко использовалась в тексте спецификации. [15] Во всех документах, выпущенных OASIS, протокол строго именуется MQTT, хотя сам технический комитет называется «Технический комитет по передаче телеметрии очереди сообщений OASIS». [2]

Обзор [ править ]

Протокол 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 использует шифрование Transport Layer Security (TLS) с именем пользователя, соединениями, защищенными паролем, и дополнительными сертификатами, которые требуют от клиентов предоставления файла сертификата, который совпадает с файлом сертификата сервера. Клиенты не знают IP-адреса друг друга.

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

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

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

Брокер также отслеживает всю информацию о сеансе, когда устройства включаются и выключаются, что называется «постоянными сеансами».

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

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

Типы сообщений [ править ]

Подключиться [ редактировать ]

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

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

Отключить [ редактировать ]

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

Опубликовать [ изменить ]

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

MQTT v5.0 [ править ]

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

  • Коды причин: подтверждения теперь поддерживают коды возврата, которые указывают причину сбоя.
  • Общие подписки: позволяют распределять нагрузку между клиентами и тем самым снижать риск проблем с загрузкой.
  • Срок действия сообщения: сообщения могут включать дату истечения срока действия и удаляются, если они не были доставлены в течение этого периода времени.
  • Псевдоним темы: название темы можно заменить одним числом.

Качество обслуживания (QoS) [ править ]

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

  • Максимум один раз - сообщение отправляется только один раз, и клиент и брокер не предпринимают никаких дополнительных действий для подтверждения доставки (запустить и забыть).
  • По крайней мере один раз - отправитель повторно пытается отправить сообщение до тех пор, пока не будет получено подтверждение (подтвержденная доставка).
  • Ровно один раз - отправитель и получатель участвуют в двухуровневом рукопожатии, чтобы гарантировать получение только одной копии сообщения (гарантированная доставка).

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

Реальные приложения [ править ]

Есть несколько проектов, реализующих MQTT. Примеры:

  • OpenHAB, программная платформа домашней автоматизации с открытым исходным кодом, включает привязку MQTT. [23] [24]
  • Открытая Геопространственная Консорциум SensorThings API стандартная спецификация имеет расширение MQTT в стандарте в качестве дополнительного протокола сообщений связывания. Это было продемонстрировано в пилотной программе IoT Министерства внутренней безопасности США. [25]
  • XIM, Inc. запустила клиент MQTT для Android и iOS под названием MQTT Buddy . [26] [27]
  • Node-RED поддерживает MQTT с узлами TLS начиная с версии 0.14. [28]
  • Home Assistant, программная платформа домашней автоматизации с открытым исходным кодом, поддерживает MQTT и предлагает четыре варианта для брокеров MQTT. [29] [30]
  • ejabberd поддерживает MQTT начиная с версии 19.02. [31]
  • Eclipse Foundation управляет спецификацией протокола Sparkplug, совместимой с MQTT. Он основан на MQTT, добавляя требования, необходимые для промышленных приложений реального времени. [32] [33]

См. Также [ править ]

  • Сравнение реализаций MQTT
  • Apache ActiveMQ
  • RabbitMQ
  • Расширенный протокол очереди сообщений (AMQP)
  • Протокол потоковой передачи текстовых сообщений (STOMP)
  • Протокол ограниченного приложения (CoAP)
  • Расширяемый протокол обмена сообщениями и присутствием (XMPP)
  • IBM MQ

Ссылки [ править ]

  1. ^ a b c d "MQTT Version 5.0" . ОАЗИС . 2019-03-07 . Проверено 15 декабря 2020 .
  2. ^ a b c «Устав Технического комитета по передаче телеметрии очереди сообщений (MQTT) OASIS» . ОАЗИС . Проверено 15 декабря 2020 .
  3. ^ "Подкомитет MQTT SN" . ОАЗИС . Проверено 15 декабря 2020 .
  4. ^ "10-й день рождения" . MQTT.org . Июль 2009. Архивировано из оригинала 15 марта 2015 года . Проверено 25 апреля 2015 года .
  5. ^ «Стенограмма подкаста IBM» (PDF) . IBM.com . Ноябрь 2011 . Проверено 7 января 2021 года .
  6. ^ «Начало работы с MQTT» . HiveMQ. 2020-04-24.
  7. ^ Стэнфорд-Кларк, Энди ; Хун Линь Чыонг (14 ноября 2013 г.). «Спецификация протокола MQTT для сенсорных сетей (MQTT-SN), версия 1.2» (PDF) . oasis-open.org . Технический комитет OASIS Message Queuing Telemetry Transport (MQTT). п. 28 . Проверено 15 декабря 2020 .
  8. ^ «Введение в MQTT-SN (MQTT для сенсорных сетей)» . Проверено 16 сентября 2020 .
  9. ^ «Различия между 3.1.0 и 3.1.1» . Проверено 16 декабря 2020 .
  10. ^ «MQTT Version 3.1.1» . 2014-10-29 . Проверено 16 декабря 2020 .
  11. ^ «6 фактов, почему стоит перейти на новую версию MQTT 3.1.1» . 2014-10-30 . Проверено 16 декабря 2020 .
  12. ^ «Различия между 3.1.1 и 5.0» .
  13. ^ "IBM MQ" . IBM . Проверено 18 ноября 2013 года .
  14. Пайпер, Энди (19 февраля 2013 г.). «Выбор протокола обмена сообщениями: AMQP, MQTT или STOMP» . blogs.vmware.com . Блоги VMware . п. 1 . Проверено 23 октября 2013 года .
  15. ^ «Спецификация протокола MQTT V3.1» . Евротек, Международная корпорация бизнес-машин (IBM). 2010 . Проверено 15 декабря 2020 .
  16. Юань, Майкл. «Знакомство с MQTT» . Разработчик IBM . Проверено 13 октября 2019 .
  17. ^ «Клиент, брокер / сервер и установление соединения - MQTT Essentials: Часть 3» . hivemq.com . Проверено 13 октября 2019 .
  18. ^ «Сохраненные сообщения - Основы MQTT: Часть 8» . hivemq.com . Проверено 13 октября 2019 .
  19. ^ «FAQ - Часто задаваемые вопросы | MQTT» . Проверено 19 марта 2020 .
  20. ^ "MQTT Sparkplug / Tahu" . www.cirrus-link.com . Проверено 5 ноября 2019 года .
  21. ^ «Что такое MQTT? Определение и детали» . www.paessler.com . Проверено 9 июня 2020 .
  22. ^ «Центр знаний IBM - IBM MQ - Использование MQTT с IBM Integration Bus - Качество обслуживания и управление подключениями» . www.ibm.com . Проверено 30 января 2018 .
  23. ^ Saxena, S .; Jain, S .; Arora, D .; Шарма, П. (13 февраля 2020 г.). «Влияние протокола подключения MQTT для автоматизации устройств на основе Интернета вещей с использованием Home Assistant и OpenHAB» . 6-я Международная конференция по вычислениям для устойчивого глобального развития, 2019 г. (INDIACom) : 475–480.
  24. ^ «MQTT - Привязки» . www.openhab.org . Проверено 10 ноября 2020 .
  25. Братья, Реджинальд (25 января 2016 г.). «Интернет S & T по Things Pilot Демонстрирует„Состояние Практикум » . dhs.gov . п. 1 . Проверено 31 марта 2016 года .
  26. ^ "История MQTT Buddy начинается!" . mqtt.ximxim.com . XIM, Inc. 24 февраля 2017 г. с. 1. Архивировано из оригинала 23 июля 2017 года . Проверено 1 июля 2017 года .
  27. ^ "MQTT Buddy" . mqtt.ximxim.com . XIM, Inc. Архивировано из оригинального 21 марта 2018 года . Проверено 1 июля 2017 года .
  28. ^ Сотрудник сообщества (14 июня 2016 г.). «Выпущена версия 0.14» . nodered.org/blog . Узел-КРАСНЫЙ . Проверено 6 июля, 2016 . MQTT с поддержкой TLS
  29. ^ Главная Помощник сообщества (7 августа 2015). «MQTT» . home-assistant.io . Сообщество домашних помощников . Проверено 4 августа 2017 года .
  30. ^ Главная Помощник сообщества (7 августа 2015). «Брокеры MQTT» . home-assistant.io . Сообщество домашних помощников . Проверено 4 августа 2017 года . Компоненту MQTT необходимо, чтобы вы запустили брокера MQTT для подключения Home Assistant. Есть четыре варианта, каждый с разной степенью простоты настройки и конфиденциальности.
  31. ^ ProcessOne, Марек Фосс (26.02.2019). «Эджабберд 19.02: издание MQTT» . ProcessOne - Блог . Проверено 4 марта 2019 .
  32. ^ Истберн, Джош (2020-08-24). «Как интегрировать данные автоматизации с MQTT-Sparkplug B» . Технологии производственного бизнеса . Проверено 1 сентября 2020 .
  33. ^ Гуиндон, Кристофер (2020-01-29). «Часто задаваемые вопросы» . Свечи зажигания Eclipse . Проверено 1 сентября 2020 .

Внешние ссылки [ править ]

  • Официальный веб-сайт
  • Официальный сайт Технического комитета
  • MQTT Технические характеристики
    • Версия 5.0, 07.03.2019: PDF-версия , HTML-версия
    • Версия 3.1.1 Plus Errata 01, 10.12.2015: PDF-версия , HTML-версия
    • Версия 3.1.1, 2014-10-29: PDF-версия , HTML-версия
    • Версия 3.1, 2010: PDF-версия , HTML-версия
  • MQTT-SN Технические характеристики
    • Версия 1.2, 2013-11-14: PDF-версия