目录
第一部分 物联网的组成
第二部分 常见物联网通信协议比较
第三部分 MQTT协议及开源实现
第四部分 IOT架构及设备接入实践
1.物联网的组成
生活中常见的共享单车、智能手环、智能家居等都是物联网的实际引用。物联网最初在互联网”。
物联网组成一般包括:以膜拜单车开锁流程为例,膜拜智能锁开锁流程: 2.识别二维码后自动向云端发送解锁请求 3.云端系统识别用户信息、校验单车情况等 4.业务处理成功后云端系统向智能锁发送解锁 5.智能锁执行开锁命令,并上报开锁结果 6.膜拜APP开锁进度更新,并开始计费 7.单车定时上报位置信息, APP端更新行驶 |
2.常见物联网通信协议比较
IOT网络中,通常设备和网络是受限的。因此在选择数据通信协议时需要考虑设备的计算、存储、能耗,窄带宽和网络不稳定等因素。常见的数据通信协议有: HTTP、 XMPP、 COAP、 MQTT。
2.1.HTTP
自1990年出现的HTTP协议作为web的标准协议已被广泛使用,在物联网中同样可以采用HTTP协议。例如手机、 PC等终端设备。但是作为适应浏览器场景的HTTP协议,并不适用于物联网的其他备。4.友好的媒体类型支持。文本、图片、视频
缺点:2.2.XMPP(Extensible Messaging and Presence Protocol可扩展消息与存在协议)
XMPP的前身是Jabber开源社区于1999年开发的Jabber协议, 用于即时通信、状态信息(比如即时通信客户端显示用户在线、忙碌、视频中等)、通讯录管理。通过类似邮箱地址的JID进行寻址(如适用范围:即时通信的应用程序,还能用在网络管理、 协同工具、档案共享、游戏、远端系统监控等。
优势: 1.去中心化,类似于邮件网络架构。 2.安全,支持SASL安全认证和TLS加密。 3.灵活,基于XML的数据格式可以自定义功能。 4.应用广泛,众多的客户端、服务端实现。 1.不支持服务质量(Qos) 2.基于文本协议的通信带来高的网络负载 3.二进制数据传输支持较差 |
2.3.CoAP (Constrained Application Protocol 受限的应用协议)
CoAP是为了让低功耗受限设备可以接入互联网,由IETF组织制定的,它借鉴了HTTP大量成功经验,同样使用请求/响应工作模式。适用范围:适用于局域网环境下一对一M2M通信。
优势:3.资源发现支持,通过观察者模式实现类似发布/订阅效果
缺点:2.4.MQTT (Message Queuing Telemetry Transport 消息队列遥测传输)
MQTT协议最初由IBM公司于1999年开发,用于将石油管道上的传感器与卫星相连接。 2014年正式成为OASIS开放标准。MQTT使用类似MQ常用的发布/订阅模式,起到应用程序解耦,异步消息,削峰填谷的作用。很多MQ中间件也支持MQTT协议,比如ActiveMQ、 RabbitMQ、 HiveMQ、 WebSphereMQ等。适用范围:在低带宽、不可靠的网络下提供基于云平台的远程设备的数据传输和监控。
优势:2.对于请求/响应模式的支持需要在应用层根据消息ID做发布主题和订阅主题之间的关联
总体来看, HTTP和XMPP网络开销大, CoAP和MQTT更适合物联网受限环境中设备的通信。从市场应用层面看, MQTT发展相对成熟、应用相对广泛,也比较适合设备的远程监控与管理。
3. MQTT协议简介及开源实现等特性,下面我们一起通过报文来了解一下吧。
3.1.MQTT工作模式
3.2.MQTT协议报文组成(基于v3.1.1)
可变头和消息体根据不同报文类型而不同, 可以看出:
1.MQTT协议最小报文仅有2个字节(只有固定头且剩余长度为1个字节),如心跳报文PINGREQ、PINGRESP
2.报文类型最多2^4=16。目前共有14种报文类型, 2个保留类型。下面着重看下连接、发布、订阅相关报文。
CONNECT报文的可变头中存在以下非常重要的标志位。
1.Clean Session作用:该标志用于指定客户端连接到服务端后,是否清除之前持久化的session信息(如果存在),并且当连接断开后是否持久化本次会话的session信息。
场景:由于网络等原因造成设备临时下线,当设备重新连接服务端时,如果上次连接Clean不丢失可以设置Clean Session=0。
Session中存储信息有哪些?场景:由于网络异常导致客户端下线,可使用临终遗嘱通知订阅了该遗嘱topic的客户端,从而进行应对处理。
当Will Flag=1,连接建立后,服务端会保存Will Message。 当网络连接关闭后(除服务端接收到DISCONNECT报文外),遗嘱消息会被发布。服务端发布遗嘱消息时按照Will Qos和Will Retain(是否保留消息)标志位发布。
3.Will Qos(服务质量)
MQTT支持三种服务质量等级:Qos0:至多一次交付消息。接收方能否接收到消息完全依赖于网络传输情况。一般用于实时性较高的情况下,如传感器发送当前温度数据,如果丢失一次数据也没有影响,因为马上会有最新的数据到来。
Qos1:至少一次交付消息。接收方可能接收到重复消息。应用于确保消息到达,并有幂等处理的系统。
Qos2:准确一次交付消息。接收方只能接收到一次消息。应用于比较严格的如计费系统,重复或者丢失数据都会导致不正确的结果。Qos级别为准。
4.RetainDUP flag是报文重传标志,在Qos1和Qos2的报文重传过程中会把DUP flag置为1。
2.不同Qos报文发送的过程(1)Qos0 消息发布流
(2)Qos1 消息发布流
(3)Qos2 消息发布流
3.5.SUBSCRIBE报文整体结构
订阅和发布都是针对topic的, topic根据”/” 分隔为不同的层级。一个PUBLISH报文中只能有一个topic,一个SUBCRIBE报文中可以有多个topic filter。 topic filter中可以使用通配符。
多层级通配符#(2)必须是主题过滤器的最后一个字符
单层级通配符-(2)可以出现在主题过滤器的任意位置,也可以和#搭配使用
特殊情况: 以#或+通配符开头的topic filter不匹配以$开头的主题。通常以$SYS/前缀的主题用于获取服务器相关的信息或者是控制API
3.6.MQTT的开源实现
1.客户端 Eclipse Paho 支持Java、 C/C++、 Python、 Go、 JavaScript、 Rust
2.服务端 mosquitto、 emqttd、 Apache ActiveMQ、 RabbitMQ
4.IOT架构及设备接入实践
4.1.IOT架构
目前,业界像BAT公司都提供了基于自家云服务的IOT接入整套解决方案,如设备接入、通4.1.设备影子
在IOT平台中除了提供MQTT服务端外,还有一个重要概念——设备影子。设备影子是一个JSON文档,用于存储设备上报状态、应用程序期望状态信息。
场景1:设备在不稳定网络中频繁上下线,应用程序可能无法获取到设备最新状态信息。令。
4.2.IOT设备接入实践2.这里使用emq broker,可以看到,服务端有一个session
3.断开客户端连接(如下图),发现服务端session还存在(如上图所示), subscription也存在