dongjun111111 / blog

BLOG
36 stars 5 forks source link

物联网通信协议 #40

Open dongjun111111 opened 8 years ago

dongjun111111 commented 8 years ago

物联网通信协议

概要

物联网技术发展了不少年头,但依然处在一片混沌之中。要实现真正的互联互通,通信协议是重要的一环。然而,当前的物联网通信协议可谓是百家争鸣,各有千秋,让人眼花缭乱。这些协议都适用于何场景?各有何优缺点?在物联网应用中如何选型?本次分享,曾锐将结合物联网系统建设经验,跟大家聊一聊物联网通信协议的前世今生,以及应用实践。

我想将物联网通信协议大致分为两大类,一类是接入协议,一类是通讯协议。接入协议一般负责子网内设备间的组网及通信;通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。这个分类只是为了方便,并非标准。

接入协议

目前市场上常见的接入协议有zigbee、蓝牙以及wifi协议等等

zigbee

zigbee目前在工业控制领域应用广泛,在智能家居领域也有一定应用。它有以下主要优势:

  1. 低成本。zigbee协议数据传输速率低,协议简单,所以开发成本也比较低。并且zigbee协议还免收专利费用~
  2. 低功耗。由于zigbee协议传输速率低,节点所需的发射功率仅1mW,并采用休眠+唤醒模式,功耗极低。
  3. 自组网。通过zigbee协议自带的mesh功能,一个子网络内可以支持多达65000个节点连接,可以快速实现一个大规模的传感网络。
  4. 安全性。使用crc校验数据包的完整性,支持鉴权和认证,并且采用aes-128对传输数据进行加密。

zigbee协议的最佳应用场景是无线传感网络,比如水质监测、环境控制等节点之间需要自组网以相互之间传输数据的工业场景中。在这些场景中zigbee协议的优势发挥的非常明显。目前国内外很多厂商也将zigbee运用在智能家居方案中,比如今年年初小米发布的“小米智能家居套装”。

为什么厂商会抛弃使用比较广泛的wifi及蓝牙协议,而采用zigbee呢,个人认为主要有以下原因: 1. 刚才提到zigbee协议有很强的自组网能力,可以支持几万设备,特别对于小米这种想构建智能家居生态链的企业,wifi和蓝牙的设备连接数量目前都是硬伤。

  1. 目前zigbee协议还很难轻易被破解,而其他协议在安全性上一直为人诟病。
  2. 很多智能家居产品如门磁为了使用方便,一般采用内置电池。此时zigbee的超低功耗大大提升了产品体验。

但是zigbee协议也有不足,主要就是它虽然可以方便的组网但不能接入互联网,所以zigbee网络中必须有 一个节点充当路由器的角色(比如小米智能家居套装中的智能网关),这提高了一定的成本并且让用户使用起来麻烦了一些。同时由于zigbee协议数据传输速率低,对于大流量应用如流媒体、视频等,基本是不可能。我个人认为,相对wifi和蓝牙协议这些年的快速发展和商业普及,zigbee协议尽管在技术设计和架构上拥有很大优势,但是技术更新太慢,同时在市场推广中也被竞争对手拉开了差距。后续zigbee协议在行业领域还是有很大空间,但是家用及消费领域要挑战wifi及蓝牙协议不是那么容易了。

蓝牙

蓝牙协议大家都非常熟悉了,特别是随着蓝牙4.0协议推出后发展迅速,目前已经成为智能手机的标配通信组件。蓝牙4.0之所有在近几年发展迅速,主要有以下几点原因: 1. 低功耗。我认为这个是蓝牙4.0的大杀器~使用纽扣电池的蓝牙4.0设备可运行一年以上,这对不希望频繁充电的可穿戴设备具有十分大的吸引力。当前基本世面上的可穿戴设备基本都选用蓝牙4.0方案。

  1. 智能手机的普及。近年来支持蓝牙协议基本成为智能手机的标配,用户无需购买额外的接入模块。

值得关注的是蓝牙4.2版本近期推出,加入mesh组网功能,向zigbee发出了强有力的挑战。

WiFi

wifi协议和蓝牙协议一样,目前也得到了非常大的发展。由于前几年家用wifi路由器以及智能手机的迅速普及,wifi协议在智能家居领域也得到了广泛应用。wifi协议最大的优势是可以直接接入互联网。相对于zigbee,采用wifi协议的智能家居方案省去了额外的网关,相对于蓝牙协议,省去了对手机等移动终端的依赖。

相当于蓝牙和zigbee,wifi协议的功耗成为其在物联网领域应用的一大瓶颈。但是随着现在各大芯片厂商陆续推出低功耗、低成本的wifi soc(如esp8266),这个问题也在逐渐被解决。

wifi协议和蓝牙协议谁会在物联网领域一统江湖?这是目前讨论比较多的一个话题。个人认为wifi和蓝牙的各自在技术的优势双方都可以在协议升级的过程中互相完善,目前两个协议都在往“各取所长”的方向发展。最终谁能占据主导,可能更重要的是商业力量和市场决定的。短期内各个协议肯定是适用不同的场景,都有存在的价值。

通讯协议

刚才讲的都是物联网设备接入协议,对于物联网,最重要的是在互联网中设备与设备的通讯,下面重点跟大家分享下现在物联网在internet通信中比较常见的通讯协议。

HTTP

大家知道,在互联网时代,TCP/IP协议已经一统江湖,现在的物联网的通信架构也是构建在传统互联网基础架构之上。在当前的互联网通信协议中,HTTP协议由于开发成本低,开放程度高,几乎占据大半江山,所以很多厂商在构建物联网系统时也基于http协议进行开发。包括google主导的physic web项目,都是期望在传统web技术基础上构建物联网协议标准。

