Developing MQTT Client Tutorial

Introducción

En el panorama en rápida evolución de Internet de las Cosas (IoT), el desarrollo de un MQTT eficiente y fiable clientes es esencial para permitir una comunicación perfecta entre dispositivos IoT. Los clientes de MQTT sirven como interfaz para Conexión a un corredor MQTT, permitiendo la transmisión y recepción de mensajes. Esta guía explica cómo desarrollar clientes MQTT de acuerdo con la norma OEAIS para el protocolo MQTT.

Basics of MQTT

Antes de entrar en el proceso de desarrollo de clientes de MQTT, vamos a saber sobre elbásicos del MQTT.

MQTT (Message Queuing Telemetry Transport) es un protocolo ligero que opera en la subscripción publica modelo. Gestiona la conexión entre el corredor y el cliente, permitiendo una comunicación fluida. Desde el protocolo A continuación el modelo public-subscribe, permite a los dispositivos enviar y recibir mensajes. Esta característica hace MQTT es una opción ideal para la comunicación M2M (máquina a máquina) y el Internet de las cosas (IoT), donde una pequeña huella de código es esencial y conservar el ancho de banda de red es crucial.

Para saber más sobre MQTT y las características clave de MQTT, lea los artículos siguientes:

MQTT preconstruido Clientes

En cualquier sistema IoT, los dispositivos necesitan una manera de comunicarse entre sí y con servidores, y aquí es donde Los clientes de MQTT vienen. Un cliente MQTT es simplemente software que permite que un dispositivo se conecte a unMQTT broker. El corredor actúa como un controlador de tráfico, dirigiendo datos (mensajes) de un dispositivo a otro. Como un controlador de tráfico garantiza flujo de tráfico liso, el corredor asegura que los mensajes se entregan al abonados sin congestión. Sin un cliente MQTT, los dispositivos no serían capaces de publicar o suscribirse para recibir actualizaciones, haciendo imposible la comunicación en tiempo real.

Para simplificar este proceso, proporcionamos documentación completa para conectar varios clientes de MQTT a un corredor de MQTT anfitriones en la nube. En estos documentos, discutimos cómo integrar diferentes clientes de MQTT con nuestrosInterventor de MQTT con sede en la nube. Cada guía ofrece instrucciones detalladas y percepciones adaptadas para conocer una variedad de necesidades de proyecto, ya sea para sistemas integrados, dispositivos móviles o plataformas de nube. Con paso a paso guía, podrás concentrarte en construir tu la aplicación asegurando la comunicación perfecta con nuestro corredor.

Aquí está una lista de nuestras documentación para ayudarle a conectar varios clientes de MQTT a cualquier corredor de MQTT :

  • Python- Para desarrollar aplicaciones MQTT de forma rápida y eficiente con Python
  • Java- Para la construcción de aplicaciones MQTT de nivel empresarial en plataformas Java
  • Paho C- Para conectar dispositivos de baja potencia o embebidos usando C
  • ESP32- Para integrar MQTT con dispositivos IoT basados en microcontroladores
  • Dotnet- Para crear aplicaciones MQTT escalables y seguras dentro de la . Marco NET
  • Javascript- Para implementar la comunicación MQTT en aplicaciones web
  • Node JS- Para desarrollar aplicaciones MQTT en tiempo real usando Node JS
  • Android- Para construir aplicaciones basadas en MQTT en dispositivos Android
  • iOS- Para desarrollar aplicaciones habilitadas para MQTT dentro del ecosistema de Apple

Mediante la utilización de estas guías, puede simplificar su proceso de desarrollo y minimizar el tiempo de integración. Esto le permite centrarse en la construcción características innovadoras y mejorar la funcionalidad de sus aplicaciones.

¿Cómo debe ser un cliente MQTT?

El uso principal del cliente MQTT es facilitar una conexión con el broker MQTT para suscribirse a temas para publicar y recibir mensajes. Aquí están algunos de los características específicas que cada cliente MQTT debe poseer :

  • El cliente MQTT debe permitir a los usuarios ajustar fácilmente los ajustes, apoyar la autenticación del cliente, y permitir el configuración de certificados y diferentes opciones para conectar, publicar y suscribir.
  • Debe proporcionar una interfaz de usuario suave que mejora la interacción con todas las funciones disponibles.
  • Debe ser compatible con múltiples sistemas operativos.
  • El cliente debe permitir que los usuarios envíen mensajes de forma rápida y sencilla a otros dispositivos o servicios.
  • El cliente debe ofrecer diferentes opciones para la entrega de mensajes, permitiendo a los usuarios elegir lo confiable Quieren que el mensaje sea enviado.

Más información explorando el contenido a continuación.

Lo hemos organizado en tres secciones principales: MQTT Data Representation,MQTT Paquete de control Forma, y MQTT Control Packets.

1. MQTT Representación de datos

MQTT es un protocolo binario. Los elementos de control no son cadenas de texto, mientras que bytes binarios. Todo el mundo Los comandos MQTT tienen un reconocimiento relacionado.

1.1 Bits

Explica bits. Estos Bits en un byte están marcados de 7 a 0. Número de bits 0 al menos bit significativo y Bit número 7 es el bit más significativo.

1.2 Dos Byte Integer

MQTT define los dos valores de datos Byte Integer. i.e, El byte de orden superior (MSB-Most Bit significativo) es seguido por el byte de orden inferior (LSB-Least Significant Bit).

El byte de orden superior (MSB-Most Significant Bit) es seguido por el siguiente superior-orden byte (MSB-Most Significant Bit), seguido por el siguiente byte de mayor orden (MSB-Most Significant Byte), seguido by the lower-order byte (LSB-Least Significant Bit).

1.3 Cuatro Byte Integer

MQTT describe los enteros sin firmar de 32 bits en orden grande son los dos Byte Integer valores de datos. i.e, El byte de orden superior (MSB-Most Significant Bit) es seguido por el siguiente orden superior byte (MSB-Most Significant Bit), seguido por el siguiente byte de mayor orden (MSB-Most Significant Byte), seguido por el byte de orden inferior (LSB-Least Significant Bit).

1.4 UTF-8 Estructura de cuerda codificada

UTF-8 es el método de cifrado para Unicode. Puede traducir cualquier Unicode carácter a un única cadena binaria que puede ser igualada y puede traducir la cadena binaria de nuevo a caracteres Unicode. El UTF-8 encoded string maximum size is 65,535 bytes and also it ranges from 0 to 65,535 bytes. El texto campos en los paquetes de control MQTT descritos más adelante se encriptan como cadenas UTF-8. En concreto, el carácter datos no debe incluir el cifrado de puntos de código entre U+D800 y U+DFFF, y el carácter nulo encriptación de puntos de código es U+0000. Si el cliente o servidor recibe un paquete de control MQTT que contiene incorrectamente generado UTF-8, entonces se considera un paquete falso. Esta guía de desarrollo del cliente MQTT da la clara vista de la UTF-8 codificado estructura de cuerdas.

  • U+0001..U+001 Personajes de control F
  • U+007F.U+009 Personajes de control F
  • Los puntos de código definidos en la especificación Unicode no son caracteres (por ejemplo U+0FFFF)
Bit 7 6 5 4 3 2 1 0
byte 1 Longitud de cuerda MSB
byte 2 Longitud de la cuerda LSB
byte 3... UTF-8 datos de caracteres codificados, si la longitud 0.
Bit 7 6 5 4 3 2 1 0
byte 1 Longitud de la cuerda MSB (0x00)
0 0 0 0 0 0 0 0 0
byte 2 Longitud de la cuerda LSB (0x05)
0 0 0 0 0 0 1 0 1
byte 3 “A” (0x41)
0 1 0 0 0 0 0 0 1
byte 4 (0xF0)
0 1 1 1 1 0 0 0 0
byte 5 (0xAA)
1 0 0 1 1 0 0 1 1
byte 7 (0x94)
1 0 0 1 0 1 0 0 0
1,5 Variable Byte Tamaño entero

Utiliza un solo valor byte hasta 127. Usando el esquema de codificación la variable byte integer codificado se explica claramente en esta guía de desarrollo del cliente MQTT. En LSB, los 7 bits de cada byte codificados los datos y MSB se utiliza para especificar si los bytes en la representación son los siguientes. Así, cada byte codifica 128 valores y es un “ bit de continuidad”. En el campo Variable Byte Integer, el número máximo de bytes es de cuatro. Uso el número mínimo de bytes requerido para denotar el valor codificado.

Digits Desde A
1 0 (0x00) 127 (0x7F)
2 128 (0x80, 0x01) 16.383 (0xFF, 0x7F)
3 16.384 (0x80, 0x80, 0x01) 2,097,151 (0xFF, 0xFF, 0x7F)
4 2,097,152 (0x80, 0x80, 0x80, 0x01) 268,435,455 (0xFF, 0xFF, 0xFF, 0x7F)

1.6 Datos binarios

Los datos binarios se denotan por la longitud total de dos bytes, que se refiere a los Número de bytes de datos, seguido de ese número de bytes. Así, la longitud de los datos binarios se extiende de 0 a 65.535 bytes.

2.MQTT Formato de paquete de control

2.1 Estructura del paquete

El protocolo MQTT funciona intercambiando paquetes de control MQTT consecutivos de una manera definida. Esta sección describe el formato de estos paquetes. Una estructura de paquetes de control MQTT consta de tres partes, que son se muestra en la tabla siguiente.

Estructura del paquete de control MQTT

Cabeza fija, presente en todos los paquetes de control MQTT Cabeza variable, presente en algunos paquetes de control de MQTT Carga de pago, presente en algunos paquetes de control de MQTT
packet Structure

2.1.1 Cabecera fija

La tabla siguiente consiste en el encabezado fijo que podría contenerse en cada MQTT paquete de control.

Formato de encabezado fijo

Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT Banderas específicas para cada tipo de paquete de control MQTT
byte 2... Duración restante

2.1.2 MQTT Tipo de paquete de control

Los bits [7-4] de byte 1 en el encabezado fijo contienen el paquete de control tipos. En MQTT los tipos de paquetes de control están representados como un valor sin asignar de 4 bits, estos valores se muestran en el siguiente mesa.

Tipos de paquete de control MQTT

Nombre Valor Dirección del flujo Descripción
Reservado 0 Forbidden Reservado
CONNECT 1 Cliente a Servidor Solicitud de conexión
CONNACK 2 Servidor al Cliente Reconocimiento de conexión
PUBLISH 3 Cliente a Servidor o Servidor al Cliente Publicar mensaje
PUBLISH 3 Cliente a Servidor o Servidor al Cliente Publicar mensaje
PUBACK 4 Cliente a Servidor o Servidor al Cliente Publish acknowledgement (QoS 1)
PUBREC 5 Cliente a Servidor o Servidor al Cliente Publish received (QoS 2 delivery part 1)
PUBREL 5 Cliente a Servidor o Servidor al Cliente Publish release (QoS 2 delivery part 2)
PUBCOMP 7 Cliente a Servidor o Servidor al Cliente Publish complete (QoS 2 parte de entrega 3)
SUBSCRIBE 8 Cliente a Servidor Solicitud de suscripción
SUBACK 9 Cliente a Servidor Reconocimiento suscrito
UNSUBSCRIBE 10 Cliente a Servidor Solicitud de subscripción
UNSUBACK 11 Servidor al Cliente Unsubscribe acknowledgement
PINGREQ 12 Cliente a Servidor Solicitud de alimentación
PINGRESP 13 Servidor al Cliente PING response
DISCONNECT 14 Cliente a Servidor o Servidor al Cliente Notificación de desconexión
AUTH 14 Cliente a Servidor o Servidor al Cliente Intercambio de autenticación

