导读 【内部分享】MQTT协议解读及使用经验 时间:2018-07-26 Q: 什么是网络连接? A: 网络连接是传输层定义的概念,在传输层

【内部分享】MQTT协议解读及使用经验

时间:2018-07-26

Q: 什么是网络连接?

A: 网络连接是传输层定义的概念,在传输层以下只存在网络数据包的相互交换。

所谓连接,其实也不是在网络上有一条真实存在的数据通道。只要通信双方在一段时间内持续保持数据包交换,就可以视为双方建立的连接并没有断开。

连接的建立是依托于TCP协议的三次握手,一旦连接已经建立完毕,通信双方就可以复用这条虚拟通道进行数据交换。如果连接保持长时间工作一直没有被中断,那么这样的TCP连接就俗称为长连接。

Message Queue Telemetry Transport ,中文直译: 消息队列遥测传输协议 。

在MQTT协议被设计出来的年代,还没有物联网这么时髦的词汇,当年叫做 遥测设备 。

MQTT协议真正开始声名鹊起的原因,是其正好恰恰踩中移动互联网发展的节拍,为消息推送场景提供了一个既简便又具有良好扩展性的现成解决方案。

可以看出,MQTT对消息头的规定十分精简, 固定头部占用空间大小仅为1个字节 ,一个最小的报文占用的空间也 只有两个字节 (带一字节的长度标识位)。

这也是MQTT协议针对不稳定及带宽低下的网络环境做出的特定设计 - - - - 尽可能地节省一切不必要的网络开销 。

Q:为什么MQTT协议需要心跳报文(PINGREQ, PINGRESP)来维护连接状态,只监控该TCP的连接状态是否可以实现目的?

A: TCP数据传输默认的超时时间过长,不符合应用层上细粒度的要求。

TCP数据传输超时的情况可分成三种: 服务端断开 、 客户端断开 、 中间网络断开 。

在前两种场景下,若断开操作是一方主动发起的,即表示为TCP连接正常结束,双方走四次挥手流程;若程序异常结束,则会触发被动断开事件,通信另一方也能立刻感知到本次连接所打开的 Socket 出现中断异常。

唯独中间网络的状态是通信双方不能掌握的。 在Linux系统下 ,TCP的连接超时由内核参数来控制,如果通信中的一方没有得到及时回复,默认会主动再尝试 6次 。如果还没有得到及时回应,那么其才会认定本次数据超时。

连带首次发包与六次重试,Linux系统下这7次发包的超时时间分别为 2的0次方 至 2的6次方 ,即1秒、2秒、4秒、8秒、16秒、32秒、64秒,一共127秒。MQTT协议认为如此长的超时时间对应用层而言粒度太大,因此其在应用层上还单独设计属于自身的心跳响应控制。常见的MQTT连接超时多被设定为 60秒 。

扩展知识 - TCP的KeepAlive机制:

由通信中的 报文标识符 ( Packet Identifier )传达。

Q:仅Publish与Pubrec能保证消息只被投递一次吗?

A: 业务上可以实现,但MQTT协议并没有如此设计,原因如下:

每个消息都会拥有属于自己的报文标识符,但如果需要两次数据交换就实现消息仅只收到一次,就需要通信双方记录下每次使用的报文标识符,并且在处理每一条消息时都需要去重处理,以防消息被重复消费。

但MQTT协议最初被设计的工作对象是轻量级物联设备,为此在协议的设计中报文标识符被约定为 可重用 ,以减少对设备性能的消耗,换回的代价不得不使用四次网络数据交换,才能确保消息正好被消费一次。

Q:两个不同客户端在发布与订阅同一Topic下的消息时,都可以提出通信Qos要求,此时以哪项为基准?

A: 伪命题,故意在分享时埋下坑,等人来踩。

两个不同客户端的通信是需要 Broker 进行中转,而不是直连。因此,通信中存在两个不同的会话,双方的Qos要求仅仅作用于它们与 Broker 之间的会话,最终的Qos基准只会向最低要求方看齐。

例:遗嘱消息的正确使用方式可参考此篇文章:

虽然可以借助 Retain Message 实现绑定一条消息至某个Topic,以达到消息的暂时保留目的。

但首先 Retain Message 并不是为存储场景而设计的,再次MQTT协议并没有对消息的持久化作出规定,也就是说Broker重启后,现有保留消息也将丢失。

