MQTT(未完结)

内容来源:视频——迈向物联网第一步——MQTT理论知识详解

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件 。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议
通信协议可以简单的理解为一种暗号
例子——对着小爱同学说:播放歌曲。小爱同学不会应答
但是如果对着小爱同学说:小爱同学,播放歌曲。小爱则会应答
这个例子中的被喊出的“小爱同学”就相当于一种通信协议

用微博举例MQTT(未完结)

MQTT(未完结)
MQTT(未完结)
通过MQTT可以实现手机一对多的通信
MQTT(未完结)
关于产品和设备topic和topic类的定义
MQTT(未完结)
MQTT(未完结)
MQTT(未完结)
相应的功能和后缀有关,如:发布——post,订阅——set
MQTT(未完结)
SDK相当于一个工具箱,想使用的时候会调用就可以了
云端服务器拥有类似的虚拟设备,它会和实际设备的数据同步。如温湿度传感器,这个虚拟设备中就会有湿度与温度两种数据,且和温湿度传感器是同步的
MQTT(未完结)
想要创建设备的话就需要创建产品。产品时设备的集合
产品拥有一些可以定义的功能。
创建好产品后可以在产品中添加设备
设备证书是云端和单片机对接的一个“暗号”
这三个信息分别是
1.ProductKey
2.DeviceName
3.DeviceSecret
只有这三个信息统一后才可以让云端中的虚拟设备和单片机数据通信
MQTT(未完结)

connect报文的写法

connect报文由三部分组成——固定报头十可变报头十有效载荷
MQTT(未完结)
分别将上述三部分内容通过变为十六进制后串联起来
MQTT(未完结)
其中固定报头两个字节
可变报头十个字节
可变报头由四部分组成
协议名(六字节)
MQTT(未完结)

协议级别(一个字节)
MQTT(未完结)

连接标志(一个字节)
MQTT(未完结)

保持连接(两个字节)
规定一段时间内保持连接
下图规定的是100秒内保持连接
MQTT(未完结)
MQTT(未完结)
有效载荷由三部分组成
MQTT(未完结)
在MQTT协议中有三部分有固定的格式
MQTT(未完结)
其中*用设备名称代替,#用ProductKey代替
在这个地方就与上图中的设备证书对应了起来
MQTT(未完结)
代替之后如下图
MQTT(未完结)
MQTT(未完结)
MQTT(未完结)
密码部分要进行特殊算法加密
MQTT(未完结)
加密后的密码如下图
MQTT(未完结)
最终得到了有效载荷

MQTT(未完结)
最终转化为十六进制
MQTT(未完结)
总结
MQTT(未完结)
MQTT(未完结)
问号中为剩余长度
connect报文中内容为客户端和服务端的**,是二者通信的基础
一般来讲,客户端——单片机,服务端——云服务器