开发者学堂课程【物联网平台开发全栈教程:MQTT 协议接入阿里云物联网平台】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/562/detail/7693
MQTT 协议接入阿里云物联网平台
内容介绍
一、主题
二、Tcp 通讯的一些规范
三、基于阿里云 IOT 平台的 MQTT 协议规范
一、主题:
基于51单片机接入阿里云 IOT 平台
主题:在 LP 平台使用 MQTT
1. MQTT 与阿里云 IOT 服务器进行 TCP 通讯
MQTT 通讯是基于 TCP 通讯方向之前也说过双向链路保障的基础之上的,首先要介绍一下如何接入 tcp 通信,其实当做 tcp 通信的时候,也是有一个简单的约束和规范。在他的文档这个位置去查看,首先先去文档这里。进入控制台之后,点产品文档就会直接在来到文档这个位置在设备端开发指南,多协议链接之后下面有一个 tcp 连接通讯。
二、Tcp 通讯的一些规范:
1.推荐使用 TLS 加密,保障 TCP 层不被截获
2.为了便于51单片机编程,采用了 TCP 直连的方法
首先是 tls 加密。tcp 通信可以进行 tls 加密,这样就保证在链路上不会被黑客或者第三方给截获或者破解。极大的增加了对方破解系统的难度。Tls 是对 tcp 加密的,就是说像电话线,分析是经过加密的是不可能说截获,之后发现就偷听到互相之间的通话内容。底层上就保证了数据的安全性和可靠性。但是这一系列视频没有使用 tls 加密,因为使用的是51单片机编程。Tls 加密还涉及到一个证书的问题,所以为了简化整个编程,采用了 tcp 直连的方法。采用这个方法其实也采取了一定的措施来保障他的可靠性,也就说使用的是一机一密的方法。
3.设备的一机一密
—机—密认证方式的安全性较高,推荐使用
(1)创建产品
(2)添加设备
添加设备 DevioetName 获得设备证书:DeviceName.
DevipeSecret
(3)产线烧录
产钱上为每台设备烧录?
ProductKey.DeviceName.
DewiceSeclGat
(这个设备是不可忽略)
(4)设备联网(wifi 联网)
设备上电联网。携带产品证书
和设备证书。请求登陆云端
(5)云端缴活
云端根据产品证书和设备证书对设备进行认证,通过后则激活该设备,否则拒绝该设备接入
3.MQTT 链接域名,华东2节点
MQTT 链接在计算域名的时候,要记住使用的是华东二节点,首先再开通互联网平台的时候,要选择一个节点的位置。在国内只能选择华东2,上海地区或者其他的都是国外的节点。所以说在做这个小工具的时候,直接就使用了上海这个节点。用户名直连使用的方法是HTC客户端域名识别的方法。这里其实介绍了相关的一些概念。
MQTT 客户端域名直连
(1)推荐使用 TLS 加密。如果使用。需要下载根证书。
(2)使用 MQTT 客户端连接服务器。自主接入可以使用开源 MQTT 客户端参考;如果您对 MQTT 不了解,请参考thttp://maqt.org 相关文档。
4.CONNECT 报文计算规则
在阿里云互联网平台,是有一个地方规定的,因为它涉及到一个加密的问题。就是通过文档的这个部分,首先就是mqtt 这里的加密密码,如果使用的加密,就需要下载证书。你的电脑可以通过安装工具来装这样一个软件,那么你的单片机或者说你的嵌入式设备也可以跑一个 mqtt 的 client,只需要符合 mqtt 的协议规范,就可以称为 mqtt 的客户端,只要单片机能够发送和理解,符合 mqtt 协议规范的数据。就可以称它为他们的信息客户端 mqtt 服务器。
连接服务器时,第一个连接域名
$(YourProductKey) . iot-as-mqtt. $ (YourRegionId).aliyunc s.com:1883
${YourProductKey}
请替换为您的产品 key.
${YourRegionld}
请参考地域和可用区替换为您的 Region ID。
在这个小工具里,是通过输入主信息来直接计算的。其实计算还是遵循一定的规则的,就是根据这个规范,先做了一个小工具,简化了一下手工计算的一个难题。之后是 MQTT 的 Connect 报文参数
MQTT 的 Connect 报文参数
sign 签名需要把以下参数按字典排序后,根据 signmethod 加签。
content 的值为提交给服务器的参数(ProductKey、DeviceName、timestamp和clientld),按照字母顺序排序,然后将参数值依次拼接。
clientld:表示客户端 ID,建议使用设备的 MAC 地址或 SN 码,64字符内。
timestamp:表示当前时间毫秒值,可以不传递。
mqttClientld:格式中 I 内为扩展参数。
signmethod:表示签名算法类型。支持 hmacmd5, hmacsha1, hmacsha256和 sha256,默认为 hmacmd5。
securemode:表示目前安全模式,可选值有2(TLS 直连模式)和3(TCP 直连模式)。
其实 Connect 报文参数需要的是三个:
Client ID
User Name
Password
需要对三元素的简单计算得来的,最后得到的每一个单片机都是唯一的。
5.MQTT 保活
小工具里面是60S
小工具保护时间是60秒,在60秒时间内,必须给服务器发送一个心跳,或者说发布一些可靠的数据过去,让服务器知道你还活着。
在进行 MQTT CONNECT 协议设置时:
(1)Connect 指令中的 KeepAlive 不能小于30秒,否则会拒绝连接。建议值为[60秒,300秒]之间。
(2)如果同一个设备三元组,同时用于多个连接,可能导致客户端互相上下线。
(3)MQTT 默认开源 SDK 会自动重连,您可以通过日志服务查看设备行为。
使用 HTTPS 认证再连接模式
MQTT 保活
本文档主要介绍基于 TCP 的 MQTT 连接,并提供了两种设备认证模式:MQTT 客户端域名直连可以使用参考本文自主接入设备。
设备端在保活时间间隔内,至少需要发送—次报文,包括 ping 请求。
如果服务端在保活时间内无法收到任何报文,物联网平台会断开连接,设备端需要进行重连。
设置保活时间的取值,建议取值范围60~300s。
一般生活中在60左右,间隔太短对服务器压力过大。
三、基于阿里云 IOT 平台的 MQTT 协议规范
1.阿里云支持 MQTT 标准协议接入,兼容3.1.1和3.1版本协议
2.不支持 will、retain msg
3.不支持 QOS2
这几个概念都在 mqtt 的中文手册有讲,这里选出的这几个,他协议上为了保障数据的可靠性,做了一个等级约定。但是阿里云不支持,因为有其他的机制来保证数据,所以说就没有支持几个,因为 qos2对服务器的压力也特别大。具体可以看一下与标准 mqtt 区别。
4.标准 MQTT 的区别
支持 MQTT 的 PUB、SUB、PING、PONG、CONNET、DISCONNECT 和 UNSUB 等报文。
支持 cleanSession。
清理绘画功能,掉线后服务器会清理有关残留的信息。服务器会在一定时间后清理状态与订阅。
不支持 will、retain msg.·不支持 QOS2,
基于原生的 MQTT topic 上支持 RRPC 同步模式,服务器可以同步调用设备并获取设备回执结果。
5.基于原生的 MQTT topic 上支持 RRPC 同步模式
当控制的时候,服务器需要可靠的知道下发的命令有没有可靠的到达设备,如果是基于技术的模式,是不知道的。虽说做了一个 rrpg,这个呢之前是用 qos2可能会来实现,但是不能一次到达。今天 rrpc 提升的模式来替代他,这样的可能对服务器的压力会小很多。
6.安全等级
支持 TLSV1、TLSV1.1和 TLSV1.2版本的协议建立安全连接。
TCP 通道基础+芯片级加密(ID2硬件集成):安全级别高。
TCP 通道基础+对称加密(使用设备私钥做对称加密):安全级别中。 TCP 方式(数据不加密):安全级别低。
7.TOPIC 规范(如果是常规的可以随便约定)
会发现每个 topic 是有约定好的,发只能这样发,收只能这样收。具体的可以看一下,不过小工具也是根据这个规则来计算出相关的操作。可以发现每一个都是和设备关联,也就是说单位的设备在整个 topic 设备都进行的设备维度的隔离。所有的 topic 进行设备维护,每个设备发消息是他发的。这样就可以防止被 topic 跨设备越权。
所以阿里云还通过 rrpc 的方式解决了数据同步的问题,通过一机一密增加设备安全性。所以 lp 平台在 mqtt 使用就十分放心的。