Articulo de referencia

MQTT

MQTT (originalmente un acrónimo de MQ Telemetry Transport [a] ) es un protocolo de red ligero, de publicación-suscripción , de máquina a máquina para colas de mensajes / servici...

MQTT (originalmente un acrónimo de MQ Telemetry Transport [a] ) es un protocolo de red ligero, de publicación-suscripción , de máquina a máquina para colas de mensajes / servicios de colas de mensajes . Está diseñado para conexiones con ubicaciones remotas que tienen dispositivos con limitaciones de recursos o ancho de banda de red limitado , como en Internet de las cosas (IoT). Debe ejecutarse sobre un protocolo de transporte que proporcione conexiones ordenadas, sin pérdidas y bidireccionales, típicamente, TCP/IP . [1] Es un estándar OASIS abierto y una recomendación ISO ( ISO/IEC 20922 ).

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. [6] Se utilizó para monitorear oleoductos dentro del sistema de control industrial SCADA . [7] El objetivo era tener un protocolo que fuera eficiente en el ancho de banda, liviano y que usara 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. [8]

Históricamente, el "MQ" en "MQTT" proviene de la línea de productos IBM MQ (en aquel entonces 'MQSeries'), donde significa "Cola de mensajes". Sin embargo, el protocolo proporciona mensajería de publicación y suscripción (sin colas, a pesar del nombre). [9] En la especificación abierta por IBM como versión 3.1, el protocolo se denominaba "Transporte de telemetría MQ". [10] [11] Las versiones posteriores publicadas por OASIS se refieren estrictamente al protocolo simplemente como "MQTT", aunque el comité técnico en sí se llama "Comité técnico de transporte de telemetría de colas de mensajes de OASIS". [4] Desde 2013, "MQTT" no significa nada. [12] [9]

En 2013, IBM presentó MQTT v3.1 al organismo de especificación OASIS con un estatuto que garantizaba que solo se podían aceptar cambios menores a la especificación. [4] Después de hacerse cargo del mantenimiento del estándar de IBM, OASIS lanzó la versión 3.1.1 el 29 de octubre de 2014. [13] [14] Una actualización más sustancial a MQTT versión 5, agregando varias características nuevas, [15] se lanzó el 7 de marzo de 2019. [1]

MQTT-SN (MQTT para redes de sensores) es una variación del protocolo principal destinado a dispositivos integrados alimentados por batería en redes que no son TCP/IP, [16] como Zigbee . [17]

Descripción general

El protocolo MQTT define dos tipos de entidades de red: un agente de mensajes y una serie de clientes. Un agente MQTT es un servidor que recibe todos los mensajes de los clientes y luego los enruta a los clientes de destino apropiados. [18] 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. [19]

La información se organiza en una jerarquía de temas. Cuando un publicador tiene un nuevo elemento de datos para distribuir, envía un mensaje de control con los datos al agente conectado. A continuación, el agente distribuye la información a todos los clientes que se hayan suscrito a ese tema. El publicador no necesita tener ningún dato sobre la cantidad o las ubicaciones de los suscriptores y, a su vez, los suscriptores no tienen que estar configurados con ningún dato sobre los publicadores.

