盘点物联网@@的@@七大通信协议@@@@

通信对@@物联网@@来说十分常用@@且关键@@,无论是@@近距离无线传输技术@@还是@@移动通信技术@@@@,都影响着物联网@@的@@发展@@。而@@在@@通信中@@,通信协议@@尤其重要@@,是@@指双方实体完成通信或@@服务@@所必须遵循的@@规则和@@约定@@。那么物联网@@都有哪些通信协议@@@@?你都了解吗@@?

  我们将物联网@@协议@@分为两大类@@,一类是@@传输协议@@@@,一类是@@通信协议@@@@。传输协议@@一般负责子网@@内设备@@间的@@组网@@及通信@@,之前我们已经为大家做了一次的@@科普@@,文章@@《物联网@@常见的@@无线传输协议@@类型@@》有详细介绍@@。通信协议@@则主要是@@运行在@@@@传统互联网@@@@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开放物联网@@中资源@@,实现@@服务@@被其他应用@@所调用@@@@。

  特点@@:

  1. REST 指的@@是@@一组架构约束条件和@@原则@@。满足这些约束条件和@@原则的@@应用@@程序或@@设计就是@@@@RESTful

  2.客户端和@@服务@@器之间的@@交互在@@请求之间是@@无状态的@@@@

  3. 在@@服务@@器端@@,应用@@程序状态和@@功能可以分为各种@@资源@@,它向客户端公开@@。资源的@@例子有@@:应用@@程序对@@象@@、数据@@库记录@@、算法等@@等@@@@。每个资源都使用@@@@@@ URI (Universal Resource Identifier) 得到一个惟一的@@地址@@。所有资源都共享统一的@@界面@@,以便在@@客户端和@@服务@@器之间传输状态@@

  4.使用@@@@的@@是@@标准@@的@@@@ 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协议@@支持@@资源描述的@@缓存以优化其性能@@。

  协议@@主要实现@@@@:
  1. libcoap(C语言实现@@@@)
  2.Californium(java语言实现@@@@)

  点评@@:CoAP和@@6LowPan,这分别是@@应用@@层协议@@和@@网@@络@@适配层协议@@@@,其目标是@@解决设备@@直接连接到@@IP网@@络@@,也就是@@@@IP技术@@应用@@到设备@@之间@@、互联网@@与设备@@之间的@@通信需求@@。因为@@IPV6技术@@带来巨大寻址空间@@@@,不光解决了未来巨量设备@@和@@资源的@@标识问题@@,互联网@@上应用@@可以直接访问支持@@@@IPV6的@@设备@@@@,而@@不需要额外的@@网@@关@@。

MQTT协议@@(低带宽@@)
  MQTT (Message Queuing Telemetry Transport ),消息队列@@遥测传输@@,由@@IBM开发的@@即时通讯协议@@@@,相比来说比较适合物联网@@场景的@@通讯协议@@@@。MQTT协议@@采用@@发布@@@@/订阅@@模式@@,所有的@@物联网@@终端都通过@@@@TCP连接到云端@@,云端通过@@主题的@@方式@@管理各个设备@@关注的@@通讯内容@@,负责将设备@@与设备@@之间消息的@@转发@@。

  MQTT在@@协议@@设计时就考虑到不同设备@@的@@计算性能的@@差异@@,所以所有的@@协议@@@@都是@@采用@@二进制格式编解码@@,并且编解码格式都非常易于开发和@@实现@@@@。最小的@@数据@@包只有@@2个字节@@@@,对@@于低功耗低速网@@络@@也有很好的@@适应性@@。有非常完善的@@@@QOS机制@@,根据业务场景可以选择最多一次@@、至少一次@@、刚好一次三种@@消息送达模式@@。运行在@@@@TCP协议@@之上@@,同时@@支持@@@@TLS(TCP+SSL)协议@@,并且由@@于所有数据@@通信都经过云端@@,安全@@性得到了较好地保障@@。

  适用@@范围@@:在@@低带宽@@@@、不可靠的@@网@@络@@下提供基于云平台的@@远程设备@@的@@数据@@传输和@@监控@@。

  特点@@:
  1.使用@@@@基于代理的@@发布@@@@/订阅@@消息模式@@,提供一对@@多的@@消息发布@@@@
  2.使用@@@@ TCP/IP 提供网@@络@@连接@@
  3.小型传输@@,开销很小@@(固定长度的@@头部是@@@@ 2 字节@@),协议@@交换最小化@@,以降低网@@络@@流量@@
  4.支持@@QoS,有三种@@消息发布@@服务@@质量@@@@:“至多一次@@”, “至少一次@@”, “只有一次@@”

  协议@@主要实现@@@@和@@应用@@@@:
  1.已经有@@PHP,JAVA,Python,C,C#等@@多个语言版本的@@协议@@@@框架@@
  2.IBM Bluemix 的@@一个重要部分是@@其@@ IoT Foundation 服务@@,这是@@@@一项基于云的@@@@ MQTT 实例@@
  3.移动应用@@程序也早就开始使用@@@@@@MQTT,如@@ Facebook Messenger 和@@com等@@

  点评@@:MQTT协议@@一般适用@@于设备@@数据@@采集到端@@(Device-》Server,Device-》Gateway),集中星型网@@络@@架构@@(hub-and-spoke),不适用@@设备@@与设备@@之间通信@@,设备@@控制能力弱@@,另外实时@@性较差@@,一般都在@@秒级@@。