Q:两种特殊消息的使用场景?

A: 遗嘱消息,多用于客户端间获取互相之间异常断线的消息通知;

保留消息,可保存 最近一条 广播通知,多用于公告栏信息的发布。

Eclipse Mosquitto :MQTT协议的最小集实现

有 EMQ , HiveMQ , RabbitMQ MQTT Adapter 等。

Qos=2 消息保障的网络I/O次数过多,如果不是必需,尽少在程序里使用此类消息。

毕竟当初其设计的目的是为了减少设备的性能占用,但若应用场景并不是物联网,而是用于手机、电脑或浏览器端等现在已不缺性能的设备上,最好在报文体中,使用UUID生成全局唯一的消息ID,然后自行在业务解析中判断此报文是否被消费过。

或者,业务方在处理消息时保证其被消费的幂等性,也可消除重复消息对系统带来的影响。

正如MQTT协议并没有依赖TCP连接状态,自己在应用层协议上实现心跳报文来控制连接状态,业务方作为MQTT协议的使用者,也不要完全依赖协议的工作状态,而是依托MQTT协议建立属于业务本身的信息汇报机制,以加强系统的稳健性。

Retain Message 可视为客户端主动拉取的行为。如果业务系统采用 HTTP+MQTT 双协议描述业务过程,主动拉取的操作也可使用 HTTP 请求替代。

作为一个长连接型的应用,上线前需要根据业务量级,评估对操作系统 端口数 与 文件描述符 的占用要求,以防服务器资源被打满。

在服务端的配置文件和客户端的连接参数中,都拥有 max_inflight_messages 此项配置,来维护 Qos=1 or 2 消息是否被成功消费的状态。

MQTT 最初被设计为物联网级的通信协议,因此此参数的默认配额较小(大多数情况下被限制到10至20)。

但如果将MQTT协议应用至手机、PC或Web端的推送场景时,硬件性能已不在是瓶颈,在实际使用中推荐把此参数调大。

Mosquitto提供Bridge功能,需要我们自己配置。

Bridge 意为桥接,当我们把两台Broker桥接在一起时,只需要修改一台Broker的配置,填上另一台Broker的运行地址。前一台Broker将作为客户端发布与订阅后一台Broker的所有Topic,实现消息互通的目的。

桥接带来的问题有以下几点:

我的建议:

Websockets协议被设计的目的是为浏览器提供一个全双工的通信协议,方便实现消息推送功能。

在Websockets协议被设计出来前,受限于HTTP协议的一问一答模型,消息的推送只能靠轮询来实现,在资源消耗与时效性保障上,均难以达到令人满意的效果。

Websockets协议复用了HTTP协议的头部信息,告知浏览器接下来的操作将触发协议升级,然后通信双方继续复用HTTP的Header,但报文内容已转变为双方均接受的新协议的格式。

Websockets协议改进了网页浏览中的消息推送的方式,因此被广泛应用在聊天、支付通知等实时性要求比较高的场合下。

MQTT协议重点在于 消息队列的实现,其对消息投递的方式作出约定,并提供一些额外的通信保障 。

MQTT可采取原生的TCP实现,也有基于Websockets的实现版本。当然后者在网络字节的利用率上,不如前者那么精简。但浏览器端无法直接使用TCP协议,所以就只能基于Websockets协议开发。

不过基于Websockets的应用也有方便之处:一是证书不需要额外配置,直接与网站共用一套基础设施;二是可使用 Nginx 等工具管理流量,与普通HTTP流量可共用一套配置方法。

MQTT非常适合入门,原因如下:

实际的应用场景远比理想中的复杂,无法一招走遍天下,必须做好取舍。

MQTT协议在这方面做得很优秀,以后工作中可以作为参考,设计好自己负责的业务系统。

常见无线通信协议详细介绍

本文主要是给大家梳理一下目前市面上常用的一些无线通讯协议标准,帮助大家了解一下不同的无线网络技术由来和各自特点。

