物联网协议

巧了我就是萌 提交于 2019-12-04 11:34:27

物联网是在互联网的基础上延伸和扩展的一种网络,其用户端延伸和扩展到了任何物品之间,彼此进行信息交换和通信,目的是实现所有物品与网络的连接,从而方便识别、管理和控制。无线物联网的特点包括:全面感知、实时准确传递物品信息、利用智能计算技术对海量数据进行分析和处理,以实现智能化控制。由于物联网中的很多设备都是资源受限型的,即只有少量的内存空间和有限的计算能力,所以传统的HTTP协议应用在物联网上就显得过于庞大而不适用。
MQTT协议和CoAP协议都是物联网中比较流行的协议,都对传输量做了很大的精简,传输开销小,以适应物理网的网络环境。


 

CoAP(Constrained Application Protocol 受限应用协议)
CoAP是6LowPAN协议栈中的应用层协议。COAP协议网络传输层由TCP改为UDP。
COAP是二进制格式的,HTTP是文本格式的,COAP比HTTP更加紧凑。
轻量化,COAP最小长度仅仅4B,一个HTTP的头都几十个B了。
支持可靠传输,数据重传,块传输。 确保数据可靠到达。
支持IP多播, 即可以同时向多个设备发送请求。
非长连接通信,适用于低功耗物联网场景。


 MQTT(Message Queuing Telemetry Transport 消息队列遥测传输)

为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。轻量、简单、开放和易于实现。
1.使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合
2.使用 TCP/IP 提供网络连接
3.小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量

这些特点使它适用于受限环境。例如,但不仅限于此:
· 特别适合于网络代价昂贵,带宽低、不可靠的环境。
· 能在处理器和内存资源有限的嵌入式设备中运行。
· 使用发布/订阅消息模式,提供一对多的消息发布,从而解除应用程序耦合。
· 使用 TCP/IP 提供网络连接。
· 提供Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。


从应用场景要求的层面,分析该如何选择使用哪种协议。

  1、服务端主动发送给客户端的数据(反控)的时效性(如通过APP控制硬件动作)
  因MQTT协议是保持连接的,所以及时性相对很好;CoAP协议是无连接响应式通讯,因此不能主动推送,要等客户端访问才可以携带回去,及时性相对较差。

  2、设备环境对底层协议的要求或限制
  MQTT协议是建立在TCP协议基础之上的,因此他也具备TCP协议的优缺点;CoAP协议是建立在UDP协议基础之上的,因此他也具备UDP协议的优缺点。

  3、在NAT网络环境中是否需要调整
  因MQTT协议是保持长连接的,所以在NAT(Network Address Translation,网络地址转换)下没有问题;CoAP协议因是无连接方式,需要使用NAT穿透性手段。
  【备注:NAT NAT(Network Address Translation,网络地址转换)是1994年提出的。当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本地地址的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接。】

  4、实现多对多的通信还是单对单通信
  因MQTT协议的消息模型是发布/订阅式的,所以是可以多对多通信的;CoAP协议的消息模型是请求/响应式的,所以是单对单通信。

  5、服务质量等级及自动重连重发
  因MQTT协议有QoS配置,支持服务质量等级和自动重连重发机制;CoAP本身不具备,需要应用层自己来写这个逻辑。  

  6、对网络稳定性要求
  MQTT协议利用自动重连重发机制解决网络不稳定问题,断网就会触发重连;CoAP协议只有客户端发送的时候需要保证网络连接正常,其他时段无需连接。

  7、对硬件设备的功耗影响
  MQTT协议因有保持连接,所以功耗略高于CoAP协议。


 

 

 XMPP协议基于XML,对于嵌入式设备来说,XML解析是超级困难的。

HTTP协议对于嵌入式设备来说属于重量级,也不是很合适。因为目前物联网中的很多设备都是资源受限型的,所以只有少量的内存空间和有限的计算能力。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!