2.1.3 Banderas

Los bits [3-0] de byte 1 es el encabezado fijo que contiene banderas específicas para cada uno Paquete de control MQTT como se muestra a continuación. Si un bit de bandera está marcado como “Reservado” debe ser reservado futuro utilizar y establecer el valor listado. Si se reciben banderas inválidas, entonces se considera un paquete falso.

MQTT Paquete de control Banderas de cabecera fijas Bit 3 Bit 2 Bit 1 Bit 0
CONNECT Reservado 0 0 0 0
CONNACK Reservado 0 0 0 0
PUBLISH Utilizado en MQTT v5.0 DUP QoS RETAIN
PUBACK Reservado 0 0 0 0
PUBREC Reservado 0 0 0 0
PUBREL Reservado 0 0 1 0
PUBCOMP Reservado 0 0 0 0
SUBSCRIBE Reservado 0 0 1 0
SUBACK Reservado 0 0 0 0
UNSUBSCRIBE Reservado 0 0 1 0
UNSUBACK Reservado 0 0 0 0
PINGREQ Reservado 0 0 0 0
PINGRESP Reservado 0 0 0 0
DISCONNECT Reservado 0 0 0 0
AUTH Reservado 0 0 0 0

2.1.4 Duración restante

La posición comienza a byte 2. La longitud restante es un byte variable entero claramente explicado aquí, que se refiere al número de bytes que quedan en el paquete de control actual, incluyendo datos en el encabezado variable y la carga útil. No se utilizan bytes para codificar la longitud restante. Número total de bytes en un paquete de control MQTT es el tamaño del paquete, que es igual a la longitud del encabezado fijo y el longitud restante.

2.2 Cabecera variable

Algunos paquetes de control MQTT tienen un componente de encabezado variable. Esto es entre el Fijado Header y Payload. El contenido del encabezado variable variará dependiendo del tipo de paquete. El campo identificador de paquetes de la cabecera variable es común a muchos tipos de paquetes.

2.2.1 Identificador de paquetes

Los campos identificadores de paquetes de dos bytes están incluidos en el encabezado variable componente de muchos paquetes de control MQTT. Estos paquetes de control MQTT son PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK. Paquetes de control MQTT que contienen un identificador de paquetes que se muestra en el debajo de la tabla.

MQTT Paquete de control Campo de identificación de paquetes
CONNECT NO
CONNACK NO
PUBLISH Sí (si QoS > 0)
PUBACK Sí.
PUBREC Sí.
PUBREL Sí.
PUBCOMP Sí.
SUBSCRIBE Sí.
SUBACK Sí.
UNSUBSCRIBE Sí.
UNSUBACK Sí.
PINGREQ NO
PINGRESP NO
DISCONNECT NO
AUTH NO

Un paquete de publicación no debe tener un identificador de paquetes si se establece su valor QOS a 0. Cada uno tiempo que un cliente envía un nuevo paquete de control SUBSCRIBE, UNSUBSCRIBE o PUBLISH MQTT (QoS confía0), debe asignar el identificador de paquete cero no utilizado actualmente. Cada vez que un servidor envía un nuevo paquete de control PUBLISH MQTT con (QoS confía0), debe asignarlo un identificador de paquete cero actualmente no utilizado.

El identificador de paquetes está disponible para reutilizar después de que el remitente active el paquete de aprobación correspondiente definido como sigue. En el caso de QoS1 PUBLISH, es el correspondiente PUBACK; para versiones QoS2, es PUBCOMP o PUBREC con un código de razón de 128 o más. Este es el SUBACK or UNSUBACK related to SUBSCRIBE and UNSUBSCRIBE. Un paquete PUBACK, PUBREL o PUBCOMP debe tener el mismo paquete identificador como el paquete original PUBLISH. Un SUBACK y UNSUBACK deben tener un identificador de paquetes usado en el SUBSCRIBE correspondiente y UNSUBSCRIBE.


Cliente Servidor
PUBLISH Identificador del paquete=0x1234 —
■ Packet Identifier=0x1234
PUBACK Identificador del paquete=0x1234 —
▪-PUBACK Packet Identifier=0x1234

Los identificadores de paquetes utilizados con el PUBLISH, SUBSCRIBE, y UNSUBSCRIBE paquetes generar identificadores separados e integrados para el cliente y servidor claramente en una sesión. At any tiempo, un identificador de paquetes no se puede utilizar por más de un comando. El cliente y el servidor asignan paquetes identificadores entre sí independientemente. Como resultado, los pares cliente-servidor pueden participar en simultáneo mensajería usando los mismos identificadores de paquetes.

2.2.2 Propiedades

El conjunto de propiedades es el último campo en el encabezado variable del control MQTT paquetes como CONNECT, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, Desconectado, y bueno. En el paquete CONNECT, hay un campo de propiedades de Will con la carga útil, que es considerado como un conjunto opcional de propiedades. El conjunto de propiedades se compone de una longitud de propiedad, seguido por propiedades.

2.2.2.1 Propiedades

La variable de longitud de propiedad está codificada como un entero de byte. La propiedad longitud no contener los bytes usados para encriptarse, pero también la longitud del atributo. Si no hay propiedades debe ser denotado agregando la longitud de la propiedad de cero.

2.2.2.2 Propiedad

Propiedad tiene un identificador que define su uso y tipo de datos seguido por un valor. El El identificador está codificado como un byte variable. Un paquete falso es cuando un paquete de control tiene un invalido Identificador para su tipo de paquete o no tiene el valor de un tipo de datos específico. Si se obtiene, utilice un CONNACK o Paquete DISCONNECT con el código Reason (0X81) descrito como un paquete inválido. No hay importancia en el orden de propiedades con diferentes identificadores.

Propiedades :

Identifier Nombre (utilización) Tipo Paquete / Propiedades de voluntad
Dec Hex
1 0x01 Indicador de formato de carga Byte PUBLISH, Will Properties
2 0x02 Intervalo de viaje Cuatro Byte Integer PUBLISH, Will Properties
3 0x03 Tipo de contenido UTF-8 Encoded String PUBLISH, Will Properties
8 0x08 Tema de respuesta UTF-8 Encoded String PUBLISH, Will Properties
9 0x09 Datos de correlación UTF-8 Encoded String PUBLISH, Will Properties
6 0x03 Tipo de contenido Datos binarios PUBLISH, Will Properties
11 0x0B Identificador de suscripción Variable Byte Integer PUBLISH, SUBSCRIBE
17 0x11 Intervalo de gastos de período de sesiones Cuatro Byte Integer CONNECT, CONNACK, DISCONNECT
18 0x12 Identificador de cliente asignado UTF-8 Encoded String CONNACK
19 0x13 Tipo de contenido Dos Byte Integer CONNACK
21 0x15 Método de autenticación UTF-8 Encoded String CONNECT, CONNACK, AUTH
22 0x16 Datos de autenticación Datos binarios CONNECT, CONNACK, AUTH
23 0x17 Solicitar información sobre problemas BYTE CONNECT
24 0x18 Will Delay Interval Cuatro Byte Integer Propiedades de Will
25 0x19 Solicitud de información sobre la respuesta BYTE CONNECT
26 0x1A Información sobre la respuesta UTF-8 Encoded String CONNACK
27 0x1C Referencia del servidor UTF-8 Encoded String CONNACK, DISCONNECT
31 0x1F Reason String UTF-8 Encoded String CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBACK, UNSUBACK, DISCONNECT, AUTHs
33 0x21 Recibir el máximo Dos Byte Integer CONNECT, CONNACK
34 0x22 Tema Alias Máximo Dos Byte Integer CONNECT, CONNACK
35 0x23 Tema Alias Dos Byte Integer PUBLISH
38 0x26 Propiedad de usuario UTF-8 String Pair CONNECT, CONNACK, PUBLISH, Will Properties, PUBACK, PUBREC, PUBREL, PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, DISCONNECT, AUTH
39 0x27 Tamaño máximo del paquete Cuatro Byte Integer CONNECT, CONNACK
40 0x28 Subscripción de Wildcard Disponible BYTE CONNACK
41 0x29 Identificador de suscripción Disponible BYTE CONNACK
42 x2A Suscripción compartida Disponible BYTE CONNACK

2.3 Carga

La carga útil es la parte final del paquete en algunos de los controles MQTT paquetes. En el Paquete PUBLISH, la carga útil es el mensaje de aplicación. Paquetes de control MQTT que requieren una carga útil.

MQTT Paquete de control Carga
CONNECT Necesario
CONNACK Ninguno
PUBLISH opciones
PUBACK Ninguno
PUBREC Ninguno
PUBREL Ninguno
PUBCOMP Ninguno
SUBSCRIBE Requisitos
SUBACK Requisitos
UNSUBSCRIBE Requisitos
UNSUBACK Requisitos
PINGREQ Ninguno
PINGRESP Ninguno
DISCONNECT Ninguno
AUTH Ninguno

2.4 Códigos de Razón

Una razón El código es un valor sin firmar de un byte. El código de la razón indica el resultado of an operación. Los códigos de la razón menos de 0x80 especifican la terminación exitosa de una operación. La normalidad razón código para el éxito es 0. Los códigos de la razón superiores a 0x80 especifica el fracaso. Algunos de los controles MQTT Los paquetes tienen a single Reason Code as part of the Variable Header such as CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, Desconectado, y bueno. Los dos paquetes de control MQTT contienen una lista de uno o más Códigos de Razón en los Carga. que son SUBACK y UNSUBACK.

Decimal HEX Nombre Packets
0 0x00 Éxito CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK, AUTH
3. Paquetes de control MQTT

Hay 15 paquetes de control MQTT enMQTTv5

1. CONNECT – Establecimiento de conexión entre un cliente MQTT y un rotor

2. CONNACK – El reconocimiento de solicitud de conexión

3. PUBLISH – Publicar mensaje

4. PUBACK – Publish acknowledgement

5. PUBREC – Publish received(QoS 2 publish received)

6. PUBREL – Publish release(QoS 2 publish received)

7. PUBCOMP – Completar

8. SUBSCRIBE – Suscribirse a temas

9. SUBACK – Reconocimiento de Suscríbete

10. UNSUBSCRIBE – Dessubscribete de un tema

11. UNSUBACK – Unsubscribe acknowledgement

12. PINGREQ – Solicitud de PING

13. PINGRESP - Respuesta de PING

14. DISCONECTO – Desconexión entre el Cliente MQTT y el Broker

15. AUTH – Intercambio de autenticación

3.1 CONNECT

Después de que un cliente haya establecido una conexión de red con un servidor, el primero paquete enviado desde el cliente al servidor debe ser un paquete de conexión. Un cliente puede enviar el paquete CONNECT sólo una vez a través de una conexión de red.

3.1.1 Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (1) Reservado
0 0 0 1 0 0 0 0
byte 2... Duración restante

Duración restante – Esta es la longitud del encabezado variable y la longitud de la carga útil. Está codificado como un byte Integer variable.

3.1.2 CONNECTO Cabecera variable

El encabezado variable para el paquete de conexión contiene los siguientes campos: Protocolo Nombre, Nivel de Protocolo, Conectar Banderas, Mantener Alive y Propiedades.

3.1.2.1 Protocolo Nombre

Descripción 7 6 5 4 3 2 1 0
Nombre del Protocolo
byte 1 Longitud MSB (0) 0 0 0 0 0 0 0 0
byte 2 Longitud LSB (4) 0 0 0 0 0 1 0 0
byte 3 ‘M’ 0 1 0 0 1 1 0 1
byte 4 ‘Q’ 0 1 0 1 0 0 0 1
byte 5 ‘T’ 0 1 0 1 0 1 0 0
byte 6 ‘T’ 0 1 0 1 0 1 0 0

