LoRa、NB-IoT以及Zigbee、蓝牙主要解决的是物体互联以及接入网络的问题,从网络协议分层来看,基本上都属于数据链路层协议。对于物联网的数据交换,主要依靠应用层协议来解决。

移动互联网中,最常用的应用层协议就是HTTP协议,HTTP协议同样可以用于物联网系统中。HTTP协议采取的是请求-响应(Request-Response)的通信机制,服务器没有办法主动给客户端发送消息。如果要实现这种消息推送,就需要借助WebSocket这种全双工的通信机制。

不过对于很多计算和存储资源有限的物联网节点,不太适合使用HTTP协议。除了HTTP协议以外,也有很多更适合于物联网应用的协议,比如MQTT、CoAP、AMQP、STOMP等。

blob.png

各个物联网软件平台最常使用的物联网协议

发布-订阅机制

很多物联网应用层协议都是基于发布-订阅(Publish-Subscribe)机制,这种机制非常适合物联网系统应用。MQTT协议、STOMP协议、AMQP协议以及DDS协议都属于这种发布-订阅的机制。

每个传感器节点,采集的数据需要上传到网络,相当于是一个消息的发布,这个消息需要基于某个主题,比如传感器的类型。所有关心这个主题的节点,都可以通过订阅这个主题的消息,实时获取最新的数据。

blob.png

消息的发布和订阅是基于某个主题的,实现机制一般依赖于消息队列

MQTT协议

消息队列遥测传输协议(MQTT : Message Queuing Telemetry Transport)是为大量计算能力有限,工作带宽有限、网络环境不可靠的传感器或控制器而设计的协议。

blob.png

MQTT协议基于TCP协议

MQTT协议原来是IBM开发的一个即时通讯协议,基于TCP协议实现。MQTT客户端需要通过消息代理(MQTT Broker)来进行消息的发布和订阅。

MQTT协议的兼容性非常好,几乎支持所有平台,可以把各种物联网设备都连接起来。所以MQTT协议也是目前应用最广泛的物联网应用层协议。

CoAP协议

受限应用协议(CoAP:Constrained Application Protocol)是6LowPAN协议栈中的应用层协议,基于REST(表述性状态传递)架构风格,支持REST交互。

blob.png

CoAP协议基于UDP协议

CoAP基于UDP协议,其设计初衷就是尽可能地方便地转换为HTTP协议。CoAP让用户可以像使用HTTP协议一样,在资源受限的物联网设备中使用CoAP协议。

AMQP协议

高级消息队列协议(AMQP:Advanced Message Queuing Protocol)是一个提供统一消息服务的应用层标准高级消息队列协议,为面向消息的中间件设计。

blob.png

AMQP的工作原理

AMQP的工作原理与MQTT类似,也是基于发布-订阅机制。消息代理Broker的交换机组件(Exchange)会把接收到的消息,根据消息的主题,分配到不同的队列中,以便订阅者接收。

RabbitMQ就是在AMQP协议基础上实现的一个消息系统,遵循Mozilla Public License开源协议。RabbitMQ在互联网应用中常被用作消息服务器。

STOMP协议

简单(流)文本定向消息协议(STOMP: Simple (or Streaming) Text Orientated Messaging Protocol),提供了一个可互操作的连接格式,允许STOMP客户端与任意STOMP消息代理(Broker)进行交互。

STOMP协议由于设计简单,易于开发客户端,因此在多种语言和多种平台上得到广泛地应用。当前非常流行的开源消息服务器ActiveMQ、Apollo、RabbitMQ(需要插件)都支持STOMP协议。

blob.png

ActiveMQ支持TCP、XMPP、STOMP等协议进行消息传输

STOMP基于TCP协议,客户端和服务器之间的通信是通过“帧”(Frame)来实现,每个帧由多“行”(Line)组成。STOMP协议定义了帧结构。

blob.png

Stomp帧格式

STOMP帧第一行是命令,紧跟着键值对形式的Header内容。然后是一个空行,最后是Body内容。

数据分发服务DDS

数据分发服务(DDS:Data Distribution Service for Real-Time Systems),是面向实时系统的数据分布服务,是由OMG组织提出的协议。

blob.png

DDS的数据分发的实时效率非常高,能做到秒级内同时分发百万条消息到众多设备。DDS在服务质量(QoS)上提供非常多的保障途径,因此适用于国防军事、工业控制这些高可靠性、可安全性应用领域的原因。不过DDS目前还只限于在有线网络部署,无线网络的可靠性可能满足不了DDS的QoS要求。

总结

上面列出了一些比较常见的物联网应用层协议,但并不全面,还有一些相对更加小众的协议,公开资料也比较少。目前很难说哪种物联网应用层协议会实现垄断局面,还要看各自生态和市场需求的未来发展。