首先说一下IEEE 802.15.4,IEEE 802.15.4是一种技术标准,目前常用的无线通讯协议大多数是在802.15.4标准规定的底层协议基础上,开发的上层协议而演变出来的,它规定了低速率无线个域网 (LR-WPAN)的 物理层 和 媒体访问控制 ,并由 IEEE 802.15 工作组维护,该工作组在2003年定义了该标准。它是 Zigbee 的基础,另外像诸如 ISA100.11a , WirelessHART ,WIA-PA , 6LoWPAN 和 SNAP 规范,每个标准规范都是通过开发IEEE 802.15.4中未定义的上层进一步扩展了标准。类似于以上几种协议标准,Lora是基于IEEE802.15.4g标准进行了上层标准的扩展定义,而IEEE802.15.4g是在IEEE802.15.4基础上对物理层和MAC层做了调整。除此之外wifi是基于IEEE802.11b标准创建的一种无线局域网技术,通常使用2.4G UHF或者5G SHF ISM射频频段。IEEE 802.15.1是由 IEEE 制定的一种蓝牙无线通信规范标准,应用于无线个人区域网(WPAN)。可以说原版IEEE802.15.1来源于蓝牙规范并与蓝牙1.1完全兼容使用。

接下来我们详细说一下目前在工业物联网和消费电子领域应用比较广泛的几种无线技术,有ZigBee、WirelessHart、WIA-PA、Lora、WiFi、蓝牙bluetooth、NB-IOT、BeeLPW-T。

ZigBee是基于IEEE802.15.4标准的低功耗局域网协议。根据国际标准规定,ZigBee技术是一种短距离、低功耗的无线通信技术。其特点是近距离、低复杂度、自组织、低功耗、低数据速率。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。ZigBee协议从下到上分别为物理层(PHY)、媒体访问控制层(MAC)、传输层(TL)、网络层(NWK)、应用层(APL)等。其中物理层和媒体访问控制层遵循IEEE 802.15.4标准的规定。在工业领域的典型应用是中国油气田生产物联网自动化采集控制设备规范中明确物理层、链路层、网络层采用ZigBee通讯协议,应用层通讯采用A11-GRM通讯协议。

WirelessHART是第一个专门为过程工业而设计的开放的可互操作的无线通讯标准,满足了工业工厂对于可靠、强劲、安全的无线通讯方式的迫切需求。作为HART7技术规范的一部分,除了保持现有HART设备、命令和工具的能力,它增加了HART协议的无线能力。国际电工委员会于2010年4月批准发布了完全国际化的WirelessHART标准IEC 62591(Ed.1.0),是第一个过程自动化领域的无线 传感器 网络国际标准。该网络同样使用运行在2.4GHz频段上的无线电IEEE802.15.4标准,采用直接序列扩频(DSSS)、通信安全与可靠的信道跳频、时分多址同步、网络上设备间延控通信等技术,WirelessHART标准协议主要应用于工厂自动化领域和过程自动化领域,弥补了高可靠、低功耗及低成本的工业无线通信市场的空缺。典型应用以Emerson为例,从2010年就已经开始供应WirelessHART兼容产品,从压力、流量、液位、温度、振动、pH测量等各类仪表变送器到网关节点等,逐渐有了品类齐全的无线类工业仪表产品系列。

WIA-PA标准是具有我国自主知识产权、符合我国工业应用国情的一种无线标准体系,2008年10月,该规范获得了国际电工委员会(IEC)全体成员国96%的投票,成为与Wireless HART被同时承认的两个国际标准化文件之一。WIA-PA同样基于IEEE802.15.4标准,通讯速率250kbps,频段2.4GHz,工业室内通讯距离200m,室外环境可达800m,数据可靠性大于99%,自适应跳频技术,避免干扰,冗余路由技术,自组织修复网络。同时支持HART命令,兼容WirelessHART标准。典型应用是中科院沈阳自动化研究所提供技术支持参与合作的在国内辽河油田、吉林油田、大庆油田、新疆油田等现场的远程油井监测控制系统。

LoRa是semtech公司创建的低功耗局域网无线协议,基于IEEE 802.15.4g标准,它最大特点就是在同样的功耗条件下比其他无线方式传播的距离更远,实现了低功耗和远距离的统一,它在同样的功耗下比传统的无线射频通信距离扩大3-5倍。Lora的工作频率在ISM 频段,包括433、868、915 MHz。

WiFi俗称无线宽带,又叫802.11b标准,工作在2.4GHz或者5GHz频段,最高传输速率能达到11Mbps,网络覆盖范围最高可达300m,适合办公室和楼内区域使用。由于WiFi技术在结构上与以太网完全一致,所以能够将WLAN集成到已有的宽带网络中,也能够将已有的宽带业务集成到WLAN中,这样,就可以利用已有的宽带有线接入资源,迅速地部署WLAN网络,形成无缝覆盖。