Un servidor que admite múltiples protocolos utiliza el nombre del protocolo para determinar si los datos son MQTT. El nombre del Protocolo debe ser la cuerda codificada UTF-8 que representa “MQTT”.

3.1.2.2 Versión del Protocolo
Descripción 7 6 5 4 3 2 1 0
Nivel de Protocolo
byte 7Versión 5)0 0 0 0 0 1 0

Un servidor que soporta múltiples versiones delMQTT protocoloutiliza el protocolo versión para determinar qué versión es utilizada por el cliente MQTT.

3.1.2.3 Conectar banderas

Connect Flags especifica la presencia o ausencia de los campos en la carga útil.

Bit 7 6 5 4 3 2 1 0
Nombre del usuario Bandera Password Flag Will Retain Will QoS Will Flag Inicio limpio Reservado
byte 8 X X X X X X X 0
3.1.2.4 Inicio limpio

Un comienzo limpio está en la parte 1 del byte Connect Flags. Si un paquete de conexión con limpieza start is set to 1, the client and server must reject any existing session and start a new session.

3.1.2.5 Bandera de Will Flag

La bandera de Will está en la parte 2 de las banderas de conexión. Si la Bandera de la Voluntad se fija en 1, ella indicaciones queMensajedebe almacenarse en el servidor y el núcleo correlacionado con la sesión. La voluntad Mensaje contiene las propiedades de Will, Tema, y cargará campos en la carga de pago CONNECT. La voluntad Mensaje se publica en algunas situaciones, que se muestra a continuación,

  • Servidores detectados Error o fallo de red.
  • El cliente no se comunicaba mientras seguía vivo.
  • El cliente cierra la conexión de red sin enviar un paquete desconectado primero con una razón Código 0x00 (desconexión predeterminada).
  • El servidor cierra la conexión de red sin recibir un paquete desconectado con Código de Razón 0x00 (desconexión predeterminada).
3.1.2.6 Will QoS

Will QoS está en los bits 4 y 3 de las banderas de conexión. Cuando el mensaje de voluntad es publicado, entonces se utilizan los dos bits que especifican el nivel QoS. Si la Bandera de la Voluntad se establece a 1, entonces el valor de el QoS tal vez 0 (0x00), 1 (0x01), o 2 (0x02).

3.1.2.7 Will Retain

Will Retain está en la parte 5 de las banderas de conexión. Si la Bandera de la Voluntad se establece a 1 y el Will Retain se establece en 1, el servidor publicará el mensaje de Will como unRetenido mensaje.

3.1.2.8 Nombre del usuario Bandera

Nombre de usuario Bandera está en el bit 7 de las Banderas de conexión. Un nombre de usuario debe estar en carga útil cuando la bandera de nombre de usuario se establece a 1.

3.1.2.9 Password Flag

Password Flag está en la parte 6 de las Banderas Connect. La contraseña debe estar en carga útil cuando la Bandera de Contraseña se establece a 1.

3.1.2.10 Mantener Alive
Bit 7 6 5 4 3 2 1 0
byte 9 Mantener MSB activo
byte 10 Mantener LSB activo

El cliente MQTT debe enviar los paquetes de control dentro de la Mantén Alive definida valor. El Sigue. Valor activo depende de la duración de la transacción del paquete de control del cliente

3.1.2.11 Propiedades:

Duración de la propiedad –La longitud de las propiedades en el Paquete de control MQTT CONNECT.

Intervalo de gastos de sesión –El indicador del período de sesiones Interval de carga es 17(0X11) Byte. Si la Intervalación de Expiración de Sesión se utiliza más de una vez entonces es considerado como un error de protocolo. Si se establece a 0 entonces termina la sesión, cuando la conexión de red es cerrado o se establece a 0XFFFFFF entonces la sesión no expira.

Recibir el máximo –El indicador de recepción El máximo es 33(0X21) Byte. Se aplica sólo si la conexión de red está abierta. Si el Máximo Recibido es 0 entonces tomas los predeterminados como 65.535.

Tamaño máximo del paquete –El indicador del máximo Paquete El tamaño es 39(0X27) Byte. No hay límite en el tamaño del paquete cuando el tamaño máximo del paquete está ausente.

Tema Alias Máximo –El indicador del tema Alias Máximo es 34(0X22) Byte. Si el Tema Alias Máximo se utiliza más de una vez entonces se considera que a error de protocolo.

Solicitud de información sobre la respuesta –El indicador Solicitud Información de respuesta es 25(0X29) Byte. El valor 0 indica que la Información de Respuesta a la Solicitud es no presente.

Solicitar información sobre problemas –El indicador Solicitud Información sobre problemas es 23(0X17) Byte. Si el valor es 1 entonces el paquete no está presente en el paquete.

Propiedad de usuario –El indicador de propiedad de usuario es 38(0X26) Byte. Esta propiedad se permite utilizar más de una vez en el mismo nombre también.

Método de autenticación –El indicador del Método de autenticación es 21(0X15) Byte. Si se utiliza más de una vez, se considera un protocolo error. La autenticación extendida no se realiza cuando el valor del método de autenticación es 0.

Datos de autenticación –El indicador del Datos de autenticación es 22(0X16) Byte. Cuando se utilizan los datos de autentificación mientras no autenticación método entonces se debe considerar como un error de protocolo. No usa más de una vez en el paquete. El Las propiedades CONNECT se explican claramente en este tutorial MQTT Client.

Ejemplo de cabecera variable
Descripción 7 6 5 4 3 2 1 0
Nombre del Protocolo byte 1 Longitud MSB (0) 0 0 0 0 0 0
byte 2 Longitud LSB (4) 0 0 0 0 0 1 0
byte 3 ‘M’ 0 1 0 0 1 1 0
byte 4 ‘Q’ 0 1 0 1 0 0 0
byte 5 ‘T’ 0 1 0 1 0 1 0
byte 6 ‘T’ 0 1 0 1 0 1 0
Descripción 7 6 5 4 3 2 1 0
byte 7 Versión (5) 00 00 01 0
byte8 Nombre de usuario Bandera (1) Password Flag (1) Retenerse (0) Will QoS (01) Bandera Will (1) Clean Start(1) 1 1 0 0 1 1 1
Mantengan la vida
byte 9 Mantener MSB activo (0) 0 0 0 0 0 0 0
byte 10 Mantener LSB Alive (10) 0 0 0 0 1 01
Propiedades
byte 11 Longitud (5) 0 0 0 0 1 0 1 0
byte 12 identificador intervalo de la sesión (17) 0 0 0 1 0 0 0
byte 13 Intervalo de gastos de período de sesiones (10) 0 0 0 0 0 0 0
byte 14 0 0 0 0 0 0 0 0
byte 15 0 0 0 0 0 0 0 0
byte 16 0 0 0 0 1 0 1 0
3.1.3 Carga

La carga útil del paquete CONNECT contiene una o más longitud – prefijado campos, existencia de la cual es determinada por las banderas en el encabezado variable. Si estos campos están presentes, cliente identifica Will Properties, Will Topic, Will Payload, Usuario y Contraseña debe aparecer

Identificador de cliente (ID de cliente) –Identificador del cliente Debe ser una cadena UTF-8 codificada. Cada cliente que se conecta al servidor tiene un ID de cliente único. Este MQTT período de sesiones entre el cliente y el servidor debe ser utilizado en los clientes de MQTT para identificar la posición que tienen.

Propiedades de Will –Las propiedades de la voluntad son siguiente campo en la carga útil, si se establece a 1. Los campos de propiedades de Will definen el mensaje de aplicación atributos que deben enviarse con un mensaje de voluntad y las propiedades que definen cuando el mensaje de voluntad debe ser publicado. A Will Property tiene la longitud y propiedades de la propiedad.

Longitud de la propiedad –Define la longitud de la propiedades en el campo Will Properties.

Will Delay Interval –El indicador de la voluntad Delay Interval es 34(0X22) Byte. Si el Interval de Dilatación de Voluntad se utiliza más de una vez, se considera que a error de protocolo. Si el intervalo Will Delay no está presente, entonces no hay demora.

Indicador de formato de carga útil –El indicador del formato de carga es 1(0X01) Byte. 0(0X00) Byte es equivalente a no enviar el formato de carga útil indicador que indica el mensaje es bytes no especificado. Si se utiliza más de una vez, debe ser considerado como un error de protocolo.

Intervalo de Expiración de Mensajes –Indicador Mensaje Interval de gastos es 2(0X02) Byte. Si se utiliza más de una vez en el paquete considerado como un protocolo error. Si está presente el valor de cuatro bytes estará en el tiempo de vida del Mensaje de Voluntad, y la salida expira cuando el servidor libera el Mensaje de Voluntad. Si no está presente cuando el servidor libera el mensaje opcional, entonces el intervalo de caducidad del mensaje no será enviado.

Tipo de contenido –El indicador del tipo de contenido es 3(0X03) Byte. El tipo de contenido se incluye más de una vez en el paquete considerado como protocolo error. La aplicación de envío y recepción es el valor del tipo de contenido.

Tema de respuesta –El indicador de la respuesta El tema es 8(0X08) Byte. Si el tema de respuesta no está ausente entonces identifica el mensaje de Voluntad como la petición.

Datos de correlación –El indicador del Correlación Los datos son el 9(0X09) Byte. Los datos de correlación son utilizados por el remitente del mensaje de solicitud para identificar que se recibió la solicitud cuando se envió el mensaje de respuesta. El cliente solicitante no requiere ninguna Datos de correlación cuando está ausente.

Propiedad de usuario –El indicador de propiedad de usuario es 38(0X26) Byte. Esta propiedad se permite utilizar más de una vez en el mismo nombre también.

Will Topic –El Tema de la Voluntad es el siguiente campo en el payload, si la bandera de Will se establece a 1. Debe ser una cadena codificada UTF-8

Will Payload –La carga de Will es la siguiente sobre el terreno la carga útil, si la bandera de Will se establece a 1. La carga de pago de Will define la carga de pago del mensaje de aplicación Ser publicado para el Tema de la Voluntad.

Nombre de usuario –El nombre de usuario es el siguiente campo en el payload, si la bandera de usuario se establece a 1. Esto puede ser utilizado para la autenticación por el servidor.

Contraseña –La contraseña es el siguiente campo en el payload, si la bandera de la contraseña se establece a 1. Se puede utilizar para llevar cualquier credenciales.

3.2 CONNACK

CONNACK Packet es el paquete enviado por el servidor en respuesta a un CONNECT paquete recibido del cliente. El servidor debe enviar un CONNACK con una razón 0X00 (Succeso) Código envío cualquier otro paquete que no sea AUTH. El servidor no debe enviar más de un reconocimiento de conexión sobre una conexión de red.

Bit 7 6 5 4 3 2 1 0
byte 1 MQTT Tipo de paquete de control (2) Reservado
0 0 1 0 0 0 0 0
byte 2 Duración restante
3.2.2 CONNACK Cabecera variable

CONNECT reconoce banderas, CONNECT razón código y propiedades son el campo en el Cabecera variable del paquete CONNACK.

CONNECT reconoce banderas –Establecer este campo en byte 1. Los bits 7 a 1 se reservan y se establecen a cero.

