物联网技术发展了不少年头,但依然处在一片混沌之中。要实现真正的互联互通,通信协议是重要的一环。然而,当前的物联网通信协议可谓是百家争鸣,各有千秋,让人眼花缭乱。
我个人将物联网通信协议大致分为两大类,一类是接入协议,一类是通讯协议。
接入协议一般负责子网内设备间的组网及通信;
通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。
这个分类只是为了方便,并非标准。
接入协议
目前市场上常见的接入协议有zigbee、蓝牙以及wifi协议等等
zigbee
zigbee目前在工业控制领域应用广泛,在智能家居领域也有一定应用。它有以下主要优势:
1.低成本。zigbee协议数据传输速率低,协议简单,所以开发成本也比较低。并且zigbee协议还免收专利费用。
2.低功耗。由于zigbee协议传输速率低,节点所需的发射功率仅1mW,并采用休眠+唤醒模式,功耗极低。
3.自组网。通过zigbee协议自带的mesh功能,一个子网络内可以支持多达65000个节点连接,可以快速实现一个大规模的传感网络。
4.安全性。使用crc校验数据包的完整性,支持鉴权和认证,并且采用aes-128对传输数据进行加密。
zigbee协议的最佳应用场景是无线传感网络,比如水质监测、环境控制等节点之间需要自组网以相互之间传输数据的工业场景中。在这些场景中zigbee协议的优势发挥的非常明显。目前国内外很多厂商也将zigbee运用在智能家居方案中。
蓝牙
蓝牙协议大家都非常熟悉了,特别是随着蓝牙4.0协议推出后发展迅速,目前已经成为智能手机的标配通信组件。蓝牙4.0之所以在近几年发展迅速,主要有以下两点原因:
1.低功耗。我认为这个是蓝牙4.0的大杀器,使用纽扣电池的蓝牙4.0设备可运行一年以上,这对不希望频繁充电的可穿戴设备具有十分大的吸引力。当前基本世面上的可穿戴设备基本都选用蓝牙4.0方案。
2.智能手机的普及。近年来支持蓝牙协议基本成为智能手机的标配,用户无需购买额外的接入模块。
WiFi
wifi协议和蓝牙协议一样,目前也得到了非常大的发展。由于前几年家用wifi路由器以及智能手机的迅速普及,wifi协议在智能家居领域也得到了广泛应用。wifi协议最大的优势是可以直接接入互联网。相对于zigbee,采用wifi协议的智能家居方案省去了额外的网关,相对于蓝牙协议,省去了对手机等移动终端的依赖。
相当于蓝牙和zigbee,wifi协议的功耗成为其在物联网领域应用的一大瓶颈。但是随着现在各大芯片厂商陆续推出低功耗、低成本的wifi soc(如esp8266),这个问题也在逐渐被解决。
通讯协议
以上讲的都是物联网设备接入协议,对于物联网,最重要的是在互联网中设备与设备的通讯,下面重点跟大家分享下现在物联网在internet通信中比较常见的通讯协议。
HTTP
HTTP协议是典型的CS通讯模式,由客户端主动发起连接,向服务器请求XML或JSON数据。该协议最早是为了适用web 浏览器的上网浏览场景和设计的,目前在PC、手机、pad等终端上都应用广泛,但是我认为其并不适用于物联网场景。在物联网场景中其有三大弊端:
1.由于必须由设备主动向服务器发送数据,难以主动向设备推送数据。对于单单的数据采集等场景还秒抢适用,但是对于频繁的操控场景,只能通过设备定期主动拉取的的方式,实现成本和实时性都大打折扣。
2.安全性不高。web的不安全相信大家都是妇孺皆知,HTTP是明文协议,在很多要求高安全性的物联网场景,如果不做很多安全准备工作(如采用https等),后果不堪设想...
3.不同于用户交互终端如pc、手机,物联网场景中的设备多样化,对于运算和存储资源都十分受限的设备,http协议实现、XML/JSON数据格式的解析,都是“mission impossible”。
websocket
websocket是HTML5提出的基于TCP之上的可支持全双工通信的协议标准,其在设计上基本遵循HTTP的思路,对于基于HTTP协议的物联网系统是一个很好的补充。
CoaP
COAP协议的设计目标就是在低功耗低速率的设备上实现物联网通信。coap和HTTP协议一样,采用URL标示需要向发送的数据,在协议格式的设计上也基本是参考HTTP协议,非常容易理解。同时做了以下几点优化:
采用UDP而不是TCP。这省去了TCP建立连接的成本及协议栈的开销。
将数据包头部都采用二进制压缩,减小数据量以适应低网络速率场景。
发送和接受数据可以异步进行,这样提升了设备响应速度。
MQTT
MQTT在协议设计时就考虑到不同设备的计算性能的差异,所以所有的协议都是采用二进制格式编解码,并且编解码格式都非常易于开发和实现。
MQTT最小的数据包只有2个字节,对于低功耗低速网络也有很好的适应性。
MQTT有非常完善的QOS机制,根据业务场景可以选择最多一次、至少一次、刚好一次三种消息送达模式。
MQTT运行在TCP协议之上,同时支持TLS(TCP+SSL)协议,并且由于所有数据通信都经过云端,安全性得到了较好地保障。