蓝牙是一种短距离无线通信的技术规范,它最初的目标是取代现有的掌上电脑、移动电话等各种数字设备上的有线线缆连接。在制定蓝牙规范之初,就建立了统一全球的目标,向全球公开发布工作频段为全球统一开放的2.4GHz工业、科学和医学(ISM)频段。从目前的应用看,蓝牙体积小、功率低,其应用早已不局限于计算机外设,可以集成到任何数字设备中,尤其是对数据传输速率要求不高的移动设备。蓝牙有几大特点,一是全球范围适用,无需申请许可证,二是同时可传输语音和数据,三是可以建立临时性对等连接,四是具有很好的抗干扰能力。

窄带物联网(NB-IOT)是国际移动通信标准化组织为了应对日渐强烈的物联网需求,制订的一个新的蜂窝物联网的标准(CIOT),这个新标准要实现超强覆盖、超低功耗、超低成本、超大连接。NB-IOT是一个空中接口标准,主要是用在终端与基站之间的约定,包括物理层和数据链路层的一些设计规定。NB-IoT构建于 蜂窝网络 ,只消耗大约180kHz的带宽,可直接部署于GSM网络、UMTS网络或LTE网络,以降低部署成本、实现平滑升级。

BeeLPW-T是必创科技聚焦工业场景应用,基于IEEE802.15.4标准自主开发的一种无线通信协议,具有同步精度高、功耗低、网络自恢复等优点。大容量的同步网络节点数量和多跳能力,可为工业现场的网络覆盖及节点架设提供强大的网络协议支撑。该协议具有的天然物联网基因,能以更优的功耗将传感器的感知层数据传输至云端,较往代产品效率提高近四倍。

1、更高速灵敏的反馈

基于高精度的网络同步性能,所有设备可以工作在最优的功耗状态下,保持全网秒级的响应速度,可以满足绝大多数尤其是具有边缘计算能力低功耗设备的需求。

2、更丰富的应用方式

同步网络下的节点,真正实现协同工作,赋予数据在无线应用中时间的属性,无论星型,树状等网络模式,均可满足各种设备密度、覆盖距离的应用要求。

3、更低的维护成本

协议可以随意切换周期采样及大数据采集状态,针对不同工况及应用需要,兼容有线状态分析系统的采集需求;时间同步及低功耗设计,在确保网络运行精准的同时,降低了设备的无效工作时间,使得设备整体更加简练、高效。更低的功耗,可改善设备的维护周期,降低维护难度和平均维护成本,为客户提供一个安心可靠并几近无感的防护体验。

最后附表总结一下几种典型无线技术标准的特点区别:

NB-IOTLoRaZigbeeWIFIbluetoothBeeLPW-TWIAPA

组网方式基于现有蜂窝组网基于LoRa网关基于Zigbee网关基于无线路由器基于蓝牙Mesh网关基于BeeLPW-T网关基于WIA-PA网关

网络部署方式节点节点+网关

受现场遮挡影响

节点+网关节点+路由器节点-节点节点+中继+网关节点+中继+网关

传输距离远距离,基站覆盖10公里以上远距离,可达十几公里短距离

10-100m

短距离50米10米不含中继200m不含中继200m

单网接入节点容量约20万理论约6万,实际500-5000理论6万,一般200-500个约50个理论6万理论5000通道理论6万,一般200-500个

电池续航理论10年/AA电池理论10年/AA电池理论约2年/AA电池数小时数天理论约2年/AA电池理论约2年/AA电池

成本30-70元30-40元5-15元模块约7-8s小于10元

频段License频段

运营商频段

unLicense频段

Sub-GHZ(433/868/915MHz)

unLicense频段

2.4GHz

2.4G和5G2.4GunLicense频段

2.4GHz

unLicense频段

2.4GHz

传输速度理论160kbps-250kbps

实际小于100kbps

0.3-50kbps理论250kbps,实际小于100kbps2.4G:1-11Mbps

5G:1-500Mbps

1M理论250kbps理论250kbps

网络时延6-10sTBD<1s<1s<1s<1s<1s

适合领域户外户外,工厂工厂,室内办公室,工厂移动设备工厂,车间工厂,车间

联网所需时间330ms3s10s3s3s

物联网通信协议 物联网协议mqtt物联网通信协议 物联网协议mqtt


