MQTT协议整理

MQTT协议整理

1、定义

MQTT是一个轻量级的采用Broker的基于TCP(默认端口号1833)的发布/订阅式异步遥信消息队列传输应用层协议。设计初始目的是为大量计算能力有限、工作在低带宽不可靠的远程传感器和控制器设备通讯,非常适合物联网通信。IBM公司1999年提出的。

2、服务质量

Qo0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络,分发的消息可能丢失或重复,不会收到发布确认响应。

例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送

Qo1:“至少一次”,确保消息可以到达,但消息可能会重复;

Qo2:“只有一次”,确保消息只收到一次。publisher缓存了message和msgID,而服务器缓存了msgID,两方都做记录所以可以保证消息不重复,但是由于记录是需要删除的,这个删除流程同样多了一倍

例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。

3、14种报文类型(版本3)--分为五大类

第一类:

Connect:客户端连接服务器

Connack:服务器确认连接请求(保持长连接,还要定时发心跳包与服务保持连接)

第二类:

Publish:客户端/服务器发布消息(message:Payload)

Puback:服务器发布确认(QoS 1)

Pubrec:服务器发布收到(QoS 2 第一步 确认传递成功)

Pubrel:客户端发布释放(QoS 2 第二步 告诉服务器删除msgID

Pubcomp:服务器发布完成(QoS 2 第三步 告诉客户端删除msg

第三类:

Subscribe:客户端订阅主题(Topic)

Suback:服务器订阅确认

Unsubscribe:客户端取消订阅

Unsuback:服务器取消订阅确认

第四类:

Pingreq:客户端心跳请求(1. 在没有任何其它控制报文从客户端发给服务的时,告知服务器客户端还活着;2. 请求服务端发送响应确认它还活着;3. 使用网络以确认网络连接没有断开)

Pingresp:服务器心跳响应(表示服务端还活着)

第五类:

Disconnect:客户端断开连接

4、MQTT控制报文

固定报头格式如下:

5、Connect return code

MQTT的CONNACK消息中对返回码(return code)作了如下的定义:

0x00 Connection Accepted

0x01 Connection Refused: unacceptable protocol version

0x02 Connection Refused: identifier rejected

0x03 Connection Refused: server unavailable

0x04 Connection Refused: bad user name or password

0x05 Connection Refused: not authorized

6-255 Reserved for future use

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页