开发者学堂课程【大咖带你聊物联网:从物联网需求到MQTT协议(下)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/571/detail/7779
从物联网需求到 MQTT 协议(下)
一、理解 MQTT 协议
二、MQTT 特点
三、MQTT 传输消息分类
四、MQTT 的组成
五、实例感受 MQTT 协议的过程和特点
六、HTTP 协议与 MQTT 协议对比
一、理解 MQTT 协议
TCP/IP 参考模型可以分为四层:应用层、传输层、网络层、链路层。TCP 和 UDP 位于传输层,应用层常见的协议有HTTP、FTP、SSH 等。MQTT 协议运行于 TCP 之上,属于应用层协议,因此只要是支持 TCP/IP 协议栈的地方,都可以使用 MQTT。
实现 MQTT 协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT 协议中有三种身份:发布者( Publish )、代理( Broker )(服务器)、订阅者( Subscribe )。其中,消息的发布者和订阅者都客户端,消息代理是服务器,消息发布者可以同时是订阅者。
二、MQTT 特点
小型传输,开销很小(固定长度的头部是⒉字节),协议交换最小化,以降低网络流量。
1、使用发布/订阅消息模式,提供一对多的消息发布。
2、小型传输,开销很小(固定长度的头部是2字节),协议交换最小化,以降低网络流量。
3、有 Qo5,三种消息发布服务质量:
"至多一次,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
"至少—次",确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
4、这个轻量级协议可在严重受限的设备硬件和高延迟/带宽有限的网络上实现。
三、MQTT传输消息分类
MQTT传输的消息分为:主题( Topic )和负载( payload )两部分:
(1) Topic,可以理解为消息的类型,订阅者订阅( Subscribe )后,就会收到该主题的消息内容( payload ) ;
(2) payload ,可以理解为消息的内容,是指订阅者具体要使用的内容
四、MQTT 的组成
(1)固定头( Fixed header )。存在于所有 MQTT 数据包中,表示数据包类型及数据包的分组类标识。它是有两个字节,第一个字节 4Byte 用于传输 MQTT 的数据包类型。
包括下面这些连接、发布,指示这个包的类型,另外,后面四个字节大多数是保留的。主要是发布的时候可以定义 QS 和重传和回传的特性。
(2)可变头( Variable header )。存在于部分 MQTT 数据包中,数据包类型决定了可变头是否存在及其具体内容。MQTT 数据包中包含一个可变头,它驻位于固定的头和负载之间。
可变头的内容因数据包类型而不同,较常的应用是作为包的标识。不同的包类型,它定义的内容也不一样。
(3)消息体( Payload )。存在于部分 MQTT 数据包中,表示客户端收到的具体内容。
五、实例感受 MQTT 协议的过程和特点
进入阿里 LoT 平台那这里,首先展示一下 LoT 平台的一些特点,首先如何进入这里简单介绍一下,在产品服务里面,选择互联网,可以看到在业务服务里面有物联网平台,点击进去就可以看到物联网平台这里没有快速入门,点开设备管理里面选择产品,这里已经创建好的产品,第一次进入的时候可以创建自己的产品,可以选择技术百分高级版,这里是一个计数板,计数板之后创建之后这里产生了一个重要的一个 Productkey ,
Productkey 产品创建之后有平台分配给我了一个 key 来标注这个产品的,也就是说一个公司可能有多个产品,那么针对这个产品会给一个产品编号,这个产品编号定了之后,就可以在这个产品下添加设备。之后可以按照产品分类,刚刚建立的 Ailibox ,这个产品已经建立好了两个设备,可以继续添加我的设备。
确定之就会产生三个重要的数据,刚刚已经产生一个 ProductKey ,第二个是 devicename ,这是刚刚定义的,第三个就是 DeviceSecret ,密码是根据归属的产品号,和产品设备名称和设备密码,也就是实际上是一个设备,一个密码。
产生之后,就会多了一个设备,但是先不用这个设备,已经创建好的两个设备可以看到点击查看之后这个设备名称一样,关键的三个叫三元组,同时密码总被隐藏起来。
之后就可以用这个三元组产生接入的关键信息,然后让设备接入到平台,用两个软件分别接入阿里LT平台,第一个就是刚刚创建的第一个设备,AiliboxGPS,第二个是 Ailibox GPS2 ,点击连接之后,就可以连上平台,那连上之后的领域它就会显示成绿色,如果连接错误就会显示成红色,有错误的说明,连接之后可以看到每一个设备,它默认会产生几个 topic ,产生三个 topic ,设备具备的订阅的权限,也可以进行消息发布。下面用抓包工具来看一下 MQTT 的通信过程以及具体的协议内容。
首先打开抓包工具,同时打开,刚刚已经建立好的,能够连接到阿里 LOT 平台的这个工具,同时,这个配置参数已经按照的案例的要求已经配置好了,然后现在设备是可以连接的,先看看,然后打开抓包工具,监控 MQTT 数据,点击连接,这时候已经有 MQTT 的包发出来,然后并且有其它连接响应,命令等等,这些包信息已经发出来了,然后关闭监控,首先来看连接的包年包里面,它显示的就是包头信息、信息的形式、连接命令消息长度,但是虽然是表达了这个含义,大家可以看到,比如说第一个消息类型,还记得结构的描述,这里面只用了一个 byte 来表示。
对于处理器来说,它只是处理一个字节的信息。这样的处理方式有什么好处?
当用串口来传输数据的时候,就是一个字节一个字节的传输到一个字节,传输过来了之后,直接分解分析里面的01代码,就可以对数据进行了识别,同样的连接返回的命令,也看到这个包的内容是非常短的,每一个信息上面是它表达表达的含义,下面,就是它实际对应的一个二进制的一个字符,所以整个在传输的时候所需要的带宽开销跟处理开销都非常的小,这就是 MQTT 的具体的结构,它的优势在物联网里面是非常明显的。
六、HTTP 协议与 MQTT 协议对比
HTTP |
MQTT |
|
机密性 |
是 |
是 |
协议开销性 |
否 |
是 |
适应不稳定的网络 |
否 |
是 |
低功耗 |
否 |
是 |
服务器信息推送 |
否 |
是 |