DDS协议@@(高可靠性@@@@、实时@@)
  DDS(Data Distribution Service for Real-Time Systems),面向实时@@系统的@@数据@@分布服务@@@@,这是@@@@大名鼎鼎的@@@@OMG组织提出的@@@@协议@@@@,其权威性应该能证明该协议@@的@@@@未来应用@@前景@@。

  适用@@范围@@:分布式高可靠性@@@@@@、实时@@传输设备@@数据@@通信@@。目前@@DDS已经广泛应用@@于国防@@、民航@@、工业控制等@@领域@@。

  特点@@:
  1.以数据@@为中心@@
  2.使用@@@@无代理的@@发布@@@@/订阅@@消息模式@@,点对@@点@@、点对@@多@@、多对@@多@@
  3.提供多大@@21种@@QoS服务@@质量@@策略@@

  协议@@主要实现@@@@:
  1.OpenDDS 是@@一个@@开源的@@@@ C++ 实现@@
  2.OpenSplice DDS

  点评@@:DDS很好地支持@@设备@@之间的@@数据@@分发和@@设备@@控制@@,设备@@和@@云端的@@数据@@传输@@,同时@@DDS的@@数据@@分发的@@实时@@效率非常高@@,能做到秒级内同时@@分发百万条消息到众多设备@@@@。DDS在@@服务@@质量@@@@(QoS)上提供非常多的@@保障途径@@,这也是@@它适用@@于国防军事@@、工业控制这些高可靠性@@@@@@、可安全@@性应用@@领域的@@原因@@。但这些应用@@都工作在@@有线网@@络@@下@@,在@@无线网@@络@@@@,特别是@@资源受限的@@情况下@@,没有见到过实施案例@@。

AMQP协议@@(互操作性@@)
  AMQP(Advanced Message Queuing Protocol),先进消息队列@@协议@@@@,这是@@@@OASIS组织提出的@@@@,该组织曾提出@@OSLC(Open Source Lifecyle)标准@@,用@@于业务系统例如@@@@PLM,ERP,MES等@@进行数据@@交换@@。

  适用@@范围@@:最早应用@@于金融系统之间的@@交易消息传递@@,在@@物联网@@应用@@中@@,主要适用@@于移动手持设备@@与后台数据@@中心的@@通信和@@分析@@。

  特点@@:
  1.Wire级的@@协议@@@@@@,它描述了在@@网@@络@@上传输的@@数据@@的@@格式@@,以字节@@为流@@
  2.面向消息@@、队列@@、路由@@@@(包括@@点对@@点@@和@@发布@@@@/订阅@@)、可靠性@@、安全@@

  协议@@实现@@@@:
  1.Erlang中的@@实现@@有@@ RabbitMQ
  2.AMQP的@@开源实现@@@@,用@@C语言编写@@OpenAMQ
  3.Apache Qpid
  4.stormMQ

XMPP协议@@(即时通信@@)
  XMPP(Extensible Messaging and Presence Protocol)可扩展通讯和@@表示协议@@@@,XMPP的@@前身是@@@@Jabber,一个开源形式组织产生的@@网@@络@@即时通信@@协议@@@@。XMPP目前@@被@@IETF国际标准@@组织完成了标准@@化工作@@。

  适用@@范围@@:即时通信@@的@@应用@@程序@@,还能用@@在@@网@@络@@管理@@、内容供稿@@、协同工具@@、档案共享@@、游戏@@、远端系统监控等@@@@。

  特点@@:
  1.客户机@@/服务@@器通信模式@@
  2.分布式网@@络@@@@
  3.简单的@@客户端@@,将大多数工作放在@@服务@@器端@@进行@@
  4.标准@@通用@@标记语言的@@子集@@XML的@@数据@@格式@@

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

