El transporte de telemetría de Message Queue Server ( MQTT ) es un protocolo de red ligero de publicación y suscripción que transporta mensajes entre dispositivos. El protocolo generalmente se ejecuta sobre TCP / IP ; sin embargo, cualquier protocolo de red que proporcione conexiones bidireccionales ordenadas y sin pérdidas puede admitir MQTT. [1] Está diseñado para conexiones con ubicaciones remotas donde se requiere una "huella de código pequeña" o el ancho de banda de la red es limitado. El protocolo es un abierto OASIS estándar y una ISO recomendación (ISO / IEC 20922).
Estado | Publicado |
---|---|
Año iniciado | 1999 |
Ultima versión | 5.0 [1] 7 de marzo de 2019 |
Organización | OASIS |
Comité | Comité Técnico de Transporte de Telemetría de Message Queue Server de OASIS [2] |
Editores | Andrew Banks (IBM), Ed Briggs (Microsoft), Ken Borgendale (IBM), Rahul Gupta (IBM) [1] |
Estándares relacionados | MQTT-SN [3] |
Sitio web | mqtt |
Historia
Andy Stanford-Clark ( IBM ) y Arlen Nipper (que entonces trabajaba para Eurotech, Inc. ) fueron los autores de la primera versión del protocolo en 1999. [4] Se utilizó para monitorear oleoductos [5] dentro del marco SCADA . El objetivo era tener un protocolo que ahorre ancho de banda, sea liviano y use poca energía de la batería, porque los dispositivos estaban conectados a través de un enlace satelital que, en ese momento, era extremadamente costoso. [6]
En 2013, IBM presentó MQTT v3.1 al organismo de especificación de OASIS con un estatuto que garantizaba que solo se aceptarían cambios menores en la especificación. [2] MQTT-SN (MQTT para redes de sensores) [7] es una variación del protocolo principal destinado a dispositivos integrados alimentados por batería [8] en redes que no son TCP / IP, como Zigbee . Después de asumir el mantenimiento del estándar de IBM versión 3.1.1 con cambios menores, [9] se lanzó como estándar OASIS el 29 de octubre de 2014. [10] [11] Una actualización más sustancial a MQTT versión 5, agregando varias características nuevas. , [12] fue lanzado el 7 de marzo de 2019 [1].
Históricamente, el "MQ" en "MQTT" provenía de la línea de productos IBM MQ (entonces 'MQSeries') MQ. [13] Sin embargo, el protocolo proporciona mensajes de publicación y suscripción (sin colas, a pesar del nombre) y fue diseñado específicamente para dispositivos con recursos limitados y redes de bajo ancho de banda y alta latencia, como líneas de acceso telefónico y enlaces satelitales, para ejemplo. [14]
En la especificación abierta por IBM como versión 3.1, el nombre formal era "Protocolo de telemetría MQ (MQTT)", pero la abreviatura MQTT se utilizó ampliamente en el texto de la especificación. [15] En todos los documentos publicados por OASIS, el protocolo se denomina estrictamente MQTT, aunque el comité técnico en sí se denomina "Comité Técnico de Transporte de Telemetría de Cola de Mensajes de OASIS". [2]
Descripción general
El protocolo MQTT define dos tipos de entidades de red: un intermediario de mensajes y varios clientes. Un intermediario MQTT es un servidor que recibe todos los mensajes de los clientes y luego enruta los mensajes a los clientes de destino adecuados. [16] Un cliente MQTT es cualquier dispositivo (desde un microcontrolador hasta un servidor completo) que ejecuta una biblioteca MQTT y se conecta a un agente MQTT a través de una red. [17]
La información está organizada en una jerarquía de temas . Cuando un editor tiene un nuevo elemento de datos para distribuir, envía un mensaje de control con los datos al corredor conectado. El corredor luego distribuye la información a cualquier cliente que se haya suscrito a ese tema. El editor no necesita tener ningún dato sobre el número o la ubicación de los suscriptores y, a su vez, los suscriptores no tienen que estar configurados con ningún dato sobre los editores.
Si un corredor recibe un mensaje sobre un tema para el que no hay suscriptores actuales, el corredor descarta el mensaje a menos que el editor del mensaje haya designado el mensaje como un mensaje retenido . Un mensaje retenido es un mensaje MQTT normal con el indicador retenido establecido en verdadero. El corredor almacena el último mensaje retenido y la QoS correspondiente para el tema seleccionado. Cada cliente que se suscribe a un patrón de tema que coincide con el tema del mensaje retenido recibe el mensaje retenido inmediatamente después de suscribirse. El intermediario almacena solo un mensaje retenido por tema. [18] Esto permite que los nuevos suscriptores de un tema reciban el valor más actual en lugar de esperar la próxima actualización de un editor.
Cuando un cliente de publicación se conecta por primera vez al intermediario, puede configurar un mensaje predeterminado que se enviará a los suscriptores si el intermediario detecta que el cliente de publicación se ha desconectado inesperadamente del intermediario.
Los clientes solo interactúan con un corredor, pero un sistema puede contener varios servidores de corredor que intercambian datos según los temas de sus suscriptores actuales.
Un mensaje de control MQTT mínimo puede tener tan solo dos bytes de datos. Un mensaje de control puede transportar casi 256 megabytes de datos si es necesario. Hay catorce tipos de mensajes definidos que se utilizan para conectar y desconectar un cliente de un intermediario, publicar datos, acusar recibo de datos y supervisar la conexión entre el cliente y el servidor.
MQTT se basa en el protocolo TCP para la transmisión de datos. Se utiliza una variante, MQTT-SN, sobre otros transportes como UDP o Bluetooth.
MQTT envía las credenciales de conexión en formato de texto sin formato y no incluye ninguna medida de seguridad o autenticación. Esto se puede proporcionar utilizando TLS para cifrar y proteger la información transferida contra la interceptación, modificación o falsificación.
El puerto MQTT sin cifrar predeterminado es 1883. El puerto cifrado es 8883. [19]
Broker MQTT
El bróker MQTT es un software que se ejecuta en una computadora (que se ejecuta en las instalaciones o en la nube) y puede ser autoconstruido o alojado por un tercero. Está disponible en implementaciones de código abierto y propietarias.
El corredor actúa como una oficina de correos, MQTT no usa la dirección del destinatario previsto, pero usa la línea de asunto llamada "Tema", y cualquiera que desee una copia de ese mensaje se suscribirá a ese tema. Varios clientes pueden recibir el mensaje de un solo corredor (capacidad de uno a muchos). De manera similar, varios editores pueden publicar temas para un solo suscriptor (muchos a uno).
Cada cliente puede producir y recibir datos publicando y suscribiéndose, es decir, los dispositivos pueden publicar datos de sensores y seguir recibiendo la información de configuración o los comandos de control (MQTT es un protocolo de comunicación bidireccional). Esto ayuda tanto a compartir datos como a administrar y controlar dispositivos.
Con la arquitectura del agente MQTT, los dispositivos y la aplicación se desacoplan y son más seguros. MQTT utiliza el cifrado Transport Layer Security (TLS) con nombre de usuario, conexiones protegidas con contraseña y certificaciones opcionales que requieren que los clientes proporcionen un archivo de certificado que coincida con el del servidor. Los clientes desconocen la dirección IP del otro.
En caso de una sola fuente de falla, el software del corredor y los clientes tienen un traspaso automático al corredor de respaldo redundante / automático. El agente de respaldo también se puede configurar para compartir la carga de clientes en múltiples servidores en el sitio, en la nube o la combinación de ambos.
El corredor puede admitir tanto MQTT estándar como MQTT para especificaciones compatibles como Sparkplug, [20] se puede hacer con el mismo servidor, al mismo tiempo y con los mismos niveles de seguridad.
El corredor puede almacenar los datos en forma de mensajes retenidos (es necesario suscribirse con el cliente de la base de datos) para que los nuevos suscriptores del tema puedan obtener el último valor de inmediato.
El corredor también realiza un seguimiento de toda la información de la sesión a medida que los dispositivos se encienden y apagan, lo que se denomina "sesiones persistentes".
Las principales ventajas del broker MQTT son:
- Elimina las conexiones de clientes vulnerables e inseguras
- Puede escalar fácilmente de un solo dispositivo a miles
- Administra y rastrea todos los estados de conexión del cliente, incluidas las credenciales y certificados de seguridad
- Reducción de la tensión de la red sin comprometer la seguridad (red celular o satelital)
Tipos de mensajes
Conectar
Espera a que se establezca una conexión con el servidor y crea un enlace entre los nodos.
Desconectar
Espera a que el cliente MQTT finalice el trabajo que debe realizar y a que se desconecte la sesión de TCP / IP .
Publicar
Vuelve inmediatamente al subproceso de la aplicación después de pasar la solicitud al cliente MQTT.
MQTT v5.0
En 2019, OASIS lanzó el estándar oficial MQTT 5.0. La versión 5.0 incluye las siguientes funciones nuevas importantes: [21]
- Códigos de motivo: los reconocimientos ahora admiten códigos de retorno, que proporcionan una razón para un error.
- Suscripciones compartidas: permiten equilibrar la carga entre los clientes y, por lo tanto, reducen el riesgo de problemas de carga.
- Caducidad del mensaje: los mensajes pueden incluir una fecha de caducidad y se eliminan si no se entregan dentro de este período de tiempo.
- Alias de tema: el nombre de un tema se puede reemplazar con un solo número
Calidad de servicio (QoS)
Cada conexión con el corredor puede especificar una medida de calidad de servicio . Estos se clasifican en orden creciente de gastos generales:
- Como máximo una vez: el mensaje se envía solo una vez y el cliente y el corredor no toman medidas adicionales para acusar recibo de la entrega (despedir y olvidar).
- Al menos una vez: el remitente vuelve a intentar el mensaje varias veces hasta que se recibe un acuse de recibo (entrega confirmada).
- Exactamente una vez: el remitente y el receptor entablan un protocolo de enlace de dos niveles para garantizar que solo se reciba una copia del mensaje (entrega asegurada).
[22] Este campo no afecta al manejo de las transmisiones de datos TCP subyacentes; sólo se utiliza entre emisores y receptores MQTT.
Aplicaciones
Varios proyectos implementan MQTT, por ejemplo:
- OpenHAB, la plataforma de automatización del hogar de software de código abierto , incorpora un enlace MQTT. [23] [24]
- La especificación estándar de la API SensorThings del Open Geospatial Consortium tiene una extensión MQTT en el estándar como un enlace de protocolo de mensaje adicional. Se demostró en un piloto de IoT del Departamento de Seguridad Nacional de EE. UU. [25]
- Node-RED admite MQTT con nodos TLS a partir de la versión 0.14. [26]
- Home Assistant, la plataforma de automatización del hogar de software de código abierto , está habilitada para MQTT y ofrece cuatro opciones para los corredores de MQTT. [27] [28]
- ejabberd admite MQTT a partir de la versión 19.02. [29]
- Eclipse Foundation gestiona una especificación de protocolo Sparkplug compatible con MQTT. Se basa en MQTT y agrega los requisitos necesarios en aplicaciones industriales en tiempo real. [30] [31]
Ver también
- Comparación de implementaciones MQTT
- Protocolo de cola de mensajes avanzado (AMQP)
- Protocolo de transmisión de mensajes orientados a texto (STOMP)
- Protocolo de aplicación restringida (CoAP)
- Protocolo extensible de mensajería y presencia (XMPP)
- Apache ActiveMQ
- IBM MQ
- Consuelo PubSub + [32] [33]
- RabbitMQ
Referencias
- ^ a b c d "MQTT Versión 5.0" . OASIS . 2019-03-07 . Consultado el 15 de diciembre de 2020 .
- ^ a b c "Carta del Comité Técnico de Transporte de Telemetría de Cola de Mensajes (MQTT) de OASIS" . OASIS . Consultado el 15 de diciembre de 2020 .
- ^ "Subcomité SN MQTT" . OASIS . Consultado el 15 de diciembre de 2020 .
- ^ "Fiesta de cumpleaños número 10" . MQTT.org . Julio de 2009. Archivado desde el original el 15 de marzo de 2015 . Consultado el 25 de abril de 2015 .
- ^ "Transcripción del podcast de IBM" (PDF) . IBM.com . Noviembre de 2011 . Consultado el 7 de enero de 2021 .
- ^ "Introducción a MQTT" . HiveMQ. 2020-04-24.
- ^ Stanford-Clark, Andy ; Hong Linh Truong (14 de noviembre de 2013). "Versión 1.2 de la especificación del protocolo MQTT para redes de sensores (MQTT-SN)" (PDF) . oasis-open.org . Comité Técnico de Transporte de Telemetría de Cola de Mensajes (MQTT) de OASIS. pag. 28 . Consultado el 15 de diciembre de 2020 .
- ^ "Introducción a MQTT-SN (MQTT para redes de sensores)" . Consultado el 16 de septiembre de 2020 .
- ^ "Diferencias entre 3.1.0 y 3.1.1" . Consultado el 16 de diciembre de 2020 .
- ^ "MQTT Versión 3.1.1" . 2014-10-29 . Consultado el 16 de diciembre de 2020 .
- ^ "6 hechos por los que vale la pena actualizar a la nueva versión MQTT 3.1.1" . 2014-10-30 . Consultado el 16 de diciembre de 2020 .
- ^ "Diferencias entre 3.1.1 y 5.0" .
- ^ "IBM MQ" . IBM . Consultado el 18 de noviembre de 2013 .
- ^ Piper, Andy (19 de febrero de 2013). "Elección de su protocolo de mensajería: AMQP, MQTT o STOMP" . blogs.vmware.com . Blogs de VMware . pag. 1 . Consultado el 23 de octubre de 2013 .
- ^ "Especificación del protocolo MQTT V3.1" . Eurotech, Corporación de Máquinas de Negocios Internacionales (IBM). 2010 . Consultado el 15 de diciembre de 2020 .
- ^ Yuan, Michael. "Conociendo MQTT" . Desarrollador de IBM . Consultado el 13 de octubre de 2019 .
- ^ "Cliente, Broker / Servidor y Establecimiento de Conexión - MQTT Essentials: Parte 3" . hivemq.com . Consultado el 13 de octubre de 2019 .
- ^ "Mensajes retenidos - MQTT Essentials: Parte 8" . hivemq.com . Consultado el 13 de octubre de 2019 .
- ^ "FAQ - Preguntas más frecuentes | MQTT" . Consultado el 19 de marzo de 2020 .
- ^ "Bujía MQTT / Tahu" . www.cirrus-link.com . Consultado el 5 de noviembre de 2019 .
- ^ "¿Qué es MQTT? Definición y detalles" . www.paessler.com . Consultado el 9 de junio de 2020 .
- ^ "IBM Knowledge Center - IBM MQ - Usando MQTT con IBM Integration Bus - Calidad de servicio y gestión de conexiones" . www.ibm.com . Consultado el 30 de enero de 2018 .
- ^ Saxena, S .; Jain, S .; Arora, D .; Sharma, P. (13 de febrero de 2020). "Implicaciones del protocolo de conectividad MQTT para la automatización de dispositivos basada en IoT usando Home Assistant y OpenHAB" . 2019 VI Congreso Internacional de Computación para el Desarrollo Global Sostenible (INDIACom) : 475–480.
- ^ "MQTT - Enlaces" . www.openhab.org . Consultado el 10 de noviembre de 2020 .
- ^ Brothers, Reginald (25 de enero de 2016). "El piloto de Internet de las cosas de S&T demuestra el 'estado de la práctica ' " . dhs.gov . pag. 1 . Consultado el 31 de marzo de 2016 .
- ^ Redactor del personal de la comunidad (14 de junio de 2016). "Versión 0.14 publicada" . nodered.org/blog . Nodo-RED . Consultado el 6 de julio de 2016 .
MQTT con soporte TLS
- ^ Home Assistant Community (7 de agosto de 2015). "MQTT" . home-assistant.io . Comunidad Home Assistant . Consultado el 4 de agosto de 2017 .
- ^ Home Assistant Community (7 de agosto de 2015). "Corredores MQTT" . home-assistant.io . Comunidad Home Assistant . Consultado el 4 de agosto de 2017 .
El componente MQTT necesita que ejecute un agente MQTT para que Home Assistant se conecte. Hay cuatro opciones, cada una con varios grados de facilidad de configuración y privacidad.
- ^ ProcessOne, Marek Foss (26 de febrero de 2019). "ejabberd 19.02: la edición MQTT" . ProcessOne - Blog . Consultado el 4 de marzo de 2019 .
- ^ Eastburn, Josh (24 de agosto de 2020). "Cómo integrar datos de automatización con MQTT-Sparkplug B" . Tecnología empresarial de fabricación . Consultado el 1 de septiembre de 2020 .
- ^ Guindon, Christopher (29 de enero de 2020). "Preguntas frecuentes" . Bujía Eclipse . Consultado el 1 de septiembre de 2020 .
- ^ "API y protocolos" . Consuelo . Consultado el 8 de abril de 2021 .
- ^ "Soporte MQTT 5.0 🎉" . Comunidad de consuelo . Consultado el 8 de abril de 2021 .
enlaces externos
- Página web oficial
- Sitio web oficial del Comité Técnico
- Especificaciones MQTT
- Versión 5.0, 2019-03-07: edición PDF , edición HTML
- Versión 3.1.1 Plus Errata 01, 2015-12-10: edición PDF , edición HTML
- Versión 3.1.1, 2014-10-29: edición PDF , edición HTML
- Versión 3.1, 2010: edición PDF , edición HTML
- Especificaciones de MQTT-SN
- Versión 1.2, 2013-11-14: edición PDF