IOT通讯协议CoAP与MQTT简介

背景:2017年4月份左右,因个人平时喜欢摆弄些小工具,自已就写了个IOT协议测试的APP(Android),APP集成了COAP和MQTT的协议通讯测试指令,后面该APP为公司的项目及嵌入式开发人员调试终端提供了很大的便利。



当下,万物互联已成主流,IoT应用越来越多,IOT的应用通讯也是百花齐放,有实力的公司纷纷自已定制协议,有开放的,有封闭的,也有开源的,然而有两个特别备受关注:消息队列遥测传输(MQTT)和受限应用协议(CoAP)。它们都设计为轻量级,并仔细使用稀缺的网络资源。

一、什么是IOT应用通讯协议

IOT应用通讯协议是指:负责应用层数据交互通讯的协议。在互联网时代,应用通讯协议基本是TCP/IP一统天下,但在IOT时代,显然不是,下面说说两种主流协议:

CoAP:受限应用协议,CoAP是简化了HTTP协议的RESTful API,被设计为看起来像是兼容HTTP,它支持大多数互联网,因为我们目前知道的。 CoAP可以利用代理服务器,并将其转换成HTTP,或者根据环境限制直接与设计为使用CoAP的特殊服务器进行通信。

MQTT:消息队列遥测传输,MQTT采用发布/订阅模式,所有的设备都接入云端,云端通过主题 的方式管理各个设备,关注主题和内容,负责将设备与设备之间的消息转发。

二、CoAP与MQTT的区别

MQTT和CoAP都是行之有效的物联网协议,但两者还是有很大区别的,比如MQTT协议是基于TCP,而CoAP协议是基于UDP。从应用方向来分析,主要区别有以下几点:

  • MQTT协议不支持带有类型或者其它帮助Clients理解的标签信息,也就是说所有MQTT Clients必须要知道消息格式。而CoAP协议则相反,因为CoAP内置发现支持和内容协商,这样便能允许设备相互窥测以找到数据交换的方式。
  • MQTT是长连接而CoAP是无连接。MQTT Clients与Broker之间保持TCP长连接,这种情形在NAT环境中也不会产生问题。如果在NAT环境下使用CoAP的话,那就需要采取一些NAT穿透性手段。
  • MQTT是多个客户端通过中央代理进行消息传递的多对多协议。它主要通过让客户端发布消息、代理决定消息路由和复制来解耦消费者和生产者。MQTT就是相当于消息传递的实时通讯总线。CoAP基本上就是一个在Server和Client之间传递状态信息的单对单协议。

三、CoAP与MQTT的选择

选择是一个难题,特别是对于项目而言,一旦技术选型出错,就意味着项目失败,所以对项目拍板的人来说,只有多了解,用足够的知识来支撑,同时也验证了经验的重要性。话说回来,即然IOT有两种主流协议,那我们什么选择呢?

  • CoAP主要用于局域网,适用于对于设备需要快速交流的本地网络环境;由于UDP允许广播和多播,您可以使用较少的带宽潜在地传输到多个主机,这在一些资源有限的环境中是有用的。
  • MQTT主要用于广域网(WAN,互联网),在广域网上的设备之间的通信的理想选择。它在带宽有限的情况下是最有用的,有云架构的,最好用MQTT完成。

四、MQTT和CoAP的发展

MQTT和CoAP都是开放标准,任何人都可以实现。 CoAP由标准机构启动,而不是由私有公司(包括IBM)设计的MQTT。 目前MQTT似乎处于领先地位。MQTT背后有人,大云玩家已经选择了这一势头,或者至少选择它 -国内外主要的云计算服务商,比如国内BAT、国外AWS、Azure都一概支持MQTT协议。然而,一种可能性是,一些围绕HTTP(例如移动应用程序开发)进行标准化的软件开发可以开始利用CoAP来处理外围设备,并与后端通信,以帮助减少不良连接带宽。也可能随着IOT的智能化和多变化的发展,后续应用平台肯定会兼容更多的物联网应用层协议。

五、总结

对于吃瓜群众来讲,我不在乎你谁强谁弱,我只选择合适项目需要的协议,稳定大于一切。