基础——IOT(物联⽹)的七⼤通信协议
点击:
在物联⽹协议中,我们⼀般分为两⼤类,⼀类是传输协议,⼀类是通信协议。传输协议⼀般负责⼦⽹内设备间的组⽹及通信;通信协议则主要是运⾏在传统互联⽹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数据格式的解析,都是不可能的任务。
IOT的七⼤通信协议:
1. REST/HTTP(松耦合服务调⽤)
REST即表述性状态传递,是基于HTTP协议开发的⼀种通信风格。
适⽤范围:
REST/HTTP主要为了简化互联⽹中的系统架构,快速实现客户端和服务器之间交互的松耦合,降低了客户端和服务器之间的交互延迟。因此适合在物联⽹的应⽤层⾯,通过REST开放物联⽹中资源,实现服务被其他应⽤所调⽤。
特点:
(1)REST 指的是⼀组架构约束条件和原则。满⾜这些约束条件和原则的应⽤程序或设计就是RESTful。
(2)客户端和服务器之间的交互在请求之间是⽆状态的。
(3)在服务器端,应⽤程序状态和功能可以分为各种资源,它向客户端公开,每个资源都使⽤ URI 得到⼀个唯⼀的地址。所有资源都共享统⼀的界⾯,以便在客户端和服务器之间传输状态。
(4)使⽤的是标准的HTTP ⽅法,⽐如:GET、PUT、POST 和 DELETE。
REST/HTTP其实是互联⽹中服务调⽤API封装风格,物联⽹中数据采集到物联⽹应⽤系统中,在物联⽹应⽤系统中,可以通过开放REST API的⽅式,把数据服务开放出去,被互联⽹中其他应⽤所调⽤。
2. CoAP协议
CoAP (Constrained Application Protocol),受限应⽤协议,应⽤于⽆线传感⽹中协议。
适⽤范围:
CoAP是简化了HTTP协议的RESTful API,CoAP是6LowPAN协议栈中的应⽤层协议,它适⽤于在资源受限的通信的IP⽹络。
特点:
  (1)报头压缩:CoAP包含⼀个紧凑的⼆进制报头和扩展报头。它只有短短的4B的基本报头,基本报头后⾯跟扩展选项。⼀个典型的请求报头为10~20B。
  (2)⽅法和URIs:为了实现客户端访问服务器上的资源,CoAP⽀持GET、PUT、POST和DELETE等⽅法。CoAP还⽀持URIs,这是Web架构的主要特点。 
(3)传输层使⽤UDP协议:CoAP协议是建⽴在UDP协议之上,以减少开销和⽀持组播功能。它也⽀持⼀个简单的停⽌和等待的可靠性传输机制。
  (4)⽀持异步通信:HTTP对M2M(Machine-to-Machine)通信不适⽤,这是由于事务总是由客户端发起。⽽CoAP协议⽀持异步通信,这对M2M通信应⽤来说是常见的休眠/唤醒机制。
  (5)⽀持资源发现:为了⾃主的发现和使⽤资源,它⽀持内置的资源发现格式,⽤于发现设备上的资源列表,或者⽤于设备向服务⽬录公告⾃⼰的资源。它⽀持RFC5785中的格式,在CoRE中⽤/.well—known/core的路径表⽰资源描述。
  (6)⽀持缓存:CoAP协议⽀持资源描述的缓存以优化其性能。
协议主要实现:
  · libcoap(C语⾔实现)
  · Californium(java语⾔实现)
  CoAP和6LowPan,这分别是应⽤层协议和⽹络适配层协议,其⽬标是解决设备直接连接到IP⽹络,也就是IP技术应⽤到设备之间、互联⽹与设备之间的通信需求。因为IPV6技术带来巨⼤寻址空间,不光解决了未来巨量设备和资源的标识问题,互联⽹上应⽤可以直接访问⽀持IPV6的设备,⽽不需要额外的⽹关。
3. MQTT协议(低带宽)
MQTT (Message Queuing Telemetry Transport ),消息队列遥测传输,由IBM开发的即时通讯协议,相⽐来说⽐较适合物联⽹场景的通讯协议。MQTT协议采⽤发布/订阅模式,所有的物联⽹终端都通过TCP连接到云端,云端通过主题的⽅式管理各个设备关注的通讯内容,负责将设备与设备之间消息的转发。
适⽤范围:
在低带宽、不可靠的⽹络下提供基于云平台的远程设备的数据传输和监控。
特点:
  (1) 使⽤基于代理的发布/订阅消息模式,提供⼀对多的消息发布
  (2) 使⽤ TCP/IP 提供⽹络连接
  (3) ⼩型传输,开销很⼩(固定长度的头部是 2 字节),协议交换最⼩化,以降低⽹络流量
  (4) ⽀持QoS,有三种消息发布服务质量:“⾄多⼀次”, “⾄少⼀次”, “只有⼀次”
