MQTT协议简介

大家好,今天小白给大家简单介绍一种常用的物联网通信协议,即MQTT协议,欢迎一起交流学习。

一、 什么是MQTT协议

MQTT(Message Queuing Telemetry Transport, 消息队列遥测传输),该协议最早是IBM开发的一个即时通讯协议,MQTT协议是为大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备通讯而设计的一种协议。它的核心设计思想是开源、可靠、轻巧、简单,具有以下主要的几项特性:

    a. 非常小的通信开销(最小的消息大小为 2 字节);

    b. 使用 TCP/IP 提供网络连接;

    c. 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;

    d. 提供三种不同消息传递等级,让消息能按需到达目的地,适应在不稳定工作的网络传输需求;

在物联网领域,传感器与服务器的通信,信息的收集,设备控制等等,MQTT都可以作为考虑的方案之一,在未来几年,MQTT的应用会越来越广,值得关注。

二、MQTT协议通信过程及报文简介

2.1 通信过程简述

MQTT协议中包含了三种角色,订阅者(客户端),发布者(客户端),代理(服务端),工作原理是:订阅者向代理发起订阅,代理存储订阅者的订阅信息;发布者向代理发布消息,代理将受到的信息与订阅信息进行匹配,若匹配到相应的订阅者,则将发布者发布的消息转发给匹配到的订阅者,反之,不转发。(图中代理到发布者以订阅者到代理也有消息通路,图中未画出)

                          

2.2 协议报文简介

该协议比较简单,总共有14个报文,其中:

2.2.1 连接和取消连接相关的报文有:CONNECT,CONNACK, DISCONNECT。

CONNECT:客户端到服务端的网络连接建立后,客户端发送给服务端的第一个报文必须是 CONNECT 报文,是客户端发送给服务端的第一个报文。

CONNACK:服务端发送 CONNACK 报文响应从客户端收到的 CONNECT 报文。服务端发送给客户端的第一个报文必
须是 CONNACK。

DISCONNECT:该报文是客户端发给服务端的最后一个控制报文。表示客户端正常断开连接。

2.2.2 订阅和取消订阅相关的报文有:SUBSCRIBE / UNSUBSCRIBE,SUBACK / UNSUBACK;

SUBSCRIBE:客户端向服务端发送 SUBSCRIBE 报文用于创建一个或多个订阅。每个订阅注册客户端关心的一个或多个
主题。为了将应用消息转发给与那些订阅匹配的主题,服务端发送 PUBLISH 报文给客户端。SUBSCRIBE报文也(为每个订阅)指定了最大的 QoS 等级,服务端根据这个发送应用消息给客户端。

SUBACK:服务端发送 SUBACK 报文给客户端,用于确认它已收到并且正在处理SUBSCRIBE报文。

UNSUBSCRIBE:客户端发送 UNSUBSCRIBE 报文给服务端,用于取消订阅主题。

UNSUBACK:服务端发送UNSUBACK报文给客户端用于确认收到 UNSUBSCRIBE 报文。

2.2.3 发布相关的报文有:PUBLISH,PUBACK,PUBREC,PUBREL,PUBCOMP;

PUBLISH:该控制报文是指从客户端向服务端或者服务端向客户端传输一个应用消息。

PUBACK:该报文是对 QoS 1 等级的 PUBLISH 报文的响应。

PUBREC:该报文是对 QoS 等级 2 的 PUBLISH 报文的响应。它是 QoS 2 等级协议交换的第二个报文。

PUBREL: 该报文是对 PUBREC 报文的响应。它是 QoS 2 等级协议交换的第三个报文。

PUBCOMP:该报文是对 PUBREL 报文的响应。它是 QoS 2 等级协议交换的第四个也是最后一个报文。

2.2.4 用于保持连接相关的报文有:PINGREQ,PINGRESP;

PINGREQ:客户端发送该报文给服务端的,用于:
    a. 在没有任何其它控制报文从客户端发给服务端时,告知服务端客户端还活着。
    b. 请求服务端发送响应确认它还活着。
    c. 使用网络以确认网络连接没有断开。

PINGRESP:服务端发送 PINGRESP 报文响应客户端的 PINGREQ 报文。表示服务端还活着

报文的内容包含三个部分:固定报头、可变报头、有效载荷部分, 每一个报文具体介绍,可以参考:http://mcxiaoke.github.io/mqtt/protocol/MQTT-3.1.1-CN.pdf

三、MQTT协议通信质量

MQTT按照定义的服务质量 (QoS) 等级进行应用消息的分发,即:QoS0, QoS1, QoS2;

QoS0等级:消息的分发依赖于底层网络的能力。接收者不会发送响应,发送者也不会重试。消息可能送达一次也可能
根本没送达。

QoS1等级:确保消息至少送达一次。QoS1的 PUBLISH 报文的可变报头中包含一个报文标识符,需要
PUBACK 报文确认。

QoS2:这是最高等级的服务质量,消息丢失和重复都是不可接受的。使用这个服务质量等级会有额外的开销。
QoS2 的消息可变报头中有报文标识符,QoS2 的 PUBLISH报文的接收者使用一个两步确认过程来确认收到。(即:首先一方发送PUBLISH报文,收到的一方回复PUBREC,收到PUBREC的一方给对方发送PUBREL,收到PUBREL的一方发送PUBCOMP给对方,从而完成QoS2等级服务质量的消息发布。)

四、总结

本篇主要简单介绍了MQTT协议的一些特点,通信过程,报文类型和作用简介,服务质量等级介绍等,欢迎一起交流学习。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值