Presentación de sesión –La posición del período de sesiones presentes es poco 0 del CONNECT reconocer banderas. The session current flag informs the client whether the servidor usando el estado del servidor desde la conexión anterior del clienteID. Esto permite al cliente y al servidor han tenido a consistent view of the session states. Si el servidor acepta 1 con un inicio limpio, el servidor más establecido el Código de Razón 0X00(success) en el paquete CONNACK y además establece el estado de sesión 0 o 1 en el CONNACK paquete.

CONNECT Código de Razón –En el encabezado variable, Byte 2 es el Código de Razón CONNECT. Si un servidor envía un paquete CONNECT con un Código de Razón de 128 o más. Debe cerrar la conexión de red. El Servidor envía el paquete CONNACK con una de las siguientes razones CONNECT Código.

Valor Hex Nombre del Código de Razón Descripción
0 0x00 Éxito Se acepta la conexión.
128 0x80 Error no especificado El Servidor no desea revelar la razón del fracaso, o ninguna de las otras razones Códigos aplicar.
129 0x81 Paquete malformado Los datos dentro del paquete CONNECT no pueden ser analizados correctamente.
130 0x82 Error de protocolo Los datos del paquete CONNECT no se ajustan a esta especificación.
131 0x83 Error específico de aplicación El CONNECT es válido pero no es aceptado por este servidor.
132 0x84 Versión del Protocolo no compatible El Servidor no admite la versión del protocolo MQTT solicitado por el Cliente.
133 0x85 Identificador de cliente no válido El identificador del cliente es una cadena válida pero no está permitido por el servidor.
134 0x86 Nombre de usuario malo o contraseña El servidor no acepta el nombre de usuario o contraseña especificado por el cliente
135 0x87 No autorizado El Cliente no está autorizado para conectarse.
136 0x88 Servidor no disponible El servidor MQTT no está disponible.
137 0x89 Servidor ocupado El Servidor está ocupado. Inténtalo de nuevo más tarde.
138 0x8A Banned Este Cliente ha sido prohibido por acción administrativa. Contactar con el administrador del servidor
140 0x8C Mal método de autenticación El método de autenticación no es compatible o no coincide con el método de autenticación en la actualidad uso.
144 0x90 Nombre del tema nulo El tema de la voluntad El nombre no está malformado, pero no es aceptado por este servidor.
149 0x95 Paquete demasiado grande El paquete CONNECT superó el tamaño máximo permitido.
151 0x97 Cuota excedida Se ha superado la aplicación o el límite administrativo impuesto.
153 0x99 Formato de carga no válido La carga de carga de carga no coincide con el indicador de formato de carga de pago especificado.
154 0x9A Retain not supported El servidor no admite mensajes retenidos, y Will Retain fue establecido a 1.
155 0x9B QoS no soportado El servidor no admite el sistema QoS en Will QoS
156 0x9C Usa otro servidor El Cliente debe utilizar temporalmente otro servidor.
157 0x9D Servidor movido El Cliente debe utilizar permanentemente otro servidor.
159 0x9F Tasa de conexión superada Se ha superado el límite de la tasa de conexión.
3.2.3 CONNACK Propiedades

Algunas de las propiedades CONNACK son similares a las propiedades CONNECT son tiempo de propiedad, Intervalo de expedición de sesión, Recibe Máximo, Tamaño máximo del paquete, Alias Tema Máximo, Usuario propiedad, método de autenticación y datos de autenticación. Para información detallada Consulte la sección- 3.1.2.11

QoS máximo –El indicador del QoS Máximo es 36(0X24) Byte agrega el error. si el QoS Máximo no está disponible, el cliente utiliza el QoS Máximo 2. En el paquete PUBLISH, si un servidor no soporta QoS 1 o QoS 2 debe enviar el QoS Máximo en el CONNACK paquete indica el QoS más alto que puede soportar. Un servidor que no admite QoS 1 o QoS 2 publican paquetes todavía acepta paquetes de suscripción que contienen el QoS solicitado de 0, 1, o 2.

Retain Available –El indicador del Retain Disponible es 37(0X25) Byte. Si un servidor recibe un paquete de conexión que contiene un Mensaje de Voluntad con a bandera 1, el servidor debe reflejar la solicitud de conexión si no admite mensajes retenidos. It debe enviar CONNACK con el código de razón 0X9A (Retener no disponible) y cerrar la conexión de red.

Identificador de cliente asignado –El indicador del El identificador de cliente asignado es 18(0X12) Byte. si el cliente se conecta con un cliente de cero longitud Identificador el servidor debe responder con una conexión y un identificador de cliente designado. El cliente asignado Identificador debe ser un nuevo identificador cliente que no se utiliza actualmente en ninguna otra sesión en el servidor.

Reason String –El indicador de la razón String 31 (0X1F) Byte. Es una cadena codificada UTF-8. Es una cadena legible humana diseñada para detectar y no debe ser discriminado por el cliente. El servidor utiliza este valor para proporcionar más información al cliente. el servidor no debe enviar este activo si el cliente aumenta el tamaño del Paquete CONNACK más allá del tamaño de paquete máximo especificado.

Suscripción de Wildcard disponible –El indicador el Suscripción de Wildcard es 40(0X28) Byte. si el valor es 0, entonces las suscripciones de Wildcard no apoyado. Si el valor es 1, entonces es compatible. La suscripción a Wildcard se incluye más de una vez dentro el paquete y el valor distinto de 0 o 1 se considera un error de protocolo.

Identificadores de suscripción disponibles –El Indicador el identificador de suscripción es 41(0X19) Byte. Si el valor es 0 entonces los identificadores de suscripción son no apoyado. Si el valor es 1 entonces se admiten los identificadores de suscripción se incluyen más que una vez y el valor distinto de 0 o 1 se considera un protocolo.

Suscripción compartida disponible –El indicador el Suscripción compartida Disponible es 42(0X2A) Byte. Si el valor es 0 entonces los identificadores de suscripción son no apoyado. Si el valor es 1 entonces se admiten los identificadores de suscripción se incluyen más que una vez y el valor distinto de 0 o 1 se considera un protocolo.

Server Keep-Alive –El indicador del Servidor Keep-Alive es 19(0X13) Byte. Si el Servidor envía un Keep-Alive en el paquete CONNACK, este valor debe Ser utilizado en lugar del valor Keep-Alive del cliente enviado en CONNECT Packet. Si el servidor no envía el Mantener en vivo, el Servidor utiliza el valor de reserva establecido por el Cliente en el paquete CONNECT. Si el servidor Keep-Alive está incluido en el paquete más de una vez que se considera un error de protocolo.

Información sobre la respuesta –El indicador del respuesta información es 26(0X1A) Byte. Es una cadena codificada UTF-8. Se utiliza principalmente para crear una respuesta Tema. Si se incluye más de una vez, debe considerarse como un error de protocolo.

Referencia del servidor –El indicador del servidor Referencia 28(0X1C) Byte. Es una cadena codificada UTF-8. Si se incluye más de una vez en el paquete entonces se debe considerar como un error de protocolo. El servidor utiliza la referencia del servidor en una conexión o desconexión en el paquete con el código Reason 0X9C (utiliza otro servidor) o el código de razón 0X9D (servidor) movido).

3.2.4 CONNACK Carga

El paquete de control CONNACK no tiene carga útil.

3.3 PUBLISH

Un paquete PUBLISH es enviado desde el cliente al servidor o viceversa para llevar an Mensaje de aplicación.

Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (3) DUP flag Nivel QoS RETAIN
0 0 1 1 X X X X
byte 2... Duración restante

DUP –La posición de la bandera Duplicada es byte 1, bit 3. Si la bandera DUP se establece a 0 indica que esta es la primera vez, el Cliente o el Servidor tiene intento para enviar el paquete PUBLISH. Si la bandera DUP está fijada en 1, lo que indica que puede ser una redistribución el intento previo de enviar el paquete.

QoS –La posición del QoS es byte 1, bits 2-1. Este campo indica la garantía de entrega de un mensaje de solicitud.

Valor QoS Bit 2 bit 1 Descripción
0 0 0 Al menos una vez entrega
1 0 1 Al menos una vez entregada
2 1 0 Exactamente una vez entrega
1 1 Reservado – no se debe utilizar

RETAIN –La posición de la bandera RETAIN es byte 1, bit 0. Si la bandera RETAIN se establece a 1, en el paquete de publicación enviado por un cliente a un servidor, el servidor debe reemplazar cualquier mensaje existente para el tema y guardar el mensaje de aplicación. Si la bandera RETAIN está 0 en el Paquete PUBLISH enviado por un cliente al servidor, el servidor no almacena el mensaje como un retenido y elimina o reemplaza cualquier mensaje retenido existente.

Duración restante –Define el encabezado variable y longitud de carga útil.

3.3.2 PUBLISH Cabecera variable

Nombre del tema, identificador de paquetes y propiedades son los campos en la variable cabecera de Paquete PUBLISH.

Nombre del tema –Los datos de carga identifican el tema nombre el canal de información publicado. El nombre del tema en el encabezado variable del paquete PUBLISH debe ser el primero campo. Esta debería ser la cadena codificada UTF-8. El nombre del tema en el paquete PUBLISH no debe contener caracteres salvajes. El nombre del tema en el paquete PUBLISH enviado por el servidor al cliente de suscripción Debe combinar el filtro de tema del suscriptor

Packet Identifier –En los paquetes PUBLISH paquete campo identificador está presente sólo cuando el nivel 1 o 2.

Propiedades PUBLISH –El paquete PUBLISH Propiedades son similar al CONNECT y CONNACK. Las propiedades son la longitud de la propiedad, indicador de formato de carga, Mensaje Intervalo de explotación, Alias temáticas, Tema de respuesta, Datos de correlación, Propiedad del usuario, identificador de suscripción, y Contenido -Tipo. Para información detallada Consulte las secciones –3.1.2.11, 3.2.3.

3.3.3 PUBLISH Payload

Hay un mensaje de aplicación que se publica en la carga útil. El contenido y formato de los datos dependiendo de la aplicación. La diferencia entre la longitud de la variable header y el campo de longitud restante en la cabecera fija es la longitud de la carga útil. Es válido tener un paquete publicado con una carga útil de cero longitud.

3.3.4 Acciones PUBLISH
Nivel de QoS Respuesta esperada
QoS 0 Ninguno
QoS 1 PUBACK packet
QoS 2 PUBREC packet
3.4 PUBACK – Agradecimiento PUBLISH

La respuesta del paquete PUBLISH con QoS 1 es el paquete PUBACK.

3.4.1 PUBACK Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (1) Reservado
0 0 0 1 0 0 0
byte 2... Duración restante
3.4.2 PUBACK Cabecera variable

Packet Identifier del paquete PUBLISH, PUBACK Reason Código de propiedad longitud y las propiedades son los campos en el encabezado variable del paquete PUBACK

Bit 7 6 5 4 3 2 1 0
byte 1 Packet Identifier MSB
byte 2 Packet Identifier LSB
byte 3 PUBACK Código de Razón
byte 4 Duración de la propiedad
3.4.2.1 PUBACK Código de la razón

El código de la razón PUBACK en el Byte 3. No hay código de la razón y el valor (0X00) (El éxito) se utiliza cuando la longitud restante es 2.

