MQTT协议详解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值