IoT物联网协议概览

MQTT-SN

概述

MQTT-SN(Sensor Networks)是MQTT协议的传感器版本,最早使用在zigBee无线网络中,主要面对电池供电,有限的处理器能力和存储能力的设备。基于TCP协议的MQTT对有些传感器来说还是负载太重了,这些传感器可能只有几十个字节的内存,无法运行TCP协议。

MQTT比较

  • 协议运行的层次不同

MQTT运行在TCP层之上,MQTT-SN可以运行在MAC层,IP层和UDP之上。MQTT-SN应用的场景主要是各种低功耗传感器网络,需要电池供电,对功耗非常敏感,TCP虚拟长连接需要维持一个定时心跳,对电池来说不是一个好的解决方案。在传感器网络中,链接可能随时中断,TCP连接也要不断的重新建立连接,这样对功耗都是大的消耗。
[图片上传失败…(image-186267-1565925931320)]

  • QOS增加了-1级别或3

QOS -1 级别在设置的时候QOS flag还是要设置3(“0b11” ),-1仅仅是个称谓,这个级别仅仅适用在非常简单的应用中,不需要建立连接或者断开连接,不需要注册或订阅,这时客户端仅仅是发送public消息给网关即可。发布的消息也不需要得到消息确认。

QoS Level 消息传输次数 传输语义 传输保证
-1 ≤ 1 至多一次 无连接,只用于传输,尽力而为,无保证;只有MQTT-SN支持
0 ≤ 1 至多一次 尽力而为,无保证
1 ≥ 1 至少一次 保证送达,可能存在重复
-1 ≡ 1 只有一次 保证送达,并且不存在重复
  • 支持设备睡眠

如果设备睡眠,则MQTT-SN网关先把消息存储起来,等设备醒来再下发。这个有点像手机短信,手机关机后,短信存储在运营商的短信交换中心,手机开机后再下发。

CoAP

概述

Coap(Constrained Application Protocol)是一种在物联网世界的类web协议,它的详细规范定义在 RFC 7252。COAP名字翻译来就是“受限应用协议”,顾名思义,使用在资源受限的物联网设备上。物联网设备的ram,rom都通常非常小,运行TCP和HTTP是不可以接受的。

  • 2017/12/21 发布初版
  • 2018/06/14 更清晰的,更全面的描述了CoAP协议关键内容

协议特点

  • COAP协议网络传输层由TCP改为UDP。
  • 它基于REST,server的资源地址和互联网一样也有类似url的格式,客户端同样有POST,GET,PUT,DELETE方法来访问server,对HTTP做了简化。
  • COAP是二进制格式的,HTTP是文本格式的,COAP比HTTP更加紧凑。
  • 轻量化,COAP最小长度仅仅4B,一个HTTP的头都几十个B了。
  • 支持可靠传输,数据重传,块传输。 确保数据可靠到达。
  • 支持IP多播, 即可以同时向多个设备发送请求。
  • 非长连接通信,适用于低功耗物联网场景。

协议消息类型

COAP协议有4种消息类型
CON—— 需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。这有点像TCP,对方必须给确认收到消息,用以可靠消息传输。

[图片上传失败…(image-703f1b-1565925931320)]可靠消息传输
NON—— 不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。这适用于消息会重复频繁的发送,丢包不影响正常操作。这个和UDP很像。用以不可靠消息传输。
[图片上传失败…(image-991a65-1565925931320)]不可靠消息传输
ACK —— 应答消息,对应的是CON消息的应答。
RST —— 复位消息,可靠传输时候接收的消息不认识或错误时,不能回ACK消息,必须回RST消息。

协议描述

[图片上传失败…(image-da471c-1565925931320)]

  • Ver : 2bit, 代表版本信息,当前是1
  • T: 2bit, 代表该消息类型, CON, NON. ACK, RST
  • TKL: 4bit,token长度, 当前支持0~8B长度,其他长度保留将来扩展用
  • Code:8bit,分成前3bit(07)和后5bit(031),前3bit代表类型。 0代表空消息或者请求码, 2开头代表响应码
  • Message ID:16bit, 代表消息MID,每个消息都有一个ID ,重发的消息MID不变。

订阅与发布

MQTT协议是基于订阅与发布模型的,coap通过扩展协议方式也简单的实现了订阅与发布模型。
观察协议在COAP基础协议上增加了1个Observe option, 其值为整数,通过该options来实现订阅与发布模型管理
在get请求消息里面
oberser value 为 0: 代表向服务器端订阅一个主题。
oberser value 为 1: 代表向服务器端移除一个已订阅主题。

在notification消息里面
oberser value 代表 主题发生变化时,检测到顺序,以便客户端可以知道状态变化的先后。

XMPP

概述

XMPP (Extensible Messaging and Presence Protocol可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。XMPP的前身是Jabber,基于XMPP的应用具有很强的可扩展性。

相关概念

JID: JID 一般由三部分构成:用户名,域名和资源名,格式为 user@domain/resource,例如:test@example.com/Anthony。对应于 XMPPJID 类中的三个属性 user、domain、resource。用jib来标识用户

优缺点

  • 协议成熟、强大、可扩展性强、目前主要应用于许多聊天系统中
  • 协议较复杂、冗余(基于XML)、费流量、费电,部署硬件成本高。

与MQTT比较

MQTT协议设计简单轻量、路由灵活,将在移动互联网物联网消息领域,全面取代PC时代的XMPP协议:

  • MQTT协议一个字节固定报头,两个字节心跳报文,报文体积小编解码容易。XMPP协议基于繁重的XML,报文体积大且交互繁琐。
  • MQTT协议基于主题(Topic)发布订阅模式消息路由,相比XMPP基于JID的点对点消息路由更为灵活。
  • MQTT协议未定义报文内容格式,可以承载JSON、二进制等不同类型报文。XMPP协议采用XML承载报文,二进制必须Base64编码等处理。
  • MQTT协议支持消息收发确认和QoS保证,XMPP主协议并未定义类似机制。MQTT协议有更好的消息可靠性保证。