Valor Hex Nombre del Código de Razón Descripción
0 0x00 Éxito Se acepta la conexión.
128 0x80 Error no especificado El Servidor no desea revelar la razón del fracaso, o ninguna de las otras razones Códigos aplicar.
129 0x81 Paquete malformado Los datos dentro del paquete CONNECT no pueden ser analizados correctamente.
130 0x82 Error de protocolo Los datos del paquete CONNECT no se ajustan a esta especificación.
131 0x83 Error específico de aplicación El CONNECT es válido pero no es aceptado por este servidor.
132 0x84 Versión del Protocolo no compatible El Servidor no admite la versión del protocolo MQTT solicitado por el Cliente.
133 0x85 Identificador de cliente no válido El identificador del cliente es una cadena válida pero no está permitido por el servidor.
134 0x86 Nombre de usuario malo o contraseña El servidor no acepta el nombre de usuario o contraseña especificado por el cliente
135 0x87 No autorizado El Cliente no está autorizado para conectarse.
136 0x88 Servidor no disponible El servidor MQTT no está disponible.
137 0x89 Servidor ocupado El Servidor está ocupado. Inténtalo de nuevo más tarde.
138 0x8A Banned Este Cliente ha sido prohibido por acción administrativa. Contactar con el administrador del servidor
140 0x8C Mal método de autenticación El método de autenticación no es compatible o no coincide con el método de autenticación en la actualidad uso.
144 0x90 Nombre del tema nulo El tema de la voluntad El nombre no está malformado, pero no es aceptado por este servidor.
149 0x95 Paquete demasiado grande El paquete CONNECT superó el tamaño máximo permitido.
151 0x97 Cuota excedida Se ha superado la aplicación o el límite administrativo impuesto.
153 0x99 Formato de carga no válido La carga de carga de carga no coincide con el indicador de formato de carga de pago especificado.
3.4.2.2 PUBACK Propiedades

Duración de la propiedad –PUBACK Packet variable header longitud de las propiedades se codifica como un entero de byte variable. si la longitud restante es inferior a 4, la propiedad no tiene longitud y se utiliza un valor 0.

Propiedad de usuario –La propiedad de usuario se utiliza para providencia más información adicional al cliente. Para más información Consulte la sección – 3.1.3

Reason string –Se utiliza para proporcionar todo el información al Cliente sobre por qué la conexión de red está cerrada. Para más información sobre la razón Referencia a la sección – 3.2.3

3.4.3 Carga de pago PUBACK

El paquete de control PUBACK no tiene carga útil.

3.4.4 PUBACK Acciones

En el protocolo de entrega QoS 1, el remitente debe manejar el paquete PUBLISH para ser considerado como “Un acknowledge” hasta que el paquete PUBACK correspondiente sea recibido del receptor. In el QoS 1 protocolo de entrega, el cliente acepta el derecho del mensaje de aplicación y responde con un PUBACK paquete que contiene el identificador de paquetes del paquete PUBLISH entrante. Después de enviar un paquete PUBACK el receptor debe considerar cualquier paquete PUBLISH entrante que contenga el mismo identificador de paquetes como una utilidad mensaje independientemente de la estructura de su bandera DUP.

3.5 PUBREC – PUBLISH Recibido

El paquete PUBLISH con QoS 2 es la respuesta del paquete PUBREC. En QoS 2 protocolo intercambio PUBREC es el segundo paquete.

3.5.1 PUBREC Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (5) DUP flag Nivel QoS RETAIN
0 0 1 1 X X X X
byte 2... Duración restante
3.5.2 PUBREC Cabecera variable
Valor QoS Bit 2 bit 1 Descripción
0 0 0 Al menos una vez entrega
1 0 1 Al menos una vez entregada
2 1 0 Exactamente una vez entrega
1 1 Reservado – no se debe utilizar
3.5.2.1 PUBREC Código de Razón
Valor Hex Nombre del Código de Razón Descripción
0 0x00 Éxito Se acepta la conexión.
128 0x80 Error no especificado El Servidor no desea revelar la razón del fracaso, o ninguna de las otras razones Códigos aplicar.
129 0x81 Paquete malformado Los datos dentro del paquete CONNECT no pueden ser analizados correctamente.
130 0x82 Error de protocolo Los datos del paquete CONNECT no se ajustan a esta especificación.
131 0x83 Error específico de aplicación El CONNECT es válido pero no es aceptado por este servidor.
132 0x84 Versión del Protocolo no compatible El Servidor no admite la versión del protocolo MQTT solicitado por el Cliente.
133 0x85 Identificador de cliente no válido El identificador del cliente es una cadena válida pero no está permitido por el servidor.
134 0x86 Nombre de usuario malo o contraseña El servidor no acepta el nombre de usuario o contraseña especificado por el cliente
135 0x87 No autorizado El Cliente no está autorizado para conectarse.
136 0x88 Servidor no disponible El servidor MQTT no está disponible.
137 0x89 Servidor ocupado El Servidor está ocupado. Inténtalo de nuevo más tarde.
138 0x8A Banned Este Cliente ha sido prohibido por acción administrativa. Contactar con el administrador del servidor
140 0x8C Mal método de autenticación El método de autenticación no es compatible o no coincide con el método de autenticación en la actualidad uso.
144 0x90 Nombre del tema nulo El tema de la voluntad El nombre no está malformado, pero no es aceptado por este servidor.
149 0x95 Paquete demasiado grande El paquete CONNECT superó el tamaño máximo permitido.
151 0x97 Cuota excedida Se ha superado la aplicación o el límite administrativo impuesto.
153 0x99 Formato de carga no válido La carga de carga de carga no coincide con el indicador de formato de carga de pago especificado.
3.5.2.2 PUBREC Propiedades

Duración de la propiedad– PUBREC packet variable header properties length is codificad como variable byte integer. si la longitud restante es inferior a 4, la propiedad no tiene longitud y un valor 0 es usado.

Propiedad de usuario– Propiedad de usuario se utiliza para proporcionar más información adicional el cliente. Para más información Consulte la sección – 3.1.3

Reason string– Se utiliza para proporcionar toda la información al Cliente sobre por qué conexión de red está cerrada. Para más información sobre la razón String Refer a la sección- 3.2.3

3.5.3 PUBREC Carga

El paquete de control del paquete PUBREC no tiene carga útil.

3.5.4 PUBREC Acciones
Nivel de QoS Respuesta esperada
QoS 0 Ninguno
QoS 1 PUBACK packet
QoS 2 PUBREC packet
3.6 PUBREL – Comunicado PUBLISH

La respuesta del paquete PUBREC es el paquete PUBREL. El protocolo QoS 2 intercambio El tercer paquete es el paquete PUBLISH Release.

Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (6) Reservado
0 0 0 1 0 0 0 0
byte 2... Duración restante

Los bits 3,2,1 y 0 de la cabecera fija se asignan en el paquete PUBREL, que Debe ser fijado en 0,01 y 0 respectivamente. Longitud restante: longitud del encabezado variable.

3.6.2 PUBREL Cabecera variable

El identificador del paquete del paquete PUBREC, el código de la razón PUBREL, y propiedades los campos en el encabezado variable del paquete PUBREL.

Bit 7 6 5 4 3 2 1 0
byte 1 Packet Identifier MSB
byte 2 Packet Identifier LSB
byte 3 PUBREL Código de Razón
byte 4 Duración de la propiedad
3.6.2.1 PUBREL Código de Razón

El código de la razón PUBREL en el Byte 3. No hay código de la razón y el valor de (0X00) (El éxito) se utiliza cuando la longitud restante es 2. El Cliente o Servidor debe enviar los paquetes PUBREL con uno de los valores del Código de Razón PUBREL.

Valor Hex Nombre del Código de Razón Descripción
0 0x00 Éxito Mensaje liberado.
146 0x92 Packet Identifier no encontrado El identificador de paquetes no es conocido. Esto no es un error durante la recuperación, pero en otras ocasiones indicaciones un desajuste entre el Estado de sesión en el cliente y el servidor.
3.6.2.2 PUBREL Propiedades

Duración de la propiedad– cabecera variable de paquete PUBREL longitud de las propiedades se codifica como a variable byte integer. si la longitud restante es inferior a 4, la propiedad no tiene longitud y un valor 0 es usado.

Propiedad de usuario– Propiedad de usuario se utiliza para proporcionar más más información al respecto cliente. Para más información Consulte la sección – 3.1.3

Reason string– Se utiliza para proporcionar todo el información al cliente acerca de por qué conexión de red está cerrada. Para más información sobre la razón String Refer a la sección- 3.2.3

3.6.3 PUBREL Carga

El paquete de control del paquete PUBREL no tiene carga útil.

3.6.4 PUBREL Acciones
Nivel de QoS Respuesta esperada
QoS 0 Ninguno
QoS 1 PUBACK packet
QoS 2 PUBREC packet
3.7 PUBCOMP – PUBLISH Complete

La respuesta del paquete PUBREL es el paquete PUBCOMP. El protocolo QoS 2 intercambio El cuarto y último paquete es el paquete PUBLISH Complete.

3.7.1 PUBCOMP Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (1) Reservado
0 0 0 1 0 0 0 0 0
byte 2... Duración restante
3.7.2 PUBCOMP Cabecera variable
Bit 7 6 5 4 3 2 1 0
byte 1 Packet Identifier MSB
byte 2 Packet Identifier LSB
byte 3 PUBACK Código de Razón
byte 4 Duración de la propiedad
3.7.2.1 PUBCOMP Código de Razón

El PUBCOMP Código de la razón en el Byte 3. No hay código de la razón y el valor (0X00) (El éxito) se utiliza cuando la longitud restante es 2. El Cliente o Servidor debe enviar el PUBCOMP paquetes con uno de los valores del Código de Razón PUBCOMP.

Valor Hex Nombre del Código de Razón Descripción
0 0x00 Éxito Mensaje liberado.
146 0x92 Packet Identifier no encontrado El identificador de paquetes no es conocido. Esto no es un error durante la recuperación, pero en otras ocasiones indica un desajuste entre el Estado de sesión en el Cliente y el Servidor.
3.7.2.2 PUBCOMP Propiedades

Duración de la propiedad –variable de paquete PUBCOMP longitud de las propiedades de encabezado es codificado como un entero de byte variable. si la longitud restante es inferior a 4, la propiedad no tiene longitud y se utiliza un valor 0.

Propiedad de usuario –La propiedad de usuario se utiliza para providencia más información adicional al cliente. Para más información Consulte la sección – 3.1.3

Reason string –Se utiliza para proporcionar todo el información al Cliente sobre por qué la conexión de red está cerrada. Para más información sobre la razón Referencia a la sección – 3.2.3

Nivel de QoS Respuesta esperada
QoS 0 Ninguno
QoS 1 PUBACK packet
QoS 2 PUBREC packet
3.8 SUSCRIBE

El paquete SUBSCRIBE se envía al servidor desde el cliente para generar uno o más suscripciones. Cada suscripción almacena el interés del cliente en una suscripción o más suscripción Temas. El servidor envía los paquetes PUBLISH al cliente para pasar los mensajes de aplicación con el máximo QoS a temas compatibles con estas suscripciones.

Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (8) Reservado
0 0 0 1 0 0 0 0 0
byte 2... Duración restante

Los bits 3,2,1 y 0 de la cabecera fija se asignan en el paquete SUBSCRIBE, que Debe se establece en 0,01, y 0 respectivamente. Duración restante – longitud del encabezado variable y la longitud de la carga útil.

3.8.2 SUBSCRIBE Cabecera variable

El identificador de paquetes y propiedades son los campos en el encabezado variable el Paquete SUBSCRIBE.

Descripción 7 6 5 4 3 2 1 0
Packet Identifier
byte 1 Packet Identifier MSB (0) 0 0 0 0 0 0 0 0
byte 2 Packet Identifier LSB (10) 0 0 0 1 0 1 0 0
byte 3 Duración de la propiedad (0) 0 0 0 0 0 0 0 0
3.8.2.1 Propiedades