物联网有哪七大通信协议?

物联网七大通信协议是:REST/HTTP(松耦合服务调用)、CoAP协议、JMS、XMPP协议(即时通信)、AMQP协议(互操作性)、DDS协议(高可靠性、实时)、MQTT协议(低带宽)。

特点:

1、REST即表述性状态传递,是基于HTTP协议开发的一种通信风格。主要为了简化互联网中的系统架构,快速实现客户端和服务器之间交互的松耦合,降低了客户端和服务器之间的交互延迟。

2、CoAP (Constrained Application Protocol),受限应用协议,应用于无线传感网中协议。它适用于在资源受限的通信的IP网络。

3、JMS (Java Message Service),即消息服务,这是JAVA平台中著名的消息队列协议。Java消息服务应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

4、XMPP(Extensible Messaging and Presence Protocol)可扩展通讯和表示协议,一个开源形式组织产生的网络即时通信协议。

5、AMQP(Advanced Message Queuing Protocol),先进消息队列协议,用于业务系统例如PLM,ERP,MES等进行数据交换。

6、DDS(Data Distribution Service for Real-Time Systems),面向实时系统的数据分布服务。

7、MQTT (Message Queuing Telemetry Transport ),消息队列遥测传输,由IBM开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议。

物联网智能网关数据怎么接入MES系统?支持哪些通讯协议?

XL90物联网智能网关通过企业局域网,和MES服务器通讯。 XL90智能网关和MES的通信协议,可选以下3种: 建议首选:XL/9E-RDF Redis数据交换协议; 建议次选:XL/9E-DF 数据库格式协议; 建议再次选:XL/9E-UDP 通信协议; 工业以太网通用协议:MODBUS TCP。(不太建议选择)

物联网设备接入常用的应用层协议为

在移动互联网中,最常用的应用层协议就是HTTP协议,HTTP协议同样可以用于物联网系统中。

HTTP协议采取的是请求-响应(Request-Response)的通信机制,服务器没有办法主动给客户端发送消息。

如果要实现这种消息推送,就需要借助WebSocket这种全双工的通信机制。不过对于很多计算和存储资源有限的物联网节点,不太适合使用HTTP协议。

除了HTTP协议以外,也有很多更适合于物联网应用的协议,比如MQTT、DDS、AMQP、XMPP、JMS、REST、CoAP等。

相关信息:

DDS、MQTT、AMQP和JMS都是基于发布/订阅模式,发布/订阅框架具有服务自发现、动态扩展、事件过滤的特点,它解决了物联网系统在应用层的数据源快速获取、物的加入和退出、兴趣订阅、降低带宽流量等问题,实现物的联接在空间上松耦合(双方无需知道通信地址)、时间上松耦合和同步松耦合。

MQTT、DDS、AMQP、XMPP、JMS、REST、CoAP这几种协议都已被广泛应用,并且每种协议都有至少10种以上的代码实现,都宣称支持实时的发布/订阅的物联网协议,但是在具体物联网系统架构设计时,需考虑实际场景的通信需求,选择合适的协议。

城轨系统中WLAN使用的通信协议有哪些

城轨系统中WLAN使用的通信协议有:

1、蓝牙低功耗(BLE);

2、WiFi,WiFi是另一种广泛用于物联网设备间通信的协议;

3、ZigBee,ZigBee是基于IEEE802.15.4标准的短距离无线通信协议,其工作频率是2.4GHz,数据速率为250kbps;

4、Z-Wave,Z-Wave是低功耗射频通信协议,主要用于家庭自动化系统和电子设备,如灯控制器和传感器;

5、远程广域网,远程广域网(LoRaWAN)是一种通信协议,主要用于区域、国家或全球的由电池供电的远程无线物联网设备;

6、近场通信,近场通信(NFC)是一种简单且安全的协议,可以简化物联网设备之间的双向通信。

物联网 tcp协议的特点有哪些

物联网的通信环境有Ethernet, Wi-Fi, RFID, NFC(近距离无线通信), Zigbee,

6LoWPAN(IPV6低速无线版本),Bluetooth, GSM, GPRS, GPS, 3G,

4G等网络,而每一种通信应用协议都有一定适用范围。AMQP、JMS、REST/HTTP都是工作在以太网,COAP协议是专门为资源受限设备开发的协议,而DDS和MQTT的兼容性则强很多