MQTT - MQTT

MQTT
Mqtt-hor.svg
Logotipo de MQTT
Estado Publicado
Año iniciado 1999
Ultima versión 5.0
7 marzo 2019
Organización OASIS
Comité Comité Técnico de Transporte de Telemetría de Message Queue Server de OASIS
Editores Andrew Banks (IBM), Ed Briggs (Microsoft), Ken Borgendale (IBM), Rahul Gupta (IBM)
Estándares relacionados MQTT-SN
Sitio web mqtt .org

MQTT es un protocolo de red ligero de publicación-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. Está diseñado para conexiones con ubicaciones remotas donde existen restricciones de recursos 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).

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. Se utilizó para monitorear oleoductos dentro del sistema de control industrial 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.

Históricamente, el "MQ" en "MQTT" provenía de la línea de productos IBM MQ (entonces 'MQSeries') MQ, donde significa "Message Queue". Sin embargo, el protocolo proporciona mensajes de publicación y suscripción (sin colas, a pesar del nombre). En la especificación abierta por IBM como versión 3.1, el protocolo se denomina "Transporte de telemetría MQ". 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 Cola de Mensajes de OASIS". Desde 2013, "MQTT" no representa nada.

En 2013, IBM presentó MQTT v3.1 al cuerpo de la especificación OASIS con una carta que aseguraba que solo se aceptarían cambios menores en la especificación. 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. El 7 de marzo de 2019 se lanzó una actualización más sustancial a la versión 5 de MQTT, que agrega varias características nuevas.

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, como Zigbee .

Visió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. 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.

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. 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.

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, 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:

  1. Elimina las conexiones de cliente vulnerables e inseguras
  2. Puede escalar fácilmente de un solo dispositivo a miles
  3. Administra y rastrea todos los estados de conexión del cliente, incluidas las credenciales y certificados de seguridad
  4. Reducción de la tensión de la red sin comprometer la seguridad (red celular o satelital)

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 debido al indicador de retención.

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 características nuevas importantes:

  • Códigos de motivo: los reconocimientos ahora admiten códigos de retorno, que proporcionan una razón para un error.
  • Suscripciones compartidas: permiten que la carga se equilibre entre los clientes y, por lo tanto, reduzca 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).

Este campo no afecta el manejo de las transmisiones de datos TCP subyacentes; sólo se utiliza entre emisores y receptores MQTT.

Aplicaciones

Varios proyectos implementan MQTT, por ejemplo:

Ver también

Referencias

enlaces externos