Duración de la propiedad –El paquete SUBSCRIBE cabezal variable longitud de propiedad se codifica como un entero de byte variable.

Identificador de suscripciónEl indicador del El identificador de suscripción es 11 (0X0B) Byte. si el identificador de suscripción tiene el valor como 0 y es incluido en el paquete más de una vez, debe ser considerado como un error de protocolo. Puede tener un valor del 1 al 268,435,455.

Propiedad de usuario –Propiedad de usuario se utiliza para proporcionar más información adicional al cliente. Para más información Consulte la sección – 3.1.3

3.8.3 SUSCRIBE Carga

La carga útil del paquete SUBSCRIBE contiene una lista de filtros de tema que identifican que temas al que el cliente quiere suscribirse. Byte of subscription options following the topic filter. El Tema Filtro es una cadena codificada UTF-8. La carga útil SUBSCRIBE debe contener al menos un filtro de tema y un pareja de opciones de suscripción.

Opciones de suscripción

El campo Maximum QoS está representado por bits 0 y 1 de opciones de suscripción. Es para ser considerado como un error de protocolo si el valor del campo QoS máximo es 3. Ninguna opción local representado por bit 2 de opciones de suscripción. Si No Local Bit está establecido a 1, considerado un error de protocolo. Retain as publicado Option está representado por bit 3 de opciones de suscripción. Si la bandera RETAIN está fijada en 0, entonces el Solicitud Los mensajes se envían utilizando estas opciones de suscripción. Si el RETAIN está establecido a 1, entonces elMensajes retenidosse envían cuando se inicia la opción de suscripción. Retain Handling Option es representado por bit 4 y 5 de opciones de suscripción. Cuando la suscripción se establece entonces los mensajes retenidos son enviado. El valor de la opción Retain Handling es 3 entonces es un error de protocolo. Los valores y los descripción de las opciones de suscripción son,

0 = Enviar retenido Mensajes durante la suscripción.

1 = enviar mensajes retenidos a la suscripción solamente si la suscripción no es presente.

2 = No enviar mensajes retenidos durante la suscripción.

Subscripción Opciones de carga útil Formato:

Descripción 7 6 6 4 3 2 1 0
Filtro temático
byte 1 Longitud MSB
byte 2 Longitud LSB
bytes 3..N Filtro temático
Opciones de suscripción
Reservado Retain Handling RAP NL QoS

RAP – Retener como Publicado.
NL - No local.

Forma Byte de carga :

Descripción 7 6 5 4 3 2 1 0
Filtro temático
1 Longitud ) 0 0 0 0 0 0 0 0
2 Longitud ) 0 0 0 0 0 0 1 1
3 "a" 0 1 1 0 0 0 0 1
4 . 0 0 1 0 1 1 1 1
5 b) 0 1 1 0 0 0 1 0
Suscripciones
6 Opt de suscripción ) 0 0 0 0 0 0 0 1
Filtro temático
7 Longitud ) 0 0 0 0 0 0 0 0
8 Longitud ) 0 0 0 0 0 0 1 1
9 c) 0 1 1 0 0 0 1 1
0 . 0 0 1 0 1 1 1 1
1 "d" 0 1 1 0 0 1 0 0
Suscripción
2 Opt de suscripción 0 0 0 0 0 0 1 0
3.8.4 SUSCRIBE Acciones

El servidor debe responder con el paquete SUBACK cuando reciba el SUBSCRIBE paquete del cliente. El identificador de paquetes SUBSCRIBE y SUBACK son los mismos.

3.9 SUBACK – SUBSCRIBE Agradecimiento

El Servidor envió el paquete SUBACK al cliente para confirmar la recepción y procesamiento del paquete SUBSCRIBE enviado por el cliente. The list of Reason Codes contained by a SUBACK paquete especifica el nivel máximo de QoS solicitado por el SUBSCRIBE.

3.9.1 Header fijo
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (8) Reservado
0 0 0 1 0 0 0 0 0
byte 2... Duración restante
3.9.2 SUBACK Cabecera variable

El identificador del paquete SUBSCRIBE y las propiedades son los campos en el paquete del encabezado variable SUBACK.

Bit 7 6 5 4 3 2 1 0
byte 1 Packet Identifier MSB
byte 2 Packet Identifier LSB
byte 3 PUBACK Código de Razón
byte 4 Duración de la propiedad
3.10 UNSUBSCRIBE

Para darse de baja de algunos temas, el cliente envía la solicitud UNSUBSCRIBE a la servidor.

3.10.1 UNSUBSCRIBE Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (8) Reservado
0 0 0 1 0 0 0 0 0
byte 2... Duración restante
3.10.2 UNSUBSCRIBE Cabecera variable

El identificador de paquetes y las propiedades son los campos de la variable Header of the Un paquete de control de UNSUBSCRIBE.

3.10.2.1 UNSUBSCRIBE Propiedades

Duración de la propiedad –El paquete UNSUBSCRIBE variable longitud de propiedad de cabecera se codifica como un entero de byte variable.

Propiedad de usuario –Propiedad de usuario se utiliza para proporcionar más información adicional al cliente. Para más información Consulte la sección – 3.1.3

3.10.3 UNSUBSCRIBE Carga

La carga útil del paquete UNSUBSCRIBE contiene una lista de filtros de temas que identifican que temas al que el cliente quiere suscribirse. Byte of subscription options following the topic filter. El Tema Filtro es una cadena codificada UTF-8. La carga útil del paquete de control UNSUBSCRIBE debe contener un filtro de tema. Si el paquete de control UNSUBSCRIBE no tiene carga útil entonces es un error de protocolo.

Descripción 7 6 5 4 3 2 1 0
Filtro temático
byte 1 Longitud MSB (0) 0 0 0 0 0 0 0 0
byte 2 Longitud LSB (3) 0 0 0 0 0 0 1 1
byte 3 “a” (0x61) 0 1 1 0 0 0 0 1
byte 4 ‘/’ (0x2F) 0 0 1 0 1 1 1 1
byte 5 “b” (0x62) 0 1 1 0 0 0 1 0
Filtro temático
byte 6 Longitud MSB (0) 0 0 0 0 0 0 0 0
byte 7 Longitud LSB (3) 0 0 0 0 0 0 1 1
byte 8 "c" (0x63) 0 1 1 0 0 0 1 1
byte 9 ‘/’ (0x2F) 0 0 1 0 1 1 1 1
byte 10 “d” (0x64) 0 1 1 0 0 1 0 0
3.10.4 UNSUBSCRIBE Acciones

Los filtros temáticos proporcionados en el paquete UNSUBSCRIBE deben caracterizarse por el filtro de tema actual que el cliente tiene en el servidor. Si algún filtro coincide correctamente, su suscripción debe ser eliminado de lo contrario no se producirá ningún procesamiento adicional.

  • Debe dejar de agregar nuevos mensajes que son compatibles con los filtros de tema para entregar a los cliente.
  • Debe completar cualquier mensaje QoS 1 o QoS 2 que sea compatible con los filtros de tema y tiene entregado al cliente.
  • Puede seguir entregando cualquier mensaje existente al cliente.
3.11 UNSUBACK – UNSUBSCRIBE ACKNOWLEDGEMENT

El Servidor envió el paquete UNSUBACK al cliente para confirmar recepción y procesamiento del paquete UNSUBSCRIBE enviado por el cliente.

3.11.1 UNSUBACK Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (11) Reservado
0 0 0 1 0 0 0 0 0
byte 2... Duración restante
3.11.2 UNSUBACK Cabecera variable

El identificador de paquetes del paquete de control UNSUBSCRIBE y las propiedades son las campos en el encabezado variable del paquete UNSUBACK.

Bit 7 6 5 4 3 2 1 0
byte 1 Packet Identifier MSB
byte 2 Packet Identifier LSB
byte 3 PUBACK Código de Razón
byte 4 Duración de la propiedad
UNSUBACK Propiedades

Duración de la propiedad –El paquete UNSUBACK cabezal variable longitud de propiedad se codifica como un entero de byte variable.

Reason string –Se utiliza para proporcionar todo el información al Cliente sobre por qué la conexión de red está cerrada. Para más información sobre la razón Referencia a la sección – 3.2.3

Propiedad de usuario –Propiedad de usuario se utiliza para proporcionar más información adicional al cliente. Para más información Consulte la sección- 3.1.3

3.11.3 UNSUBACK Carga

La carga útil del paquete de control UNSUBACK lleva una lista de razones Códigos. El orden de los filtros de tema en el paquete UNSUBSCRIBE coincide con el orden de los códigos de la razón en el paquete UNSUBACK. La carga útil del paquete de control UNSUBACK debe contener uno de los códigos de razón para cada uno filtro de tema.

Valor Hex Nombre del Código de Razón Descripción
0 0x00 Éxito La suscripción se elimina.
17 0x11 No existía ninguna suscripción No compatible Filtro Tépico utilizado por el Cliente.
128 0x80 Error no especificado No se puede completar la suscripción y el servidor no desea revelar la razón o cualquier otro los códigos de la razón no se aplicaron.
131 0x83 Error específico de aplicación El servidor no acepta el paquete válido UNSUBSCRIBE.
135 0x87 No autorizado Para hacer la suscripción no el cliente es autorizado.
143 0x8F Filtro temático inválido El Filtro Tópico no está permitido para este Cliente, pero está correctamente formado.
145 0x91 Identificador de paquete en uso El identificador de paquetes especificado ya está en uso.
3.12 PINGREQ – Solicitud de PING

El paquete de control PINGREQ se envía al servidor desde el cliente. Los usos de PINGREQ paquete, indique al servidor que el cliente está vivo mientras que no se envían otros paquetes de control MQTT desde el cliente al servidor. Solicite al servidor que responda para asegurarse de que esté vivo. El ejercicio de la Red Identifica que la conexión de red está viva. El paquete de control PINGREQ se utiliza en el procesamiento de elMantengan la vida. Para más información Consulte la sección 3.1.2.10

3.12.1 PINGREQ Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (12) Reservado
0 0 0 1 0 0 0 0 0
byte 2... Duración restante
3.12.2 PINGREQ Cabecera variable

No hay encabezado variable en el paquete de control PINGREQ.

3.12.3 PINGREQ Carga

No hay carga útil en el paquete de control PINGREQ.

3.12.4 PINGREQ Acciones

El servidor envió el paquete PINGRESP al cliente. El paquete de control PINGRESP es el respuesta de un paquete PINGREQ.

3.13 PINGRESP – Respuesta de PING

El paquete de control PINGRESP es enviado al servidor desde el cliente que especifica el servidor activo. Es la respuesta de un paquete de control PINGREQ. El paquete de control PINGRESP se utiliza en el el procesamiento del mantén vivo. Para más información Consulte la sección 3.1.2.10

3.13.1 PINGRESP Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (13) Reservado
0 0 0 1 0 0 0 0 0
byte 2... Duración restante
3.13.2 PINGRESP Cabecera variable

No hay encabezado variable en el paquete de control PINGRESP.

3.13.3 PINGRESP Carga

No hay carga útil en el paquete de control PINGRESP.

3.13.4 PINGRESP Acciones

El cliente no toma ninguna acción para obtener este paquete de control PINGRESP.

3.14

El paquete de control MQTT final es el paquete DISCONNECT que se envía desde el cliente al servidor. Especifica la razón, por qué la conexión de red está cerrada. Los clientes de MQTT enviaron esto paquete antes de cerrar la conexión de red. Antes de enviar el paquete DISCONNECT con el código de razón 0X00 (desconexión normal) la conexión de red está cerrada, entonces la conexión tiene un mensaje de voluntad que es publicado. Para más detalles consulte 3.1.2.5

