HTTP、websocket、XMPP、COAP、MQTT和DDS协议对⽐对于物联⽹,最重要的是在互联⽹中设备与设备的通讯,现在物联⽹在internet通信中⽐较常见的通讯协议包括:HTTP、websocket、XMPP、COAP、MQTT
1、HTTP和websocket
在互联⽹时代,TCP/IP协议已经⼀统江湖,现在的物联⽹的通信架构也是构建在传统互联⽹基础架构之上。在当前的互联⽹通信协议
中,HTTP协议由于开发成本低,开放程度⾼,⼏乎占据⼤半江⼭,所以很多⼚商在构建物联⽹系统时也基于http协议进⾏开发。包括google主导的physic web项⽬,都是期望在传统web技术基础上构建物联⽹协议标准。
HTTP协议是典型的CS通讯模式,由客户端主动发起连接,向服务器请求XML或JSON数据。该协议最早是为了适⽤web浏览器的上⽹浏览场景和设计的,⽬前在PC、⼿机、pad等终端上都应⽤⼴泛,但并不适⽤于物联⽹场景。在物联⽹场景中其有三⼤弊端:
1. 由于必须由设备主动向服务器发送数据,难以主动向设备推送数据。对于单单的数据采集等场景还勉强适⽤,但是对于频繁的操控场景,只能推过设备定期主动拉取的的⽅式,实现成本和实时性都⼤打折扣。
2. 安全性不⾼。web的不安全都是妇孺皆知,HTTP是明⽂协议,在很多要求⾼安全性的物联⽹场景,如果不做很多安全准备⼯作(如采⽤https等),后果不堪设想…
3. 不同于⽤户交互终端如pc、⼿机,物联⽹场景中的设备多样化,对于运算和存储资源都⼗分受限的设备,http协议实现、XML/JSON数据格式的解析,都是“mission impossible”
HTTP的连接问题,HTTP客户端和服务器之间的交互是采⽤请求/应答模式,在客户端请求时,会建⽴⼀个HTTP连接,然后发送请求消息,服务端给出应答消息,然后连接就关闭了。(后来的HTTP1.1⽀持持久连接)
因为TCP连接的建⽴过程是有开销的,如果使⽤了SSL/TLS开销就更⼤。
在浏览器⾥,⼀个⽹页包含许多资源,包括HTML,CSS,JavaScript,图⽚等等,这样在加载⼀个⽹页时要同时打开连接到同⼀服务器的多个连接。
HTTP消息头问题,现在的客户端会发送⼤量的HTTP消息头,由于⼀个⽹页可能需要50-100个请求,就会有相当⼤的消息头的数据量。
HTTP通信⽅式问题,HTTP的请求/应答⽅式的会话都是客户端发起的,缺乏服务器通知客户端的机制,在需要通知的场景,如聊天室,游戏,客户端应⽤需要不断地轮询服务器。
当然,依然有不少⼚商由于开发⽅便的原因,选择基于HTTP协议构架物联⽹系统,在设备资源允许的情况下,怎么避免上⾯提到的数据推送实时性低的问题呢?
websocket是⼀个可⾏的办法。websocket是HTML5提出的基于TCP之上的可⽀持全双⼯通信的协议标准,其在设计上基本遵循HTTP的思路,对于基于HTTP协议的物联⽹系统是⼀个很好的补充。
但是问题是:http+websocket的⽅式,协议开销代价太⼤。如果让⼀个单⽚机去实现这样的协议,性能会很吃⼒。
2、XMPP
由于物联⽹设备通信的模式和互联⽹中的即时通讯应⽤⾮常相似,互联⽹中常⽤的即时通讯协议也被⼤量运⽤于物联⽹系统构建中,这其中的典型是XMPP。
XMPP是基于XML的协议,由于其开放性和易⽤性,在互联⽹及时通讯应⽤中运⽤⼴泛。相对HTTP,XMPP在通讯的业务流程上是更适合物联⽹系统的,开发者不⽤花太多⼼思去解决设备通讯时的业务通讯流程,相对开发成本会更低。但是HTTP协议中的安全性以及计算资源消耗的硬伤并没有得到本质的解决。前段时间报出的⿊客轻松破解的TCL洗⾐机,正是采⽤XMPP协议。
⽆论是HTTP、websocket还是XMPP,在设计时都是根据互联⽹应⽤场景设计的,虽然很多⼚商把他
们应⽤在物联⽹系统中,但是必然会⽔⼟不服,这些协议的通病就是根本⽆法适⽤物联⽹设备的多样性,⽆法适⽤很多物联⽹设备对低功耗、低成本的需求,难以在极低资源的物联⽹设备中运⽤。能不能有协议既可以借⽤web技术的设计思想,同时⼜能适应恶劣的物联⽹设备运⾏环境呢?
3、COAP
开源mqtt服务器
COAP协议的设计⽬标就是在低功耗低速率的设备上实现物联⽹通信。coap和HTTP协议⼀样,采⽤URL标⽰需要发送的数据,在协议格式的设计上也基本是参考HTTP协议,⾮常容易理解。同时做了以下⼏点优化:
1. 采⽤UDP⽽不是TCP。这省去了TCP建⽴连接的成本及协议栈的开销。
2. 将数据包头部都采⽤⼆进制压缩,减⼩数据量以适应低⽹络速率场景。
3. 发送和接收数据可以异步进⾏,这样提升了设备响应速度。
COAP协议就像⼀个针对物联⽹场景的http移植品,很多设计保留了HTTP协议的影⼦,拥有web背景的开发者也能快速上⼿。但是由于很多物联⽹设备隐藏在局域⽹内部,coap设备作为服务器⽆法被外部设备寻址,在ipv6没有普及之前,coap只能适⽤于局域⽹内部(如wifi)通信,这也很⼤限制了它的发展。
4、MQTT协议
MQTT协议就很好的解决了coap存在的问题。MQTT协议是由IBM开发的即时通讯协议,相⽐来说⽐较适合物联⽹场景的通讯协议。MQTT 协议采⽤发布/订阅模式,所有的物联⽹终端都通过TCP连接到云端,云端通过主题的⽅式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。
1.使⽤发布/订阅消息模式,提供⼀对多的消息发布,解除应⽤程序耦合。
2.对负载内容屏蔽的消息传输。
3.使⽤ TCP/IP 提供⽹络连接。
4.有三种消息发布服务质量:
"⾄多⼀次",消息发布完全依赖底层 TCP/IP ⽹络。会发⽣消息丢失或重复。这⼀级别可⽤于如下情况,环境传感器数据,丢失⼀次读记录⽆所谓,因为不久后还会有第⼆次发送。
"⾄少⼀次",确保消息到达,但消息重复可能会发⽣。
"只有⼀次",确保消息到达⼀次。这⼀级别可⽤于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
5.⼩型传输,开销很⼩(固定长度的头部是 2 字节),协议交换最⼩化,以降低⽹络流量。
6.使⽤ Last Will 和 Testament 特性通知有关各⽅客户端异常中断的机制。
MQTT在协议设计时就考虑到不同设备的计算性能的差异,所以所有的协议都是采⽤⼆进制格式编解码,并且编解码格式都⾮常易于开发和实现。最⼩的数据包只有2个字节,对于低功耗低速⽹络也有很好的适应性。有⾮常完善的QOS机制,根据业务场景可以选择最多⼀次、⾄少⼀次、刚好⼀次三种消息送达模式。运⾏在TCP协议之上,同时⽀持TLS(TCP+SSL)协议,并且由于所有数据通信都经过
云端,安全性得到了较好地保障。
当前的物联⽹通信协议真的是百花齐放,没有任何协议能够在市场上占有统治地位。但要实现物联⽹设备互联互通(不同⼚商、不同平台、不同架构),关键点并不在上述接⼊协议或通讯协议的统⼀,⽽在于上层业务应⽤层协议的统⼀。⽆论是wifi、蓝⽛、亦或是mqtt、http都是设备进⾏数据通讯和交换的通道,规定的是通讯的格式;⽽通讯的内容的统⼀才是实现互联互通的关键。
5、DDS
DDS(Data Distribution Service for Real-Time Systems),⾯向实时系统的数据分布服务,这是⼤名⿍⿍的OMG组织提出的协议,其权威性应该能证明该协议的未来应⽤前景。
适⽤范围:分布式⾼可靠性、实时传输设备数据通信。⽬前DDS已经⼴泛应⽤于国防、民航、⼯业控制等领域。
特点:
·  以数据为中⼼
·  使⽤⽆代理的发布/订阅消息模式,点对点、点对多、多对多
·  提供多⼤21种QoS服务质量策略
协议主要实现:
·  OpenDDS 是⼀个开源的 C++ 实现
·  OpenSplice DDS
DDS很好地⽀持设备之间的数据分发和设备控制,设备和云端的数据传输,同时DDS的数据分发的实时效率⾮常⾼,能做到秒级内同时分发百万条消息到众多设备。DDS在服务质量(QoS)上提供⾮常多的保障途径,这也是它适⽤于国防军事、⼯业控制这些⾼可靠性、可安全性应⽤领域的原因。但这些应⽤都⼯作在有线⽹络下,在⽆线⽹络,特别是资源受限的情况下,没有见到过实施案例。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。