物联网通信协议的详解及选择建议
扫描二维码
随时随地手机看文章
通信对物联网来说十分关键,无论是近距离无线传输技术还是移动通信技术,甚至是LPWAN都影响着物联网的发展。通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。那么物联网都有哪些通信协议?众多的协议该如何选择?
我们将物联网通信协议分为两大类,一类是接入协议,一类是通讯协议。接入协议一般负责子网内设备间的组网及通信(文章《常见物联网近距离无线通信技术解析》有详细介绍);通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。
本文罗列下市面上物联网协议,总结下它们各自特点、特定的物联网应用场景等。
物联网联接的问题空间
上图为物联网联接的问题空间,其中物联网的通信环境有Ethernet, Wi-Fi, RFID, NFC(近距离无线通信), Zigbee, 6LoWPAN(IPV6低速无线版本),Bluetooth, GSM, GPRS, GPS, 3G, 4G等网络,而每一种通信应用协议都有一定适用范围。AMQP、JMS、REST/HTTP都是工作在以太网,COAP协议是专门为资源受限设备开发的协议,而DDS和MQTT的兼容性则强很多。
互联网时代,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数据格式的解析,都是不可能的任务。
REST/HTTP(松耦合服务调用)
REST (RepresentaTIonal State Transfer),表征状态转换,是基于HTTP协议开发的一种通信风格,目前还不是标准;
适用范围:REST/HTTP主要为了简化互联网中的系统架构,快速实现客户端和服务器之间交互的松耦合,降低了客户端和服务器之间的交互延迟。因此适合在物联网的应用层面,通过REST开放物联网中资源,实现服务被其他应用所调用。
特点:
· REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是RESTful
· 客户端和服务器之间的交互在请求之间是无状态的
· 在服务器端,应用程序状态和功能可以分为各种资源,它向客户端公开。资源的例子有:应用程序对象、数据库记录、算法等等。每个资源都使用 URI (Universal Resource IdenTIfier) 得到一个惟一的地址。所有资源都共享统一的界面,以便在客户端和服务器之间传输状态
· 使用的是标准的 HTTP 方法,比如 GET、PUT、POST 和 DELETE
点评: REST/HTTP其实是互联网中服务调用API封装风格,物联网中数据采集到物联网应用系统中,在物联网应用系统中,可以通过开放REST API的方式,把数据服务开放出去,被互联网中其他应用所调用。
CoAP协议
· CoAP (Constrained ApplicaTIon Protocol),受限应用协议,应用于无线传感网中协议。
适用范围:CoAP是简化了HTTP协议的RESTful API,CoAP是6LowPAN协议栈中的应用层协议,它适用于在资源受限的通信的IP网络。
特点:
报头压缩:CoAP包含一个紧凑的二进制报头和扩展报头。它只有短短的4B的基本报头,基本报头后面跟扩展选项。一个典型的请求报头为10~20B。
方法和URIs:为了实现客户端访问服务器上的资源,CoAP支持GET、PUT、POST和DELETE等方法。CoAP还支持URIs,这是Web架构的主要特点。
传输层使用UDP协议:CoAP协议是建立在UDP协议之上,以减少开销和支持组播功能。它也支持一个简单的停止和等待的可靠性传输机制。
支持异步通信:HTTP对M2M(Machine-to-Machine)通信不适用,这是由于事务总是由客户端发起。而CoAP协议支持异步通信,这对M2M通信应用来说是常见的休眠/唤醒机制。
支持资源发现:为了自主的发现和使用资源,它支持内置的资源发现格式,用于发现设备上的资源列表,或者用于设备向服务目录公告自己的资源。它支持RFC5785中的格式,在CoRE中用/.well—known/core的路径表示资源描述。
支持缓存:CoAP协议支持资源描述的缓存以优化其性能。
协议主要实现:
· libcoap(C语言实现)
· Californium(java语言实现)
点评:CoAP和6LowPan,这分别是应用层协议和网络适配层协议,其目标是解决设备直接连接到IP网络,也就是IP技术应用到设备之间、互联网与设备之间的通信需求。因为IPV6技术带来巨大寻址空间,不光解决了未来巨量设备和资源的标识问题,互联网上应用可以直接访问支持IPV6的设备,而不需要额外的网关。
MQTT协议(低带宽)
MQTT (Message Queuing Telemetry Transport ),消息队列遥测传输,由IBM开发的即时通讯协议,相比来说比较适合物联网场景的通讯协议。MQTT协议采用发布/订阅模式,所有的物联网终端都通过TCP连接到云端,云端通过主题的方式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。
MQTT在协议设计时就考虑到不同设备的计算性能的差异,所以所有的协议都是采用二进制格式编解码,并且编解码格式都非常易于开发和实现。最小的数据包只有2个字节,对于低功耗低速网络也有很好的适应性。有非常完善的QOS机制,根据业务场景可以选择最多一次、至少一次、刚好一次三种消息送达模式。运行在TCP协议之上,同时支持TLS(TCP+SSL)协议,并且由于所有数据通信都经过云端,安全性得到了较好地保障。
适用范围:在低带宽、不可靠的网络下提供基于云平台的远程设备的数据传输和监控。
特点:
· 使用基于代理的发布/订阅消息模式,提供一对多的消息发布
· 使用 TCP/IP 提供网络连接
· 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量
· 支持QoS,有三种消息发布服务质量:“至多一次”, “至少一次”, “只有一次”
协议主要实现和应用:
· 已经有PHP,JAVA,Python,C,C#等多个语言版本的协议框架
· IBM Bluemix 的一个重要部分是其 IoT FoundaTIon 服务,这是一项基于云的 MQTT 实例
· 移动应用程序也早就开始使用MQTT,如 Facebook Messenger 和com等
点评:MQTT协议一般适用于设备数据采集到端(Device-》Server,Device-》Gateway),集中星型网络架构(hub-and-spoke),不适用设备与设备之间通信,设备控制能力弱,另外实时性较差,一般都在秒级。