Protocolo MQTT
Alejiyfer1990Informe18 de Junio de 2019
692 Palabras (3 Páginas)135 Visitas
UNIVERSIDAD POLITÉCNICA SALESIANA
INGENIERÍA ELECTRÓNICA
ELECTIVA 3
DECIMO GRUPO 2
NOMBRE: Alejandro Flores
FECHA: 2019-06-08
TEMA: QOS 2
Protocolo MQTT
Es un protocolo simple y muy ligero para la transmisión de mensajes cortos de telemetría y de control, desde/hacía una red de sensores/actuadores, que tenga limitaciones evidentes en cuanto al consumo, velocidad de transmisión y procesamiento. MQTT administra la retransmisión de mensajes y garantiza la entrega.
Calidad de servicio
El nivel de Calidad de servicio (QoS) es un acuerdo entre el remitente de un mensaje y el receptor de un mensaje que define la garantía de entrega de un mensaje específico. Hay 3 niveles de QoS en MQTT:
- Como máximo una vez (QoS 0)
- Al menos una vez (QoS 1)
- Exactamente una vez (QoS 2)
Cuando se habla de QoS en MQTT, debe considerar los dos lados de la entrega de mensajes:
- Entrega de mensajes desde el cliente de publicación al intermediario.
- Entrega de mensajes del agente al cliente suscrito.
QoS 2 - exactamente una vez
QoS 2 es el nivel más alto de servicio en MQTT. Este nivel garantiza que cada mensaje sea recibido solo una vez por los destinatarios previstos. QoS 2 es el nivel de calidad de servicio más seguro y más lento. La garantía es proporcionada por al menos dos flujos de solicitud / respuesta (un acuerdo de cuatro partes) entre el remitente y el receptor. El remitente y el destinatario utilizan el identificador de paquete del mensaje PUBLISH original para coordinar la entrega del mensaje.
[pic 1]
Fig1.Flujo QoS 2
Cuando un receptor obtiene un paquete de PUBLISH QoS 2 de un remitente, procesa el mensaje de publicación en consecuencia y responde al remitente con un paquete PUBREC que reconoce el paquete PUBLISH. Si el remitente no obtiene un paquete PUBREC del receptor, envía el paquete PUBLISH nuevamente con un indicador duplicado (DUP) hasta que reciba un acuse de recibo.
Una vez que el remitente recibe un paquete PUBREC del receptor, el remitente puede descartar de forma segura el paquete PUBLISH inicial. El remitente almacena el paquete PUBREC desde el receptor y responde con un paquete PUBREL.
Una vez que el receptor recibe el paquete PUBREL, puede descartar todos los estados almacenados y responder con un paquete PUBCOMP (lo mismo ocurre cuando el remitente recibe el PUBCOMP). Hasta que el receptor complete el procesamiento y envíe el paquete PUBCOMP al remitente, el receptor almacena una referencia al identificador del paquete del paquete PUBLISH original. Este paso es importante para evitar procesar el mensaje por segunda vez. Una vez que el remitente recibe el paquete PUBCOMP, el identificador de paquete del mensaje publicado queda disponible para su reutilización.
Cuando se completa el flujo de QoS 2, ambas partes están seguras de que el mensaje se entrega y el remitente tiene la confirmación de la entrega.
Si un paquete se pierde en el camino, el remitente es responsable de retransmitir el mensaje dentro de un período de tiempo razonable. Esto es igualmente cierto si el remitente es un cliente MQTT o un agente MQTT. El destinatario tiene la responsabilidad de responder a cada mensaje de comando en consecuencia.
[pic 2]
Fig. Diagrama de flujo de mensaje QoS 2
Ejemplo mensaje QoS 2
Para este ejemplo, he creado un script de Python para publicar mensajes con una QOS de 2.
Paso 1
Para comenzar, hacemos una publicación simple con QOS = 2 y observamos los mensajes PUBREC, PUBREL y PUBCOMP en condiciones normales.
También observamos que el mensaje se marca como entregado y se elimina de la cola de mensajes salientes.
[pic 3]
Paso 2
Luego simulamos un problema de red bloqueando el mensaje PUBREC .
Ahora debe notar que el mensaje permanece atascado en la cola de mensajes salientes.
...