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