3.14.1 Cabecera fija
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (8) Reservado
0 0 0 1 0 0 0 0 0
byte 2... Duración restante

El cliente o servidor debe comprobar que los bits reservados están fijados a 0. El reservadas valor bits no es cero envía un paquete de desconexión con el código razón 0X81. Para más detalles consulte Sección 3.13.

Longitud restante: longitud del encabezado variable.

3.14.2 Cabecera variable
Descripción 7 6 5 4 3 2 1 0
Desconectar el código de la razón
byte 1 0 0 0 0 0 0 0 0
byte 2 Duración (5) 0 0 0 0 0 1 1
byte 3 identificador intervalo de la sesión (17) 0 0 0 1 0 0 0
byte 4 Intervalo de gastos de sesión (0) 0 0 0 0 0 0 0
byte 5 0 0 0 0 0 0 0 0
byte 6 0 0 0 0 0 0 0 0
byte 7 0 0 0 0 0 0 0 0
3.14.2.1 Código de Razón

El código de la razón DISCONNECT es byte 1 en el encabezado variable. El valor 0X00 se utiliza cuando el valor de longitud restante es inferior a 1. Se muestran valores de campo de código de razón no firmados abajo.

Valor Hex Nombre del Código de Razón Enviado Descripción
0 0x00 Desconexión normal Cliente o servidor Conexión cerrada normalmente. El mensaje de Will no es enviado.
4 0x04 Desconexión con mensaje de voluntad Cliente El cliente quiere desconectar, pero el servidor también debe publicar su mensaje de voluntad.
128 0x80 Error no especificado Cliente o servidor La conexión está cerrada y el servidor no quiso revelar la razón ni ningún otro razón códigos no se aplicaba.
129 0x81 Paquete malformado Cliente o servidor Esta especificación no confirma el paquete recibido.
130 0x82 Error de protocolo Cliente o servidor Recibió un paquete inesperado o fuera de orden.
131 0x83 Error específico de aplicación Cliente o servidor No puede ser procesado por esta implementación, pero el paquete recibido es válido.
135 0x87 No autorizado Servidor La solicitud del servidor no es una autorizada.
137 0x89 Servidor ocupado Servidor No puede continuar las solicitudes de procesamiento de este Cliente y también el servidor está ocupado.
139 0x8B Servidor apagado Servidor Apagando el servidor.
141 0x8D Mantener – El tiempo libre Servidor No hay paquete, que ha sido recibido 1,5 veces el tiempo de vida de Keep, es decir, mantener vivo tiempo libre. La conexión está cerrada.
142 0x8E Período de sesiones Servidor Se adjunta otra conexión con el mismo ID de cliente, cerrando así esta conexión.
143 0x8F Filtro temático inválido Servidor El Filtro Tópico está correctamente formado pero no es aceptado por este Sever.
144 0x90 Nombre del tema nulo Cliente o servidor El Filtro Tópico no está permitido para este Cliente o servidor, pero está correctamente formado.
147 0x93 Recibir el máximo excedido Cliente o servidor El cliente o servidor recibió más de la salida máxima recibida, para la cual no envió PUBACK o PUBCOMP.
148 0x94 Tema Alias inválidas Cliente o servidor El paquete de control PUBLISH contiene un Alias Tema que es mayor que el tema máximo alias value que ha sido recibido por el cliente o servidor y se envía en el control CONNECTO O CONNACK paquete.
149 0x95 Paquete demasiado grande Cliente o servidor El valor del tamaño del paquete es mayor que el tamaño máximo del paquete para este cliente o Servidor.
150 0x96 Tasa de mensaje demasiado alta Cliente o servidor La tasa de datos recibida por el cliente o servidor es demasiado alta.
151 0x97 Cuota excedida Cliente o servidor La ejecución o los límites administrativos excedidos.
152 0x98 Medidas administrativas Cliente o servidor Conexión cerrada debido a una acción administrativa.
153 0x99 Formato de carga no válido Cliente o servidor Un indicador de formato de carga útil especificado no coincide con el formato de carga útil
154 0x9A Retain not supported Servidor Los mensajes retenidos no son compatibles por el servidor.
155 0x9B QoS no soportado Servidor En el paquete de control CONNACK, el cliente especificó un QoS que es mayor que el QoS especificado en un Maximum QoS.
156 0x9C Usa otro servidor Servidor El servidor se cambia temporalmente.
157 0x9D Servidor movido Servidor La ubicación del servidor se cambia permanentemente.
158 0x9E Suscripciones compartidas no apoyadas Servidor Las suscripciones compartidas no son compatibles por el servidor.
159 0x9F Tasa de conexión superada Servidor La tasa de conexión es demasiado alta debido a la conexión cerrada.
160 0xA0 Tiempo máximo de conexión Servidor Se ha superado el tiempo máximo autorizado de conexión para esta conexión.
161 0xA1 Identificadores de suscripción no compatibles Servidor Las suscripciones compartidas no son compatibles por el servidor.
162 0xA2 Suscripciones de tarjetas silvestres no compatibles Servidor Las suscripciones Wildcard no son compatibles con el servidor.
3.15 AUTH -Authentication Exchange

El paquete AUTH es enviado desde el cliente al servidor o viceversa como parte de un intercambio de autenticación ampliada, como la autenticación de respuesta. Enviar cliente o servidor Paquete AUTH es un error de protocolo si el paquete CONNECT no tiene el mismo método de autenticación.

3.15.1 AUTH Fixed Header
Bit 7 6 5 4 3 2 1 0
byte 1 Tipo de paquete de control MQTT (15) Reservado
0 0 1 0 0 0 0 0
byte 2... Duración restante
3.15.2 UT Cabecera variable

Código de la razón autentica y las propiedades son los campos en el encabezado variable del Pack de control AUTH.

3.15.2.1 Authenticate Reason Code

El código de razones Authenticate es Byte 0 en el encabezado variable. Los valores para un byte los campos de código de la razón de autenticación no firmados se muestran a continuación. Una de las razones de autenticación debe ser utilizado por el remitente del paquete de control AUTH.

Valor Hex Nombre del Código de Razón Enviado Descripción
0 0x00 Éxito Servidor Autenticación exitosa
24 0x18 Continua autenticación Cliente o servidor La autenticación continúa otro paso.
25 0x19 Reauthenticate Cliente Reauthentication initiated

Si el código de la razón es 0x00 (éxito) y no hay atributos entonces la razón código y la longitud de la propiedad se puede omitir. En este caso, la longitud restante para AUTH es 0.

3.15.2.2 Propiedades

Duración de la propiedad –La variable de paquetes AUTH header longitud de propiedad se codifica como un entero de byte variable.

Reason string –Se utiliza para proporcionar todo el información al Cliente sobre por qué la conexión de red está cerrada. Para más información sobre la razón String Consulte la sección – 3.2.3.

Propiedad de usuario –Propiedad de usuario se utiliza para proporcionar más información adicional al cliente. Para más información Consulte – 3.1.3.

Método de autenticación –verificar la identidad de alguien utilizando algunos métodos son método de autenticación. Para más detalles Consulte la sección 3.1.2.11.

Datos de autenticación –El nombre de usuario y contraseña son los datos deben demostrar su identidad al cliente o al servidor. para más detalles Véase la sección 3.1.2.11

3.15.3 Carga útil

No hay carga útil en el paquete de control AUTH.

3.15.4 AUTH Actions

Para más información, consulte la sección 4.12 sobre autenticación ampliada.

4. Comportamiento operacional
4.1 Estado del período de sesiones

Para habilitar los protocolos QoS 1 y QoS 2 el cliente y el servidor deben conectar el estado con el identificador del cliente, referido como el nivel de sesión. El servidor almacena suscripciones como parte de la estado de sesión. La sesión puede continuar en el orden de conexiones de red. Esto durará hasta que el más recientes conexión de red y intervalo de expiración de sesión.
El estado de la sesión sobre el cliente es el siguiente:

  • QoS 1 y QoS 2 mensajes han sido enviados al servidor, pero no son totalmente reconocidos (parcialmente) reconocida).
  • QoS 2 mensajes fueron recibidos del servidor pero no están completamente reconocida (con reconocimiento parcial)

El estado de sesión en el servidor es el siguiente:

  • La existencia de la sesión estatal, incluso si el estado de la sesión restante está vacío.
  • Suscripciones sub clientes incluyendo identificadores de suscripción.
  • QoS 1 y QoS 2 mensajes han sido enviados al cliente pero no son plenamente reconocidos.
  • Intercambio pendiente QoS 1 y QoS 2 mensajes para un cliente y opcionalmente QoS 0 mensajes pendientes transferencia a el cliente.
  • QoS 2 mensajes recibidos de un cliente. Sin embargo, el mensaje de la Voluntad y el intervalo de demora de la Voluntad no son plenamente reconocido.
  • si el período de sesiones no está conectado, entonces el estado del período de sesiones será descartado
4.1.1 Estado de la sesión

Si la conexión de red está abierta, entonces el estado de sesión cliente y servidor debería no ser descartado. Si la conexión de red está cerrada y la sesión expira, el servidor debe descartar el estado del período de sesiones.

4.2 Conexiones de red

ElMQTT protocolorequiere tráfico básico para entregar una corriente de orden, sin pérdida, flujo de bytes de cliente a servidor y servidor a cliente.

4.3 Flujos de QoS y Protocolo

QoS (Calidad de Servicio) define cómo es fiable un mensaje. Garantiza que los mensajes son enviados correctamente del remitente al receptor, dependiendo del nivel elegido garantía de entrega. El objetivo principal de esta característica es asegurar que los mensajes sean con éxito transmitido de un punto a otro. Hay tresniveles de QoS, a saber: QoS 0, QoS 1, y QoS 2.

4.3.1 QoS 0: Al menos una vez

El mensaje fue entregado al cliente correspondiente pero no se envió respuesta. por el receptor. El mensaje llegará al destinatario una vez o no.

Sender Action Paquete de control Acción del receptor
PUBLISH QoS 0, DUP=0
———
Entrega de aplicaciones Mensaje para los destinatarios apropiados en adelante
4.3.2 QoS 1: Al menos una vez

El mensaje fue recuperado varias veces por el remitente hasta un reconocimiento obtenido.

Sender Action MQTT Paquete de control Acciones del receptor
Mensaje de almacén
Enviar PUBLISH QoS 1, DUP=0, ———
Iniciar la entrega de la solicitud Mensaje1
" Enviar PUBACK
Mensaje de disco
4.3.3 QoS 2: Exactamente una vez

El remitente y el receptor se comprometen a garantizar sólo una copia del mensaje recibido.

Sender Action MQTT Paquete de control Acción del receptor
Mensaje de almacén
PUBLISH QoS 2, DUP=0
———
Storea continuación Iniciar la entrega de la solicitud Mensaje1
PUBREC
"
Mensaje de disco, Store PUBREC recibido
PUBREL
———
Discard
Enviar PUBCOMP
"
Estado almacenado
4.4 Mensaje recibido

Cuando un servidor toma la propiedad de un mensaje de aplicación entrante debe ser a) la sesión para el cliente con suscripciones compatibles.

4.5 Ordenación del mensaje
  • Cuando el cliente devuelve los paquetes publicados, los paquetes PUBLISH originales deben ser devueltos en el igual orden en el que fueron enviados (esto se puede aplicar a los mensajes QoS 1 y QoS 2).
  • El Cliente debe enviar el paquete PUBACK en el orden en el que reciben el paquete PUBLISH por el remitente (mensaje QoS 1).
  • El Cliente debe enviar los paquetes PUBREC en el orden en que los paquetes correspondientes son recibidos por el remitente (mensaje QoS 2).
  • El Cliente debe enviar paquetes PUBREL en el orden en que se reciban los paquetes PUBREC pertinentes (QoS 2 mensajes).
