物联网设备通信协议

设备通讯协议主要是运行在传统互联网TCP/IP协议之上的设备通讯协议,负责设备通过互联网进行数据交换及通信。比较常见的通讯协议包括:HTTP、websocket、XMPP、COAP、MQTT。

HTTP、WebSocket、XMPP

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

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

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

COAP

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

  • 采用UDP而不是TCP。这省去了TCP建立连接的成本及协议栈的开销
  • 将数据包头部都采用二进制压缩,减小数据量以适应低网络速率场景
  • 通过扩展协议方式也简单的实现订阅与发布模型
  • 支持可靠传输,数据重传,块传输, 确保数据可靠到达
  • 使用DTLS来做安全传输层,该层运行于UDP之上
  • 非长连接通信,适用于低功耗物联网场景
  • 支持分块传输,把文件拆解成多个块进行传输
  • 支持IP多播, 即可以同时向多个设备发送请求
  • 协议包轻量级,最小长度仅为4B
  • 消息模型,以消息为数据通信载体,通过交换网络消息来实现设备间数据通信,即可靠消息传输,也不可靠消息传输
  • 设备端可通过4个请求方法(GET, PUT, POST, DELETE)对服务器端资源进行操作

COAP协议就像一个针对物联网场景的http移植品,很多设计保留了HTTP协议的影子,拥有web背景的开发者也能快速上手。但是由于很多物联网设备隐藏在局域网内部,coap设备作为服务器无法被外部设备寻址,在ipv6没有普及之前,coap只能适用于局域网内部(如wifi)通信,这也很大限制了它的发展。

MQTT

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

  • 基于TCP/IP的长连接模式
  • 异步采用订阅与发布模型
  • 协议都是采用二进制格式编解码
  • 有非常完善的QOS机制
  • 同时支持TLS协议
  • 最小的数据包只有2个字节,对于低功耗低速网络也有很好的适应性
  • 支持反向控制

MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。