协议主要实现和应⽤:
  (1) 已经有PHP,JAVA,Python,C,C#等多个语⾔版本的协议框架
  (2) IBM Bluemix 的⼀个重要部分是其 IoT Foundaon 服务,这是⼀项基于云的 MQTT 实例
  (3) 移动应⽤程序也早就开始使⽤MQTT,如 Facebook Messenger 和com等
  MQTT协议⼀般适⽤于设备数据采集到端(Device-》Server,Device-》Gateway),集中星型⽹络架构(hub-and-spoke),不适⽤设备与设备之间通信,设备控制能⼒弱,另外实时性较差,⼀般都在秒级。
4. DDS协议(⾼可靠性、实时)
DDS(Data Distribution Service for Real-Time Systems),⾯向实时系统的数据分布服务。
适⽤范围:
分布式⾼可靠性、实时传输设备数据通信。⽬前DDS已经⼴泛应⽤于国防、民航、⼯业控制等领域。
特点:
  (1) 以数据为中⼼
  (2) 使⽤⽆代理的发布/订阅消息模式,点对点、点对多、多对多
  (3) 提供多⼤21种QoS服务质量策略
协议主要实现:
  · OpenDDS 是⼀个开源的 C++ 实现
  · OpenSplice DDS
  DDS很好地⽀持设备之间的数据分发和设备控制,设备和云端的数据传输,同时DDS的数据分发的实时效率⾮常⾼,能做到秒级内同时分发百万条消息到众多设备。DDS在服务质量(QoS)上提供⾮常多的保障途径,这也是它适⽤于国防军事、⼯业控制这些⾼可靠性、可安全性应⽤领域的原因。但
这些应⽤都⼯作在有线⽹络下,在⽆线⽹络,特别是资源受限的情况下,没有见到过实施案例。
5. AMQP协议(互操作性)
AMQP(Advanced Message Queuing Protocol),先进消息队列协议,⽤于业务系统例如PLM,ERP,MES等进⾏数据交换。
适⽤范围:
最早应⽤于⾦融系统之间的交易消息传递,在物联⽹应⽤中,主要适⽤于移动⼿持设备与后台数据中⼼的通信和分析。
特点:
  (1) Wire级的协议,它描述了在⽹络上传输的数据的格式,以字节为流
  (2) ⾯向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全
协议实现:
  · Erlang中的实现有 RabbitMQ
  · AMQP的开源实现,⽤C语⾔编写OpenAMQ
  · Apache Qpid
  · stormMQ
6. XMPP协议(即时通信)
XMPP(Extensible Messaging and Presence Protocol)可扩展通讯和表⽰协议,⼀个开源形式组织产⽣的⽹络即时通信协议。
适⽤范围:
即时通信的应⽤程序,还能⽤在⽹络管理、游戏、远端系统监控等。
特点:
  (1) 客户机/服务器通信模式
  (2) 分布式⽹络
  (3) 简单的客户端,将⼤多数⼯作放在服务器端进⾏
  (4) 标准通⽤标记语⾔的⼦集XML的数据格式
  XMPP是基于XML的协议,由于其开放性和易⽤性,在互联⽹及时通讯应⽤中运⽤⼴泛。相对HTTP,XMPP在通讯的业务流程上是更适合物联⽹系统的,开发者不⽤花太多⼼思去解决设备通讯时的业务通讯流程,相对开发成本会更低。但是HTTP协议中的安全性以及计算资源消耗的硬伤并没有得到本质的解决。
7. JMS
JMS (Java Message Service),即消息服务,这是JAVA平台中著名的消息队列协议。
开源mqtt服务器
Java消息服务应⽤程序接⼝,是⼀个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服务。
物联⽹协议的选择
  发布/订阅服务更适合物联⽹环境下通信
  DDS、MQTT、AMQP和JMS都是基于发布/订阅模式,发布/订阅框架具有服务⾃发现、动态扩展、事件过滤的特点,它解决了物联⽹系统在应⽤层的数据源快速获取、物的加⼊和退出、兴趣订阅、降低带宽流量等问题,实现物的联接在空间上松耦合(双⽅⽆需知道通信地址)、时间上松耦合和同步松耦合。
  服务质量(QoS)是物联⽹通信中的重要考虑因素
  在服务策略的帮助下,DDS能够有效地控制和管理⽹络带宽、内存空间等资源的使⽤,同时也能控制数据的可靠性、实时性和数据的⽣存时间,通过灵活使⽤这些服务质量策略,DDS不仅能在窄带的⽆线环境上,也能在宽带的有线通信环境上开发出满⾜实时性需求的数据分发系统。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。