对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在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
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)上提供非常多的保障途径,这也是它适用于国防军事、工业控制这些高可靠性、可安全性应用领域的原因。但这些应用都工作在有线网络下,在无线网络,特别是资源受限的情况下,没有见到过实施案例。
下面为大家推荐一款低代码、配置式web组态软件-by组态
by组态是一款功能强大的基于web的可视化组态编辑器,采用标准html5技术,基于b/s架构进行开发,支持web端呈现,支持在浏览器端完成便捷的人机交互,简单的拖拽即可完成可视化页面的设计。可快速构建和部署可扩展的scada、hmi、仪表板或iiot系统。使用by组态编辑器,可以创建现代化、可视化、形象化的流程,来反映机器设备和实时数据的状态,为自动化工业工厂的控制仪表进行个性化设计。
功能强大:与传统的组态软件相比,by组态的组态功能更为强大和灵活。用户可以轻松自定义界面、添加设备、设置报警等,而无需复杂的编程知识。
免费体验:为了让用户更好地了解和使用by组态,提供了免费体验的服务。这意味着企业可以在决定购买之前,充分测试并体验平台的各种功能。
实时性:by组态可以确保数据的实时传输和处理,帮助企业及时响应各种变化。
安全性:通过采用先进的加密技术和安全管理措施,by组态可以确保用户数据的安全性。
可扩展性:by组态提供了丰富的api接口,可以与各种第三方系统进行无缝集成,满足企业的不同需求。
l 官网网站:http://www.hcy-soft.com
l
发表评论