4.6 Nombres temáticos y filtros temáticos
4.6.1 Salvajes temáticos

El separador del nivel Tépico se utiliza para separar el nombre del tema. Si es así, divide los título por varios “nivel topic”. El filtro de tema de suscripción puede contener caracteres comodinecard especiales que permitir a un cliente suscribirse a varios temas simultáneamente. Los caracteres Wildcard se pueden utilizar en el tema filtros, pero no dentro de un nombre de tema.

Separador de nivel temático

La barra delantera (‘/’ U+002F) se utiliza para separar cada nivel dentro de un tema árbol y proporcionar una estructura jerárquica para el nombre del tema. El uso del separador de nivel de tema es significativa cuando uno de los dos caracteres comodines en el filtro de tema está representado por el cliente que subscribe. Tema separadores de nivel pueden aparecer en cualquier lugar del filtro de tema o nombre de tema.

4.6.1.2 Multilevel Wildcard

El signo número (‘#’ U+0023) es un carácter comodín que se aplica a cualquier posición en un Tema. El comodín multinivel representa los niveles de padres e hijos. The multilevel wildcard carácter debe ser especificado por su cuenta o seguir el separador de nivel de tema. En ambos casos, debe ser el último carácter especificado en el filtro de tema.

4.6.1.3 Tarjeta salvaje de nivel único

El comodín de un solo nivel se puede utilizar en cualquier nivel en el filtro de encabezado. donde está utilizado, debe ocupar todo el tamaño del filtro. Se puede utilizar en múltiples niveles en el tema filtro y se puede utilizar en conjunto con un comodín multinivel.

4.6.2 Tema empezando con $

Nombre de los temas que comienzan con $ carácter pero no comienza con # o + carácter. El servidor debe evitar que los clientes cambien mensajes con otros clientes utilizando los nombres de temas que empezar con un personaje de $ líder.

4.6.3 Tema Semántico y Uso
  • Cada Nombres Tópicos y Filtros Tópicos deben contener al menos un carácter largo.
  • Nombres del tema y filtros del tema pueden incluir caracteres del espacio y que son sensibles a casos.
  • Nombres del tema y filtros del tema no deben incluir caracteres nulos (Unicode U+0000) y no debe cifrado más de 65.535 bytes.
  • Un ‘/’ líder o atrasado crea un nombre o filtro temático único.
  • Un nombre o filtro temático con sólo el carácter ‘/’ es válido

Al hacer una suscripción, que es compatible con el servidor, no hacer ninguna cambios o alteraciones a los caracteres predeterminados o no autorizados en el Nombre del tema o Filtros del tema

4.7 Suscripciones

MQTT ofrece dos tipos de suscripciones.

  • Suscripciones no compartidas
  • Suscripciones compartidas
Suscripciones no compartidas

En una suscripción no compartida, cada cliente se suscribió a un tema particular recibe a copia de todos los mensajes que se publican al mismo tema suscrito. Un período de sesiones debe tener sólo uno Suscripciones no compartidas con el mismo filtro de tema, Así que el filtro de tema se puede utilizar como una clave para reconocer la suscripción en ese período de sesiones. Si los múltiples clientes tienen su propia suscripción no compartida a la igual tema entonces cada cliente obtiene la copia publicada del mensaje de aplicación sobre ese tema suscrito. Esto significa que las suscripciones no compartidas no se pueden utilizar para cargar mensajes de aplicación de equilibrio entre múltiples consumidor de clientes en cuyo caso cada suscriptor será proporcionado con cada mensaje.

Suscripciones compartidas

En una suscripción compartida, cada mensaje se entrega sólo a los suscritos Temas el cliente. Una suscripción compartida se asocia con múltiples sesiones de suscripción de MQTT. Como el Suscripción no compartida que es una suscripción no compartida, también tiene un filtro temático y suscripción Opciones. Sin embargo, un problema compatible con su Filtro Tópico sólo será enviado a uno de sus sesiones de suscripción. Las suscripciones compartidas son útiles cuando múltiples clientes consumidores comparten el procesamiento de publicaciones en paralelo.

El formato del estilo especial de Filtro Tópico para identificar el compartido suscripción :

$ Share/{ShareName}/{filter}

¿Dónde?

$Share – La secuencia de caracteres que representan la suscripción compartida Tema Filtrar.

{Nombre compartido} – Cadena de caracteres sin “/”, “+” o “#”.

{filter} – El resto de la cadena contiene la misma sintaxis y semántica de una Tema Filtro en la subscripción no compartida.

4.8 Control de flujo

Se hace la optimización de la tasa de transmisión de datos entre los clientes de MQTT por flujo control. Mediante el uso de un valor máximo los clientes y servidores controlan y reciben el número de paquetes no conocidos de PUBLISH. El Máximo Recibido establece un máximo de una asignación que envía es utilizado para controlar el número de paquetes PUBLISH QoS √® 0 que se pueden enviar sin recibir PUBACK (para QoS 1) o PUBCOMP (para QoS 2). El cliente o servidor establece el valor de cuota inicial de envío que no exceda Recibe Maximum. Al enviar los paquetes PUBLISH cada vez que se disminuye el valor de cuota de envío. Si Enviar valor de cuota viene a cero, entonces el cliente o servidor no puede enviar el paquete PUBLISH con QoS Conf0. Además, el cliente o servidor continuar el proceso entonces en realidad el valor de cuota de envío se aumenta de dos maneras,

  • Cada vez que la recuperación de paquetes PUBACK o PUBCOMP no obstante llevaba un código de error.
  • Cada vez que la recuperación de paquetes PUBREC con un código de razón de 0X80 o mayor.

La cuota de envío ya es igual al valor inicial de envío de cuota por lo que no aumento el valor. El intento de aumentar el valor de la cuota de envío en el caso anterior puede causar retransmisión of a Paquete PUBREL después de establecer una nueva conexión de red.

4.9 Solicitud/respuesta

El mensaje de solicitud a un tema particular es publicado por un cliente MQTT. El mensaje de aplicación con un tema de respuesta se considera un mensaje de solicitud. Otro cliente MQTT (recipiente) se ha suscrito al filtro de tema, que coincide con el nombre de tema del cliente MQTT correspondiente (Sender) utilizado cuando se publica el mensaje de solicitud. Como resultado, recibió el mensaje de solicitud. Puede o podrá no ser múltiples encuestados suscritos a este nombre de tema. el demandado adoptará las medidas apropiadas basado en sobre el mensaje de solicitud y luego emitir un mensaje de respuesta al nombre del tema en la propiedad del tema de respuesta llevado al mensaje de solicitud. En uso regular, el solicitante recibe el mensaje de respuesta de el tema de respuesta suscrito. Si algún otro cliente se suscribió al mismo tema de respuesta, entonces el cliente procesado y recibido el mensaje de respuesta.

4.10 Redirección del servidor

Un servidor puede solicitar al cliente que redireccione otro servidor enviando el MQTT paquetes de control CONNACK o DISCONNECT with Reason code 0X9C or 0X9D. Usando estos códigos de la razón los servidor utilizado por la ubicación del cliente se indica utilizando la propiedad Server Reference. La referencia del servidor UTF-8 Encoded String. El código de la razón 0X9C indica que el cliente redirige provisionalmente a otro servidor. El código de la razón 0X9D indica que el cliente redirige eternamente a otro servidor.

4.11 Aumento de la autenticación

El paquete MQTT CONNECT con nombre de usuario y campo de contraseña admite lo básico autenticación de la conexión de red. Autenticación mejorada amplía este básicoMQTT autenticacióncon reto / respuesta estilo autenticación. La autenticación es un activo entre los clientes de MQTT. Si servidor recibe el método de autenticación que no soporta el método, entonces puede enviar un CONNACK paquete de control con el código Reason 0X8C o 0X87 y cerrar la conexión de red.

4.11.1 Reanudación

Si el cliente ha proporcionado el método de autentificación en el control CONNECT Packet, it puede volver a autenticar en cualquier momento después de recibir el paquete de control CONNACK. Esto se hace enviando el AUTH paquete que contiene el código Razón 0X19 (re-authentication). El cliente autentica el valor debe ser set al mismo valor que el método de autenticación utilizado originalmente para autenticar la red Conexión. El servidor reconoce con el paquete AUTH que contiene el código Reason de 0X00 (success – re-authentication completa) para la solicitud de re-authenticación enviada por el cliente o el servidor reconoce con el AUTH paquete que contiene el código Razón de 0X18 (continua autenticación se necesitan más datos). Este flujo continúa hasta que la re-authenticación esté completa o falla. Si la reauthenticación falla, entonces el MQTT clientes debe enviar el paquete de control DISCONNECT que contiene el código pertinente de la razón y cerrar la red Conexión.

4.12 Errores de manejo
Errores de paquete malformado y protocolo

Algunos de los casos de error son el tamaño de la implementación de los clientes de MQTT, capacidades que apoyan, y consecuencias de procesar constantemente un paquete engañoso. Si el remitente cumple con esta identificación, no enviará paquetes malformados ni causará errores de protocolo. Sin embargo, si un cliente envía paquetes de control MQTT antes de recibir CONNACK, puede causar un error de protocolo que puede han tenido condujo a una idea equivocada sobre las capacidades del servidor.

Embalajes malformados y protocolo Errores Código de la razón son,

  • Paquete malformado 0x81
  • Error de protocolo 0x82
  • 0x93 Excediendo el Máximo Recibido
  • Paquete demasiado grande
  • 0x9A No retenido
  • 0x9B QoS no es compatible
  • 0x9E No se admiten suscripciones compartidas
  • Suscripción 0xA1 No se admiten identificadores
  • 0xA2 Wildcard No se admiten suscripciones

Si un servidor detecta un Error de paquete o protocolo malformado y especifica un Código de la razón en la especificación, debe cerrar la conexión de red.

4.12.2 Otros errores

Los errores de paquete malformado y los errores de protocolo no pueden ser esperados por el remitente porque el destinatario puede ser impedido de comunicarse con el remitente. El cliente receptor o servidor puede encontrar un error inestable como una falta de memoria que lo impide con éxito ejecución un paquete de control MQTT individual. Paquetes de reconocimiento que contienen un código de razón de 0X80 o mayor son PUBACK, PUBREL, PUBCOMP, SUBACK, UNSUBACK que especifica que el paquete recibido detecta el error utilizando identificador de paquetes.

5. Utilizando WebSocket como un transporte de red

Cuando se aplican las siguientes condiciones,MQTTes transportado sobre un WebSocket conexión:

  • Los paquetes de control MQTT deben ser transmitidos en marcos de datos binarios websocket. Si algún otro tipo de datos frame is received, the recipient must close the network connection.
  • El marco de datos único de websocket puede contener paquetes de control MQTT múltiples o parciales. El receptor no debe suponer que los paquetes de control MQTT están alineados dentro de los límites del marco del Websocket.
  • El cliente debe agregar “mqtt” a la lista de subprotocolos WebSocket que proporciona
  • WebSocket sub protocolo nombre debe ser seleccionado y retirado por el servidor “mqtt”.

¡Empieza a construir!

¿Necesita ayuda para la implementación de MQTT?

Conecta con nuestro equipo para discutir tus requisitos únicos y explorar soluciones MQTT personalizadas que se ajustan a sus objetivos de proyecto.