Si un intermediario recibe un mensaje sobre un tema para el cual no hay suscriptores actuales, el intermediario descarta el mensaje a menos que el publicador del mensaje lo haya designado como un mensaje retenido. Un mensaje retenido es un mensaje MQTT normal con el indicador retenido establecido en verdadero. El intermediario almacena el último mensaje retenido y la calidad de servicio (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. [20] Esto permite que los nuevos suscriptores a un tema reciban el valor más actual en lugar de esperar la próxima actualización de un publicador.

Cuando un cliente de publicación se conecta por primera vez al broker, puede configurar un mensaje predeterminado que se enviará a los suscriptores si el broker detecta que el cliente de publicación se ha desconectado inesperadamente del broker.

Los clientes solo interactúan con un bróker, pero un sistema puede contener varios servidores bróker 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, confirmar la recepción 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. Una variante, MQTT-SN, se utiliza 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 lograr mediante el uso de 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. [21]

Corredor MQTT

El broker MQTT es un software que se ejecuta en una computadora (en las instalaciones o en la nube) y puede ser de desarrollo propio o hospedado por un tercero. Está disponible en implementaciones de código abierto y propietarias.

El broker actúa como una oficina de correos. Los clientes MQTT no utilizan una dirección de conexión directa del destinatario previsto, sino que utilizan la línea de asunto denominada "Tema". Cualquiera que se suscriba recibe una copia de todos los mensajes de ese tema. Varios clientes pueden suscribirse a un tema desde un único broker (capacidad de uno a muchos) y un único cliente puede registrar suscripciones a temas con varios brokers (muchos a uno).

Cada cliente puede producir y recibir datos mediante la publicación y la suscripción, es decir, los dispositivos pueden publicar datos de sensores y, aun así, recibir la información de configuración o los comandos de control (MQTT es un protocolo de comunicación bidireccional). Esto ayuda a compartir datos y a gestionar y controlar dispositivos. Un cliente no puede transmitir los mismos datos a una variedad de temas y debe publicar varios mensajes al intermediario, cada uno con un único tema determinado.

Con la arquitectura del broker MQTT, los dispositivos cliente y la aplicación servidor se desacoplan. De esta manera, los clientes no conocen la información de los demás. MQTT, si está configurado para ello, puede utilizar el cifrado TLS con conexiones protegidas por certificado, nombre de usuario y contraseña. Opcionalmente, la conexión puede requerir certificación, en forma de un archivo de certificado que proporciona un cliente y debe coincidir con la copia del servidor.

En caso de falla, el software del bróker y los clientes pueden transferir automáticamente la carga a un bróker de respaldo redundante/automático. Los brókeres de respaldo también pueden configurarse para compartir la carga de los clientes entre varios servidores en el sitio, en la nube o una combinación de estos.

El broker puede soportar tanto MQTT estándar como MQTT para especificaciones compatibles como Sparkplug. [22] Esto se puede hacer con el mismo servidor, al mismo tiempo y con los mismos niveles de seguridad.

El intermediario realiza un seguimiento de toda la información de la sesión a medida que el dispositivo se enciende y se apaga, en una función llamada "sesiones persistentes". En este estado, un intermediario almacenará tanto la información de conexión de cada cliente, los temas a los que se ha suscrito cada cliente y cualquier mensaje de un tema con una QoS de 1 o 2. [23]

Las principales ventajas de un broker MQTT son:

  1. Eliminación de conexiones de clientes vulnerables e inseguras (cuando esté configurado adecuadamente).
  2. Capacidad de escalar fácilmente desde un solo dispositivo a miles.
  3. Gestión y seguimiento de los estados de conexión del cliente, incluidas las credenciales de seguridad y los certificados (cuando estén configurados adecuadamente).
  4. Reducción de la tensión en las redes celulares o satelitales sin comprometer la seguridad (cuando está configurado adecuadamente).

Tipos de mensajes

Conectar

Ejemplo de una conexión MQTT (QoS 0) con conexión, publicación/suscripción y desconexión. El primer mensaje del cliente B se almacena gracias al indicador de retención.

Espera que se establezca una conexión con el servidor y crea un enlace entre los nodos.

Desconectar

Espera a que el cliente MQTT finalice cualquier trabajo que deba realizar y a que la sesión TCP/IP se desconecte.

Publicar

Regresa inmediatamente al hilo de la aplicación después de pasar la solicitud al cliente MQTT.

Versión 5.0

En 2019, OASIS lanzó el estándar oficial MQTT 5.0. [1] La versión 5.0 incluye las siguientes características nuevas importantes: [24]

  • Códigos de motivo: Los reconocimientos ahora admiten códigos de retorno, que proporcionan un motivo para una falla.
  • Suscripciones compartidas: permiten equilibrar la carga entre los clientes, reduciendo así 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 ​​del tema: el nombre de un tema se puede reemplazar con un solo número.

Calidad del servicio

Cada conexión al broker puede especificar una medida de QoS. [25] Estas se clasifican en orden creciente de sobrecarga:

  • Como máximo una vez: el mensaje se envía solo una vez y el cliente y el corredor no realizan pasos adicionales para confirmar la entrega (envían y olvidan).
  • Al menos una vez: el remitente vuelve a intentar enviar el mensaje varias veces hasta recibir confirmación (entrega confirmada).
  • Exactamente una vez: el remitente y el receptor participan en un protocolo de enlace de dos niveles para garantizar que solo se reciba una copia del mensaje (entrega asegurada).

Este campo no afecta el manejo de las transmisiones de datos TCP subyacentes; solo se utiliza entre remitentes y receptores MQTT.

Seguridad

La seguridad del protocolo MQTT se vio comprometida [26] en 2020 por investigadores italianos, que ejecutaron ataques DoS lentos en dicho protocolo (ver CVE-2020-13849).

Agrupamiento

La agrupación en clústeres MQTT es una técnica empleada para garantizar una alta disponibilidad, tolerancia a fallas y escalabilidad en implementaciones MQTT. [27] Como protocolo de mensajería liviano y eficiente, la agrupación en clústeres MQTT permite la creación de una red resistente de nodos intermediarios interconectados, lo que garantiza una entrega de mensajes continua y confiable incluso ante fallas de hardware o interrupciones de la red.

Véase también

Notas

  1. ^ MQ significa "colas de mensajes", como se deriva del nombre del producto IBM MQ .

Referencias

  1. ^ abcde "MQTT versión 5.0". OASIS . 2019-03-07 . Consultado el 2020-12-15 .
  2. ^ Error de cita: La referencia nombrada iec-standardfue invocada pero nunca definida (ver la página de ayuda ).
  3. ^ "ISO/IEC 20922:2016 Tecnología de la información — Transporte de telemetría de colas de mensajes (MQTT) v3.1.1" . Consultado el 27 de octubre de 2024 .
  4. ^ abc "Carta técnica del Comité de transporte de telemetría de colas de mensajes (MQTT) de OASIS". OASIS . Consultado el 15 de diciembre de 2020 .
  5. ^ "Subcomité SN del MQTT". OASIS . Consultado el 15 de diciembre de 2020 .
  6. ^ "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 .
  7. ^ "Transcripción del podcast de IBM" (PDF) . IBM.com . Noviembre de 2011 . Consultado el 7 de enero de 2021 .
  8. ^ "Introducción a MQTT". HiveMQ. 24 de abril de 2020.
  9. ^ Equipo de ab, The HiveMQ. "Presentación del protocolo MQTT - Fundamentos de MQTT: Parte 1". www.hivemq.com . Consultado el 26 de septiembre de 2021 .
  10. ^ "Diferencias entre MQTT v3.1 y MQTT v3.1.1". TC de transporte de telemetría de colas de mensajes (MQTT) de OASIS. 12 de febrero de 2015. Consultado el 19 de agosto de 2021 .
  11. ^ "Especificación del protocolo MQTT V3.1". Eurotech, International Business Machines Corporation (IBM). 2010. Consultado el 15 de diciembre de 2020 .
  12. ^ "Actas del Comité Técnico MQTT de OASIS de la reunión del jueves 25 de abril de 2013, teleconferencia" (PDF) .
  13. ^ "MQTT versión 3.1.1". 2014-10-29 . Consultado el 2020-12-16 .
  14. ^ "6 hechos por los que vale la pena actualizar a la nueva versión MQTT 3.1.1". 2014-10-30 . Consultado el 2020-12-16 .
  15. ^ "Diferencias entre 3.1.1 y 5.0". GitHub .
  16. ^ Stanford-Clark, Andy ; Hong Linh Truong (14 de noviembre de 2013). "Especificación del protocolo MQTT para redes de sensores (MQTT-SN) versión 1.2" (PDF) . oasis-open.org . Comité técnico de transporte de telemetría de colas de mensajes (MQTT) de OASIS. pág. 28 . Consultado el 15 de diciembre de 2020 .
  17. ^ "Introducción a MQTT-SN (MQTT para redes de sensores)". 25 de enero de 2017. Consultado el 16 de septiembre de 2020 .
  18. ^ Yuan, Michael. "Conocer MQTT". IBM Developer . Consultado el 13 de octubre de 2019 .
  19. ^ "Cliente, Broker/Servidor y Establecimiento de Conexión - MQTT Essentials: Parte 3". hivemq.com . 17 de julio de 2019 . Consultado el 13 de octubre de 2019 .
  20. ^ "Mensajes retenidos - Fundamentos de MQTT: Parte 8". hivemq.com . 2 de marzo de 2015 . Consultado el 13 de octubre de 2019 .
  21. ^ "FAQ - Preguntas frecuentes | MQTT" . Consultado el 19 de marzo de 2020 .
  22. ^ "Bujía MQTT/Tahu". www.cirrus-link.com . Consultado el 5 de noviembre de 2019 .
  23. ^ Cope, Stephen (2020). MQTT para principiantes absolutos . pág. 17. ISBN 9798779030762.
  24. ^ "¿Qué es MQTT? Definición y detalles". www.paessler.com . Consultado el 9 de junio de 2020 .
  25. ^ "IBM Knowledge Center - IBM MQ - Uso de MQTT con IBM Integration Bus - Gestión de la calidad de servicio y de la conexión". www.ibm.com . Consultado el 30 de enero de 2018 .
  26. ^ Vaccari, I., Aiello, M. y Cambiaso, E. (2020). SlowITe, un nuevo ataque de denegación de servicio que afecta a MQTT. Sensors, 20(10), 2932.
  27. ^ "Clúster MQTT de alta disponibilidad - Bevywise Networks". www.bevywise.com . Consultado el 22 de diciembre de 2023 .
  28. ^ "API y protocolos". Solace . Consultado el 8 de abril de 2021 .
  29. ^ "Compatibilidad con MQTT 5.0 🎉". Comunidad Solace . 4 de enero de 2021 . Consultado el 8 de abril de 2021 .
  • Sitio web oficial
  • Sitio web oficial del Comité Técnico
  • Especificaciones MQTT
    • Versión 5.0, 7 de marzo de 2019: edición en PDF, edición en 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 Archivado el 4 de diciembre de 2022 en Wayback Machine , Edición HTML
  • Especificaciones del MQTT-SN
    • Versión 1.2, 14/11/2013: Edición en PDF
Retrieved from "https://en.wikipedia.org/w/index.php?title=MQTT&oldid=1257675205"