MQTT 介绍
- MQTT(消息队列遥测传输,Message Queuing Telemetry Transport)是一种轻量级的消息传递协议,专门设计用于低带宽、不稳定的网络环境。它特别适合物联网(IoT)设备之间的通信。
MQTT是属于应用层的协议,是在TCP协议传输的基础上实现了多个设备相互通信的功能,采用发布/订阅的通信模式允许设备相互之间以主题(topic)进行消息传递。设备可以是消息的发布者、订阅者,或两者都可以。

我们的数据转发都是通过TCP的服务器来完成的。
客户端和服务器端 MQTT 协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者,如下图所示。

我们可以将这个关系类比成抖音(服务端),每个用户类比为客户端。我们需要在都要这个平台先注册自己的账号,然后只要我们关注了别的用户,当这个用户发送视频时,抖音就会推荐给我们。
报文内容

具体我们可以分为四个部分,连接,订阅,发布,保持心跳。
MQTT服务端为了保证资源最大的利用,我们需要每隔一段事件发送一个心跳包给服务器,让服务器知道我们要继续连接,否则就有可能被服务器踢出服务
MQTT协议报文-剩余长度

剩余长度是属于固定包头部分

为128进制。剩余长度最高位如果为1,就说明发生就进位。
MQTT协议报文-剩余长度解码分析

在固定包长里,一般第一个字节是固定的,那么怎么知道剩余长度是占了几个字节呢?
假设我一段MQTT的报文:0x30,0x88,0x99,0x66,0x77
由图我们可以看到,接收完成第一个字节后,开始判断最高位是不是为1,如果为1,说明需要进位,直到某个字节的最高为0,就代表剩余长度接收完毕。
所以,剩余长度为,0x88,0x99,0x66三个字节
MQTT协议报文-CONNECT报文
3.1 CONNECT-连接服务端
由之前的表格可以我们可以看到CONNECT-连接服务端的报文由三个部分组成,有固定报头,可变报头,和负载。
3.1.1 CONNECT-固定报头

报文类型为0x10代表客户端与服务器建立连接
3.1.2 CONNECT-可变报头
CONNECT 报文的可变报头按下列次序包含四个字段:协议名(Protocol Name),协议级别(ProtocolLevel),连接标志(Connect

最低0.47元/天 解锁文章
13万+

被折叠的 条评论
为什么被折叠?



