MQTT - MQTT
Статус | Опубликовано |
---|---|
Год начался | 1999 |
Последняя версия | 5.0[1] 7 марта 2019 г. |
Организация | ОАЗИС |
Сокращение | MQTT |
Интернет сайт | mqtt |
Набор интернет-протоколов |
---|
Уровень приложения |
Транспортный уровень |
Интернет-уровень |
Связующий слой |
MQTT[2] (MQ Telemetry Transport[3][неудачная проверка ] или Транспорт телеметрии очереди сообщений) является открытым ОАЗИС и Стандарт ISO (ИСО / МЭК 20922)[4] легкий, опубликовать-подписаться сеть протокол который передает сообщения между устройствами. Протокол обычно выходит за рамки TCP / IP; однако любой сетевой протокол, обеспечивающий упорядоченный, без потерь, двунаправленные соединения могут поддерживать MQTT.[5] Он разработан для подключения к удаленным местам, где требуется «небольшой след кода» или сеть пропускная способность ограничено.
История
Энди Стэнфорд-Кларк (IBM ) и Арлен Ниппер (Cirrus Link, затем Eurotech) создали первую версию протокола в 1999 году.[6] Его использовали для наблюдения за нефтепроводом через пустыню. Задача заключалась в том, чтобы иметь протокол, обеспечивающий эффективную полосу пропускания, легкий и потребляющий мало энергии батареи, поскольку устройства были подключены через спутниковую связь, которая в то время была чрезвычайно дорогой.[7]
В 2013 году IBM представила MQTT v3.1 ОАЗИС орган по спецификациям с уставом, который гарантировал принятие только незначительных изменений в спецификации.[8] MQTT-SN (MQTT для сенсорных сетей)[9] это вариант основного протокола, предназначенный для работы от батарей[10] встроенные устройства в сетях, отличных от TCP / IP, например Зигби.
Исторически «MQ» в «MQTT» происходило от IBM MQ (затем «MQSeries») Линия продуктов MQ.[11] Однако протокол обеспечивает обмен сообщениями с возможностью публикации и подписки (без очередей, несмотря на название) и был специально разработан для устройств с ограниченными ресурсами и сетей с низкой пропускной способностью и высокой задержкой, например, для коммутируемых линий и спутниковых каналов.[12]
Обзор
Протокол MQTT определяет два типа сетевых объектов: брокер сообщений и ряд клиентов. Брокер MQTT - это сервер, который получает все сообщения от клиентов, а затем направляет сообщения соответствующим конечным клиентам.[13] Клиент MQTT - это любое устройство (от микроконтроллера до полноценного сервера), на котором работает библиотека MQTT и которое подключается к брокеру MQTT по сети.[14]
Информация организована в виде иерархии темы. Когда у издателя есть новый элемент данных для распространения, он отправляет управляющее сообщение с данными подключенному брокеру. Затем брокер распространяет информацию среди всех клиентов, которые подписались на эту тему. Издателю не нужны какие-либо данные о количестве или местонахождении подписчиков, а подписчикам, в свою очередь, не нужно настраивать какие-либо данные об издателях.
Если брокер получает сообщение по теме, для которой нет текущих подписчиков, он отбрасывает сообщение, если издатель сообщения не обозначил сообщение как сохраненное сообщение. Сохраненное сообщение - это обычное сообщение MQTT с установленным флагом сохранения значение true. Брокер сохраняет последнее сохраненное сообщение и соответствующее QoS для выбранной темы. Каждый клиент, который подписывается на шаблон темы, соответствующий теме сохраненного сообщения, получает сохраненное сообщение сразу после подписки. Брокер хранит только одно сохраненное сообщение для каждой темы.[15] Это позволяет новым подписчикам темы получать самое актуальное значение, а не ждать следующего обновления от издателя.
Когда публикующий клиент впервые подключается к брокеру, он может настроить сообщение по умолчанию, которое будет отправлено подписчикам, если брокер обнаружит, что публикующий клиент неожиданно отключился от посредника.
Клиенты взаимодействуют только с брокером, но система может содержать несколько брокерских серверов, которые обмениваются данными на основе тем своих текущих подписчиков.
Минимальное управляющее сообщение MQTT может состоять всего из двух байтов данных. При необходимости управляющее сообщение может содержать около 256 мегабайт данных. Существует четырнадцать определенных типов сообщений, используемых для подключения и отключения клиента от брокера, для публикации данных, подтверждения получения данных и для наблюдения за соединением между клиентом и сервером.
MQTT полагается на протокол TCP для передачи данных. Вариант MQTT-SN используется поверх других транспортных средств, таких как UDP или Bluetooth.
MQTT отправляет учетные данные для подключения в текстовом формате и не включает никаких мер безопасности или аутентификации. Это можно сделать, используя TLS для шифрования и защиты передаваемой информации от перехвата, изменения или подделки.
По умолчанию незашифрованный порт MQTT - 1883. Зашифрованный порт - 8883.[16]
Брокер MQTT
Брокер MQTT - это программное обеспечение, работающее на компьютере (локально или в облаке), которое может быть создано самостоятельно или размещено третьей стороной. Он доступен как в реализациях с открытым исходным кодом, так и в проприетарных реализациях.
Брокер действует как почтовое отделение, MQTT не использует адрес предполагаемого получателя, а использует строку темы под названием «Тема», и любой, кто хочет получить копию этого сообщения, подпишется на эту тему. Несколько клиентов могут получить сообщение от одного брокера (возможность от одного ко многим). Точно так же несколько издателей могут публиковать темы для одного подписчика (многие к одному).
Каждый клиент может как создавать, так и получать данные, публикуя и подписываясь, то есть устройства могут публиковать данные датчиков и по-прежнему иметь возможность получать информацию о конфигурации или команды управления (MQTT - это протокол двусторонней связи). Это помогает как в обмене данными, так и в управлении устройствами.
Благодаря архитектуре брокера MQTT устройства и приложения становятся независимыми и безопасными. MQTT использует Безопасность транспортного уровня (TLS) шифрование с использованием имени пользователя, защищенных паролем соединений и дополнительных сертификатов, требующих от клиентов предоставления файла сертификата, совпадающего с файлом сертификата сервера. Клиенты не знают IP-адреса друг друга.
В случае единственного источника сбоя программное обеспечение и клиенты брокера автоматически переключаются на резервный / автоматический резервный брокер. Брокер резервного копирования также можно настроить для распределения нагрузки клиентов между несколькими серверами на месте, в облаке или в комбинации обоих.
Брокер может поддерживать как стандартный MQTT, так и MQTT для совместимых спецификаций, таких как Sparkplug.[17], может выполняться на одном сервере, в одно время и с одинаковыми уровнями безопасности.
Брокер может хранить данные в виде сохраненных сообщений (необходимо подписаться с клиентом базы данных), чтобы новые подписчики на тему могли сразу получить последнее значение.
Брокер также отслеживает всю информацию о сеансе, когда устройства включаются и выключаются, что называется «постоянными сеансами».
Основными преимуществами брокера MQTT являются:
- Устраняет уязвимые и небезопасные клиентские подключения
- Можно легко масштабировать от одного устройства до тысяч
- Управляет и отслеживает все состояния подключения клиентов, включая учетные данные и сертификаты безопасности
- Снижение нагрузки на сеть без ущерба для безопасности (сотовая или спутниковая сеть)
Типы сообщений
Подключить
Ожидает установления соединения с сервером и создает связь между узлами.
Отключить
Ожидает, пока клиент MQTT завершит любую работу, которую он должен выполнить, и пока TCP / IP сеанс отключиться.
Публиковать
Немедленно возвращается в поток приложения после передачи запроса клиенту MQTT.
MQTT v5.0
В 2019 году OASIS выпустил официальный стандарт MQTT 5.0. Версия 5.0 включает следующие основные новые функции:[18]
- Коды причин: подтверждения теперь поддерживают коды возврата, которые указывают причину сбоя.
- Общие подписки: позволяют распределять нагрузку между клиентами и, таким образом, снижают риск проблем с загрузкой.
- Срок действия сообщения: сообщения могут содержать дату истечения срока действия и удаляются, если они не были доставлены в течение этого периода времени.
- Псевдоним темы: название темы можно заменить одним числом.
Качество обслуживания (QoS)
Каждое соединение с брокером может указывать качество обслуживания мера. Они классифицируются в порядке возрастания накладных расходов:
- Максимум один раз - сообщение отправляется только один раз, и клиент и брокер не предпринимают никаких дополнительных действий для подтверждения доставки (запустить и забыть).
- По крайней мере, один раз - отправитель повторно пытается отправить сообщение до тех пор, пока не будет получено подтверждение (подтвержденная доставка).
- Ровно один раз - отправитель и получатель участвуют в двухуровневом рукопожатии, чтобы гарантировать получение только одной копии сообщения (гарантированная доставка).
[19]Это поле не влияет на обработку базовых передач данных TCP; он используется только между отправителями и получателями MQTT.
Реальные приложения
Есть несколько проектов, реализующих MQTT. Примеры:
- OpenHAB то Программное обеспечение с открытым исходным кодом Домашняя автоматизация платформа встроила привязку MQTT.[20][21]
- В Открытый геопространственный консорциум SensorThings API стандартная спецификация имеет расширение MQTT в стандарте как дополнительную привязку протокола сообщений. Это было продемонстрировано в пилотной программе IoT Министерства внутренней безопасности США.[22]
- XIM, Inc. запустил клиент MQTT для Android и iOS называется MQTT приятель.[23][24]
- Узел-КРАСНЫЙ поддерживает MQTT с TLS узлов начиная с версии 0.14.[25]
- Программное обеспечение с открытым исходным кодом Домашняя автоматизация Платформа Home Assistant поддерживает MQTT и предлагает четыре варианта для брокеров MQTT.[26][27]
- Ejabberd поддерживает MQTT с версии 19.02.[28]
- Фонд Затмения управляет спецификацией протокола Sparkplug, совместимой с MQTT. Он основан на MQTT, добавляя требования, необходимые для промышленных приложений реального времени.[29][30]
Смотрите также
- Сравнение реализаций MQTT
- Apache ActiveMQ
- RabbitMQ
- Расширенный протокол очереди сообщений (AMQP)
- Протокол потоковой передачи текстовых сообщений (ТОРМО)
- Протокол ограниченного приложения (CoAP)
- Расширяемый протокол обмена сообщениями и присутствия (XMPP)
использованная литература
- ^ https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html
- ^ «Спецификация MQTT 5.0». ОАЗИС. Получено 2020-08-25.
- ^ «FAQ - Часто задаваемые вопросы | MQTT». Получено 2020-04-23.
- ^ «ISO / IEC 20922: 2016 Информационные технологии - MQ Telemetry Transport (MQTT) v3.1.1». iso.org. Международная организация по стандартизации. 15 июня 2016 г.. Получено 8 апреля, 2020.
- ^ «Стандартная спецификация MQTT версии 5.0 OASIS» (PDF). ОАЗИС. Получено 15 октября 2019.
- ^ «10-й день рождения». MQTT.org. Июль 2009 г.. Получено 25 апреля, 2015.
- ^ «MQTT».
- ^ «Технический комитет OASIS MQ Telemetry Transport (MQTT)». ОАЗИС. Получено 9 мая, 2014.
- ^ Стэнфорд-Кларк, Энди; Хонг Линь Чыонг (14 ноября 2013 г.). «Спецификация протокола MQTT для сенсорных сетей (MQTT-SN), версия 1.2» (PDF). mqtt.org. MQTT. п. 27. Получено 9 мая, 2014.
- ^ «Введение в MQTT-SN (MQTT для сенсорных сетей)». Получено 2020-09-16.
- ^ «IBM MQ». IBM. Получено 18 ноября, 2013.
- ^ Пайпер, Энди (19 февраля 2013 г.). «Выбор протокола обмена сообщениями: AMQP, MQTT или STOMP». blogs.vmware.com. VMware Блоги. п. 1. Получено 23 октября, 2013.
- ^ Юань, Майкл. «Знакомство с MQTT». Разработчик IBM. Получено 13 октября 2019.
- ^ «Клиент, брокер / сервер и установление соединения - MQTT Essentials: Часть 3». hivemq.com. Получено 13 октября 2019.
- ^ «Сохраненные сообщения - Основы MQTT: Часть 8». hivemq.com. Получено 13 октября 2019.
- ^ «FAQ - Часто задаваемые вопросы | MQTT». Получено 2020-03-19.
- ^ "Свечи зажигания MQTT / Tahu". www.cirrus-link.com. Получено 5 ноября, 2019.
- ^ «Что такое MQTT? Определение и подробности». www.paessler.com. Получено 2020-06-09.
- ^ «Центр знаний IBM». www.ibm.com. Получено 2018-01-30.
- ^ Saxena, S .; Jain, S .; Arora, D .; Шарма, П. (13 февраля 2020 г.). «Влияние протокола подключения MQTT для автоматизации устройств на основе Интернета вещей с использованием Home Assistant и OpenHAB». 2019 6-я Международная конференция по вычислениям для устойчивого глобального развития (INDIACom): 475–480.
- ^ «MQTT - Привязки». www.openhab.org. Получено 2020-11-10.
- ^ Братья, Реджинальд (25 января 2016 г.). "Пилотный проект S&T по Интернету вещей демонстрирует практическое'". dhs.gov. п. 1. Получено 31 марта, 2016.
- ^ "История MQTT Buddy начинается!". mqtt.ximxim.com. XIM, Inc. 24 февраля 2017. с. 1. Архивировано из оригинал 23 июля 2017 г.. Получено 1 июля, 2017.
- ^ "MQTT Buddy". mqtt.ximxim.com. XIM, Inc. Архивировано из оригинал 21 марта 2018 г.. Получено 1 июля, 2017.
- ^ Штатный писатель сообщества (14 июня 2016 г.). «Выпущена версия 0.14». nodered.org/blog. Узел-КРАСНЫЙ. Получено 6 июля, 2016.
MQTT с поддержкой TLS
- ^ Сообщество домашних помощников (7 августа 2015 г.). «MQTT». home-assistant.io. Сообщество домашних помощников. Получено 4 августа, 2017.
- ^ Сообщество домашних помощников (7 августа 2015 г.). «Брокеры MQTT». home-assistant.io. Сообщество домашних помощников. Получено 4 августа, 2017.
Компоненту MQTT необходимо, чтобы вы запустили брокера MQTT для подключения Home Assistant. Есть четыре варианта, каждый с разной степенью простоты настройки и конфиденциальности.
- ^ ProcessOne, Марек Фосс (26 февраля 2019 г.). "Эджабберд 19.02: издание MQTT". ProcessOne - Блог. Получено 2019-03-04.
- ^ Истберн, Джош (24.08.2020). «Как интегрировать данные автоматизации с MQTT-Sparkplug B». Технологии производственного бизнеса. Получено 2020-09-01.
- ^ Гуиндон, Кристофер (29.01.2020). "Часто задаваемые вопросы". Свечи зажигания Eclipse. Получено 2020-09-01.