HTTP协议是典型的CS通讯模式,由客户端主动发起连接,向服务器请求XML或JSON数据。该协议最早是为了适用web 浏览器的上网浏览场景和设计的,目前在PC、手机、pad等终端上都应用广泛,但是我认为其并不适用于物联网场景。在物联网场景中其有三大弊端:

由于必须由设备主动向服务器发送数据,难以主动向设备推送数据。对于单单的数据采集等场景还秒抢适用,但是对于频繁的操控场景,只能推过设备定期主动拉取的的方式,实现成本和实时性都大打折扣。

安全性不高。web的不安全相信大家都是妇孺皆知,HTTP是明文协议,在很多要求高安全性的物联网场景,如果不做很多安全准备工作(如采用https等),后果不堪设想...

不同于用户交互终端如pc、手机,物联网场景中的设备多样化,对于运算和存储资源都十分受限的设备,http协议实现、XML/JSON数据格式的解析,都是“mission impossible”

所以,我们团队在设计物联网云平台时,也是只在针对手机或PC的用户时,采用HTTP协议,针对设备的物联网接入没有采用HTTP协议。

当然,依然有不少厂商由于开发方便的原因,选择基于HTTP协议构架物联网系统,在设备资源允许的情况下,怎么避免上面提到的数据推送实时性低的问题呢?websocket是一个可行的办法。

websocket

websocket是HTML5提出的基于TCP之上的可支持全双工通信的协议标准,其在设计上基本遵循HTTP的思路,对于基于HTTP协议的物联网系统是一个很好的补充。

由于物联网设备通信的模式和互联网中的即时通讯应用非常相似,互联网中常用的及时通讯协议也被大量运用于物联网系统构建中,这其中的典型是XMPP

XMPP是基于XML的协议,其由于开放性和易用性,在互联网及时通讯应用中运用广泛。相对HTTP,XMPP在通讯的业务流程上是更适合物联网系统的,开发者不用花太多心思去解决设备通讯时的业务通讯流程,相对开发成本会更低。但是HTTP协议中的安全性以及计算资源消耗的硬伤并没有得到本质的解决。前段时间报出的黑客轻松破解的TCL洗衣机,正是采用XMPP协议。

感兴趣的朋友可以稍候详细了解下破解过程~

CoaP

上面提到的无论是HTTP、websocket还是XMPP都是在设计时根据互联网应用场景设计的,虽然很多厂商把他们应用在物联网系统中,但是必然会面临水土不服,这些协议的通病就是根本无法适用物联网设备的多样性,无法适用很多物联网设备对低功耗、低成本的需求,难以在极低资源的物联网设备中运用。能不能有协议既可以借用web技术的设计思想,同时又能适应恶劣的物联网设备运行环境呢?COAP协议应运而生了。

COAP协议的设计目标就是在低功耗低速率的设备上实现物联网通信。coap和HTTP协议一样,采用URL标示需要向发送的数据,在协议格式的设计上也基本是参考HTTP协议,非常容易理解。同时做了以下几点优化:

采用UDP而不是TCP。这省去了TCP建立连接的成本及协议栈的开销。 将数据包头部都采用二进制压缩,减小数据量以适应低网络速率场景。 发送和接受数据可以异步进行,这样提升了设备响应速度。 COAP协议就像一个针对物联网场景的http移植品,很多设计保留了HTTP协议的影子,拥有web背景的开发者也能快速上手。但是由于很多物联网设备隐藏在局域网内部,coap设备作为服务器无法被外部设备寻址,在ipv6没有普及之前,coap只能适用于局域网内部(如wifi)通信,这也很大限制了它的发展。

MQTT

MQTT协议就很好的解决了coap存在的问题。MQTT协议是由IBM开发的即时通讯协议,我认为是目前来说比较适合物联网场景的通讯协议。MQTT协议采用发布/订阅模式,所有的物联网终端都通过TCP连接连接到云端,云端通过主题的方式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。

MQTT在协议设计时就考虑到不同设备的计算性能的差异,所以所有的协议都是采用二进制格式编解码,并且编解码格式都非常易于开发和实现。

最小的数据包只有2个字节,对于低功耗低速网络也有很好的适应性。

有非常完善的QOS机制,根据业务场景可以选择最多一次、至少一次、刚好一次三种消息送达模式。

运行在TCP协议之上,同时支持TLS(TCP+SSL)协议,并且由于所有数据通信都经过云端,安全性得到了较好地保障。

总结

我们在设计物联网云平台时,经过仔细对比和分析,最终也选用了mqtt协议作为主要通讯协议。但是mqtt协议的局限性是不支持设备的直连,对于可直接连接(如同一个局域网内)的设备也必须通过云端进行消息转发。为此我们在mqtt的基础上设计了mqtt-lan,增加了局域网内的设备发现和设备通讯。近期我们也会将我们的协议设计开源,欢迎感兴趣的朋友们一起交流和改进。

大家可以发现,当前的物联网通信协议真的是百花齐放,没有任何协议能够在市场上占有统治地位。但是我认为,要实现物联网设备互联互通(不同厂商、不同平台、不同架构),关键点并不在上述接入协议或通讯协议的统一,而在于上层业务应用层协议的统一。无论是wifi、蓝牙、亦或是mqtt、http都是设备进行数据通讯和交换的通道,规定的是通讯的格式;而通讯的内容的统一才是实现互联互通的关键。如果把通信协议比作声音,光有通信协议,任何人之间还是无法交流。只有统一语言,大家才能顺畅沟通。

参考

http://ruizeng.net/iot-protocols/

xssed commented 8 years ago

nice.

dongjun111111 commented 8 years ago

@xssed 开心