MQTT协议基础资料
MQTT(Message Queuing Telemetry Transport) 是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。 它工作在TCP协议之上,与HTTP同属于应用层协议,默认端口号是1883,通常情况下使用TCP长连接进行通信。
MQTT是一个C/S架构的发布/订阅模式的消息传输协议。 服务器端称为 broker ,broker不负责具体业务,只负责转发客户端的消息,将客户端 发布 的数据,转发到所有 订阅 了该 主题 的客户端。
MQTT的应用模式是多个客户端之间的通信,某个客户端订阅了主题后,它将会收到所有客户端发布到该主题下面的数据。 这个“主题”和HTTP协议中的URI类似,是一串标识符。 在MQTT的协议框架下,实际处理业务数据的服务器本质上也是一个MQTT客户端。 业务服务器只需要实现一个MQTT客户端,而broker已经有大量成熟的软件可以直接使用,大大降低了传统服务器软件的开发难度。因此使得MQTT在物联网场景广泛应用。
MQTT客户端一般工作流程: 1.建立TCP连接(1883端口); 2.发送连接请求(附带客户端ID、用户名、密码等信息,进行登陆和认证),等待响应; 3.订阅一个或多个主题(还可以使用通配符); 4.发布一个或多个主题(附带有效载荷数据); 5.空闲时发起心跳请求,保有活连接; 6.接收已订阅的主题数据; 7.发送断开请求; 8.断开TCP连接;
MQTT协议使用2进制数据模式,数据包格式为:
| 固定包头 | 可变包头 | 有效载荷 |
|---|---|---|
| 最小2字节,最大5字节 | 可选长度 | 可选长度 |
固定包头包含控制类型和包长度:
| Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|---|---|---|---|---|---|---|---|---|
| BYTE1 | MQTT控制报文的类型 | 用于指定控制报文类型的标志位 | ||||||
| BYTE2 | 剩余长度 | |||||||
| BYTE3 | 剩余长度(可选,当BYTE2大于0x80时有效) | |||||||
| BYTE4 | 剩余长度(可选,当BYTE3大于0x80时有效) | |||||||
| BYTE5 | 剩余长度(可选,当BYTE4大于0x80时有效) |
可变包头和有效载荷在此不详述,详见参考资料。