MQTT es un protocolo de red ligero, de publicación-suscripción , de máquina a máquina para servicios de colas de mensajes . Está diseñado para conexiones con ubicaciones remotas que tienen dispositivos con recursos limitados o ancho de banda de red restringido , como en el Internet de las cosas (IoT). Debe ejecutarse sobre un protocolo de transporte que proporcione conexiones bidireccionales ordenadas y sin pérdidas , normalmente TCP/IP . [ 1 ] Es un estándar abierto de OASIS y una recomendación ISO ( ISO/IEC 20922 ).
Historia
Andy Stanford-Clark ( IBM ) y Arlen Nipper (entonces trabajando para Arcom Control Systems) fueron los autores de la primera versión del protocolo en 1999. [ 5 ] Se utilizó para monitorear oleoductos dentro del sistema de control industrial SCADA . [ 6 ] El objetivo era tener un protocolo que fuera eficiente en ancho de banda, ligero y que consumiera poca energía de la batería, ya que los dispositivos estaban conectados a través de un enlace satelital, que era extremadamente costoso en ese momento. [ 7 ]
Históricamente, las siglas "MQ" en "MQTT" provienen de la línea de productos IBM MQ (entonces "MQSeries"), donde significan "Message Queue" (Cola de mensajes). Sin embargo, el protocolo proporciona mensajería de publicación y suscripción (sin colas, a pesar del nombre). [ 8 ] En la especificación publicada por IBM, como versión 3.1, el protocolo se denominó "MQ Telemetry Transport" (Transporte de telemetría MQ). [ 9 ] [ 10 ] Las versiones posteriores publicadas por OASIS se refieren estrictamente al protocolo como "MQTT", aunque el comité técnico se llama "OASIS Message Queuing Telemetry Transport Technical Committee" (Comité técnico de transporte de telemetría de colas de mensajes de OASIS). [ 3 ] Desde 2013, "MQTT" no significa nada. [ 11 ] [ 8 ]
En 2013, IBM presentó MQTT v3.1 al organismo de especificación OASIS con un estatuto que garantizaba que solo se aceptarían cambios menores a la especificación. [ 3 ] Después de asumir el mantenimiento del estándar de IBM, OASIS lanzó la versión 3.1.1 el 29 de octubre de 2014. [ 12 ] [ 13 ] Una actualización más sustancial a MQTT versión 5, que agregaba varias características nuevas, [ 14 ] fue lanzada el 7 de marzo de 2019. [ 1 ]
Especificaciones derivadas
MQTT-SN (MQTT para redes de sensores) es una variante del protocolo principal destinada a dispositivos integrados alimentados por batería en redes que no utilizan TCP/IP. Se puede utilizar cualquier red que permita el transporte bidireccional [ 15 ] (como UDP y enlaces serie), [ 16 ] aunque Zigbee es el objetivo del diseño original. [ 15 ] La comunicación dentro de una red MQTT-SN, así como con la red MQTT externa, se coordina mediante una "puerta de enlace MQTT-SN". [ 15 ]
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 mensajes de los clientes que los publican y luego los enruta a los clientes de destino correspondientes. [ 17 ] Un cliente MQTT es cualquier dispositivo (desde un microcontrolador hasta un servidor completo) que ejecuta una biblioteca MQTT y se conecta a un intermediario MQTT a través de una red. [ 18 ]
La información se organiza en una jerarquía de temas. Cuando un publicador tiene un nuevo dato para distribuir, envía un mensaje de control con dicho dato al intermediario conectado. El intermediario distribuye la información a todos los clientes suscritos a ese tema. El publicador no necesita tener información sobre el número ni la ubicación de los suscriptores; y, a su vez, los suscriptores no necesitan tener configurado ningún dato sobre los publicadores.
Si un broker recibe un mensaje sobre un tema sin suscriptores, lo descarta a menos que el emisor lo haya designado como mensaje retenido. Un mensaje retenido es un mensaje MQTT normal con la bandera de retención activada. El broker 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 del mensaje retenido lo recibe inmediatamente después de suscribirse. El broker almacena solo un mensaje retenido por tema. [ 19 ] Esto permite que los nuevos suscriptores reciban el valor más reciente en lugar de esperar la siguiente actualización del emisor.
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 intermediario, pero un sistema puede contener varios servidores intermediarios que intercambian datos en función de los temas de sus suscriptores actuales.
Un mensaje de control MQTT mínimo puede contener tan solo dos bytes de datos. Si es necesario, un mensaje de control puede transportar casi 256 megabytes de datos. Existen 14 tipos de mensajes definidos que se utilizan para conectar y desconectar un cliente de un broker, 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 protocolos de transporte como UDP o Bluetooth .
MQTT envía las credenciales de conexión en texto plano y no incluye medidas de seguridad ni 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 predeterminado sin cifrar es 1883. El puerto cifrado es 8883. [ 20 ]
intermediario MQTT
El broker MQTT es un programa que se ejecuta en un ordenador (ya sea localmente o en la nube) y puede ser desarrollado internamente o alojado por un tercero. Está disponible en versiones de código abierto y propietarias.
El intermediario actúa como una oficina de correos. Los clientes MQTT no utilizan la dirección de conexión directa del destinatario, sino la línea de asunto denominada "Tema". Cualquier persona que se suscriba recibe una copia de todos los mensajes de ese tema. Varios clientes pueden suscribirse a un tema desde un único intermediario (relación uno a muchos), y un único cliente puede registrar suscripciones a temas con varios intermediarios (relación 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, al mismo tiempo, recibir información de configuración o comandos de control (MQTT es un protocolo de comunicación bidireccional). Esto facilita el intercambio de datos, la gestión y el control de los dispositivos. Un cliente no puede transmitir los mismos datos a varios temas, sino que debe publicar múltiples mensajes al broker, cada uno con un único tema.
Con la arquitectura de broker MQTT, los dispositivos cliente y la aplicación servidora se desacoplan. De esta forma, los clientes no tienen conocimiento de la información de los demás. MQTT, si está configurado para ello, puede usar cifrado TLS con conexiones protegidas mediante certificado, nombre de usuario y contraseña. Opcionalmente, la conexión puede requerir certificación, en forma de un archivo de certificado que proporciona el cliente y que debe coincidir con la copia del servidor.
En caso de fallo, el software del intermediario y los clientes pueden transferir automáticamente el control a un intermediario de respaldo redundante/automático. Los intermediarios de respaldo también pueden configurarse para distribuir la carga de los clientes entre varios servidores locales, en la nube o una combinación de ambos.
El broker puede admitir tanto MQTT estándar como MQTT para especificaciones compatibles como Sparkplug. [ 21 ] 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 denominada "sesiones persistentes". En este estado, un intermediario almacenará tanto la información de conexión de cada cliente como los temas a los que cada cliente se ha suscrito y cualquier mensaje para un tema con una QoS de 1 o 2. [ 22 ]
Las principales ventajas de un broker MQTT son:
- Eliminación de conexiones de clientes vulnerables e inseguras (cuando estén configuradas adecuadamente).
- Capacidad para escalar fácilmente desde un solo dispositivo hasta miles.
- Gestión y seguimiento del estado de las conexiones de los clientes, incluidas las credenciales de seguridad y los certificados (cuando estén configurados correctamente).
- Reducción de la carga en las redes celulares o satelitales sin comprometer la seguridad (cuando están configuradas adecuadamente).
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 termine cualquier tarea que deba realizar y a que se desconecte la sesión TCP/IP .
Publicar
Tras pasar la solicitud al cliente MQTT, la aplicación regresa inmediatamente al hilo principal de la aplicación.
Versión 5.0
En 2019, OASIS publicó el estándar oficial MQTT 5.0. [ 1 ] La versión 5.0 incluye las siguientes características nuevas principales: [ 23 ]
- Códigos de motivo: Ahora, las confirmaciones admiten códigos de retorno, que proporcionan el motivo de un fallo.
- Suscripciones compartidas: Permiten equilibrar la carga entre los clientes, reduciendo así el riesgo de problemas de carga.
- Caducidad de los mensajes: Los mensajes pueden incluir una fecha de caducidad y se eliminan si no se entregan dentro de ese plazo.
- Alias del tema: El nombre de un tema puede sustituirse por un solo número.
Calidad del servicio
Cada conexión al intermediario puede especificar una medida de QoS. [ 24 ] Estas se clasifican en orden creciente de sobrecarga:
- Como máximo una vez, el mensaje se envía solo una vez y ni el cliente ni el intermediario toman medidas adicionales para confirmar la entrega (enviar y olvidar).
- Al menos una vez: el remitente intenta enviar el mensaje varias veces hasta que recibe una confirmación de entrega.
- Exactamente una vez: el remitente y el receptor realizan un intercambio de mensajes en dos etapas para garantizar que solo se reciba una copia del mensaje (entrega garantizada).
Este campo no afecta al manejo de las transmisiones de datos TCP subyacentes; solo se utiliza entre emisores y receptores MQTT.
Seguridad
La versión 3.1.1 del protocolo MQTT requiere que el servidor (broker) utilice un tiempo de espera equivalente a una vez y media el valor de keepalive especificado por el cliente. Esto (y funcionalidades similares de keepalive en otros protocolos como HTTP) permite un ataque DoS lento, publicado en 2020 y denominado SlowITe, en el que el atacante intenta abrir y mantener tantas conexiones como sea posible, privando a los usuarios legítimos de sus conexiones. [ 25 ] [ 26 ] Nuevas variantes del ataque y nuevos métodos de detección/mitigación son temas de investigación actual.
Agrupamiento
La agrupación de MQTT es una técnica empleada para garantizar alta disponibilidad, tolerancia a fallos y escalabilidad en implementaciones de MQTT. [ 27 ] Como protocolo de mensajería eficiente y ligero, la agrupación de MQTT permite la creación de una red resiliente de nodos intermediarios interconectados, lo que garantiza la entrega continua y confiable de mensajes incluso ante fallos de hardware o interrupciones de la red.
Limitaciones
Ordenación de mensajes
MQTT no garantiza que los mensajes publicados por clientes independientes lleguen a los suscriptores en el orden en que fueron generados. La especificación OASIS MQTT solo proporciona garantías de orden dentro de una única sesión de cliente en un único tema; los eventos originados por clientes separados o generados a través de conexiones independientes pueden entregarse fuera de secuencia. [ 28 ]
Esta limitación es particularmente importante en implementaciones de IoT que utilizan eventos del ciclo de vida de MQTT (notificaciones de conexión y desconexión) para rastrear el estado de conectividad del dispositivo. Las principales implementaciones de brokers lo reconocen directamente: Amazon Web Services afirma en su documentación para desarrolladores de AWS IoT Core que "los mensajes del ciclo de vida podrían enviarse fuera de orden" y que los suscriptores "podrían recibir mensajes duplicados". [ 29 ] De manera similar, la documentación de ingeniería de HiveMQ señala que "el orden estricto entre los clientes de publicación requiere estrategias adicionales como enrutamiento dedicado y números de secuencia". [ 30 ]
La consecuencia práctica es que una notificación de desconexión generada antes de una notificación de reconexión puede llegar a la aplicación suscriptora después de esta, lo que provoca que los sistemas de monitorización que aplican una política de última escritura gana registren un dispositivo como desconectado cuando ya se ha reconectado. Este es un modo de fallo conocido en las arquitecturas basadas en eventos y fue caracterizado en la literatura sobre sistemas distribuidos como una propiedad inherente del paso de mensajes asíncrono por Leslie Lamport en 1978. [ 31 ] Los benchmarks independientes han documentado el coste operativo de las inversiones en el orden de los eventos en las implementaciones de IoT en producción. [ 32 ]
Las medidas de mitigación comúnmente aplicadas incluyen ventanas de retardo (que retrasan la acción ante eventos de desconexión durante un intervalo fijo para permitir el procesamiento de mensajes que llegan tarde), patrones de sondeo o re-consulta y numeración de secuencia en la capa de aplicación. Cada medida de mitigación presenta desventajas: las ventanas de retardo introducen latencia de detección para eventos de desconexión genuinos y pueden suprimir notificaciones legítimas; el sondeo añade sobrecarga de red y no es adecuado para sensores pasivos. [ 33 ]
Véase también
Notas
Referencias
- 1 2 3 4 5 "MQTT Versión 5.0" . OASIS . 2019-03-07 . Recuperado el 2020-12-15 .
- ↑ "ISO/IEC 20922:2016 Tecnología de la información — Transporte de telemetría de cola de mensajes (MQTT) v3.1.1" . Consultado el 27 de octubre de 2024 .
- 1 2 3 "Estatuto 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é MQTT SN" . OASIS . Consultado el 15 de diciembre de 2020 .
- ↑ "Fiesta del décimo cumpleaños" . MQTT.org . Julio de 2009. Archivado del 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 .
- ↑ "Primeros pasos con MQTT" . HiveMQ. 24 de abril de 2020.
- 1 2 Equipo, The HiveMQ. "Introducción al protocolo MQTT: Fundamentos de MQTT: Parte 1" . HiveMQ . Consultado el 26 de septiembre de 2021 .
- ↑ "Diferencias entre MQTT v3.1 y MQTT v3.1.1" . OASIS Message Queuing Telemetry Transport (MQTT) TC. 12 de febrero de 2015. Consultado el 19 de agosto de 2021 .
- ↑ "Especificación del protocolo MQTT V3.1" . Eurotech, International Business Machines Corporation (IBM). 2010. Consultado el 15 de diciembre de 2020 .
- ↑ "Actas del Comité Técnico de OASIS MQTT de la reunión del jueves 25 de abril de 2013 (teleconferencia)" (PDF) .
- ↑ "MQTT Versión 3.1.1" . 29-10-2014 . Consultado el 16-12-2020 .
- ↑ "6 razones por las que vale la pena actualizar a la nueva versión MQTT 3.1.1" . 30 de octubre de 2014. Consultado el 16 de diciembre de 2020 .
- ↑ "Diferencias entre 3.1.1 y 5.0" . GitHub .
- 1 2 3 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 . Comité técnico de transporte de telemetría de cola de mensajes (MQTT) de OASIS. pág. 28. Recuperado el 15 de diciembre de 2020 .
- ↑ "Introducción a MQTT-SN (MQTT para redes de sensores)" . 25 de enero de 2017. Consultado el 16 de septiembre de 2020 .
- ↑ Yuan, Michael. "Conociendo MQTT" . IBM Developer . Consultado el 13 de octubre de 2019 .
- ↑ "Cliente, intermediario/servidor y establecimiento de conexión: conceptos básicos de MQTT: parte 3" . HiveMQ . 17 de julio de 2019. Consultado el 13 de octubre de 2019 .
- ↑ "Mensajes retenidos – Fundamentos de MQTT: Parte 8" . HiveMQ . 2 de marzo de 2015. Consultado el 13 de octubre de 2019 .
- ↑ "FAQ – Preguntas frecuentes" . MQTT.org . Consultado el 19 de marzo de 2020 .
- ^ "Bujía MQTT/Tahu" . www.cirrus-link.com . Consultado el 5 de noviembre de 2019 .
- ^ Hacer frente, Stephen (2020). MQTT para principiantes completos . Wydawca nieznany. pag. 17.ISBN 9798779030762.
- ↑ "¿Qué es MQTT? Definición y detalles" . www.paessler.com . Consultado el 9 de junio de 2020 .
- ↑ "Centro de conocimiento de IBM - IBM MQ - Uso de MQTT con IBM Integration Bus - Gestión de la calidad del servicio y la conexión" . www.ibm.com . Consultado el 30 de enero de 2018 .
- ↑ Vaccari, I., Aiello, M., Cambiaso, E. (2020). SlowITe, un nuevo ataque de denegación de servicio que afecta a MQTT. Sensors, 20(10), 2932. doi : 10.3390/s20102932 .
- ↑ CVE-2020-13849 .
- ↑ "Clúster MQTT de alta disponibilidad - Bevywise Networks" . www.bevywise.com . Consultado el 22 de diciembre de 2023 .
- ↑ "MQTT Versión 5.0 – Sección 4.6: Ordenación de mensajes" . OASIS. 2019-03-07 . Recuperado el 2026-04-06 .
- ↑ "AWS IoT Core – Eventos del ciclo de vida" . Amazon Web Services . Consultado el 6 de abril de 2026 .
- ↑ "Entendiendo el orden de los mensajes MQTT" . HiveMQ . Consultado el 6 de abril de 2026 .
- ↑ Lamport, Leslie (julio de 1978). "Tiempo, relojes y ordenamiento de eventos en un sistema distribuido". Communications of the ACM . 21 (7): 558– 565. doi : 10.1145/359545.359563 .
- ↑ "Conjunto de datos de resolución de estado de dispositivos de múltiples señales (1,3 millones de eventos)" . Zenodo. 2025. Consultado el 6 de abril de 2026 .
- ↑ "Entendiendo el orden de los mensajes MQTT" . HiveMQ . Consultado el 6 de abril de 2026 .
- ↑ "API y protocolos" . Solace . Consultado el 8 de abril de 2021 .
- ↑ "Soporte para MQTT 5.0 🎉" . Comunidad Solace . 4 de enero de 2021. Consultado el 8 de abril de 2021 .
Enlaces externos
- protocolos de la capa de aplicación
- Transmisión de datos
- Middleware orientado a mensajes
- protocolos de red
- Telemetría