JMS (Java Message Service)
  JMS (Java Message Service),JAVA消息服务@@@@,这是@@@@JAVA平台中著名的@@消息队列@@协议@@@@。

  Java消息服务@@@@(Java Message Service)应用@@程序接口@@,是@@一个@@Java平台中关于面向消息@@中间件@@(MOM)的@@API,用@@于在@@两个应用@@程序之间@@,或@@分布式系统中发送消息@@,进行异步通信@@。Java消息服务@@@@是@@一个@@与具体平台无关的@@@@API,绝大多数@@MOM提供商都对@@@@JMS提供支持@@@@。

  JMS是@@一种@@与厂商无关的@@@@ API,用@@来访问消息收发系统消息@@,它类似于@@JDBC(Java Database Connectivity)。这里@@,JDBC 是@@可以用@@来访问许多不同关系数据@@库的@@@@ API,而@@ JMS 则提供同样与厂商无关的@@访问方法@@@@,以访问消息收发服务@@@@。许多厂商都支持@@@@ JMS,包括@@ IBM 的@@ MQSeries、BEA的@@ Weblogic JMS service和@@ Progress 的@@ SonicMQ。 JMS 能够通过@@消息收发服务@@@@(有时称为消息中介程序或@@路由@@@@器@@)从一个@@ JMS 客户机@@向另一个@@ JMS客户机@@发送消息@@。消息是@@@@ JMS 中的@@一种@@类型对@@象@@,由@@两部分组成@@:报头和@@消息主体@@。报头由@@路由@@@@信息以及有关该消息的@@元数据@@组成@@。消息主体则携带着应用@@程序的@@数据@@或@@有效负载@@。根据有效负载的@@类型来划分@@,可以将消息分为几种@@类型@@,它们分别携带@@:简单文本@@(TextMessage)、可序列化的@@对@@象@@ (ObjectMessage)、属性集合@@ (MapMessage)、字节@@流@@ (BytesMessage)、原始值流@@ (StreamMessage),还有无有效负载的@@消息@@ (Message)。

物联网@@协议@@对@@比@@

物联网@@协议@@对@@比@@

协议@@应用@@的@@侧重方向@@
  MQTT、 DDS、 AMQP、XMPP、 JMS、 REST、 CoAP这几种@@协议@@都已被广泛应用@@@@,并且每种@@协议@@都有至少@@10种@@以上的@@代码实现@@@@,都宣称支持@@实时@@的@@发布@@@@/订阅@@的@@物联网@@协议@@@@,但是@@@@在@@具体物联网@@系统架构设计时@@,需考虑实际场景的@@通信需求@@,选择合适的@@协议@@@@@@。

  以智能家居为例@@,说明下这些协议@@侧重应用@@方向@@。智能家居中智能灯光控制@@,可以使用@@@@@@XMPP协议@@控制灯的@@开关@@;智能家居的@@电力供给@@,发电厂的@@发动机组的@@监控可以使用@@@@@@@@DDS协议@@;当电力输送到千家万户时@@,电力线的@@巡查和@@维护@@,可以使用@@@@@@MQTT协议@@;家里的@@所有电器的@@电量消耗@@,可以使用@@@@@@AMQP协议@@,传输到云端或@@家庭网@@关中进行分析@@;最后用@@户想把自家的@@能耗查询服务@@公布到互联网@@上@@,那么可以使用@@@@@@@@REST/HTTP来开放@@API服务@@。

物联网@@协议@@的@@@@选择@@

  1.发布@@/订阅@@服务@@更适合物联网@@环境下通信@@
  DDS、MQTT、AMQP和@@JMS都是@@基于@@发布@@@@/订阅@@模式@@,发布@@/订阅@@框架具有服务@@自发现@@、动态扩展@@、事件过滤的@@特点@@@@,它解决了物联网@@系统在@@应用@@层的@@数据@@源快速获取@@、物的@@加入和@@退出@@、兴趣订阅@@@@、降低带宽@@流量等@@问题@@,实现@@物的@@联接在@@空间@@上松耦合@@(双方无需知道通信地址@@)、时间上松耦合和@@同步松耦合@@。

  2.服务@@质量@@(QoS)是@@物联网@@通信中的@@重要考虑因素@@
  在@@服务@@策略的@@帮助下@@,DDS能够有效地控制和@@管理网@@络@@带宽@@、内存空间@@等@@资源的@@使用@@@@@@,同时@@也能控制数据@@的@@可靠性@@@@、实时@@性和@@数据@@的@@生存时间@@,通过@@灵活使用@@@@这些服务@@质量@@策略@@@@,DDS不仅能在@@窄带的@@无线环境上@@,也能在@@宽带的@@有线通信环境上开发出满足实时@@性需求的@@数据@@分发系统@@。

文章@@来源@@:搜狐公众平台@@