IoT协议LwM2M MQTT与CoAP
IoT协议LwM2M MQTT与CoAP
一、MQTT
1、概述:
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。
2、主要特征:
MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
对负载内容屏蔽的消息传输;
使用TCP/IP 提供网络连接;
有三种消息发布服务质量:
“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。
“至少一次”,确保消息到达,但消息重复可能会发生。
“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
3、网络资源
官方网站
http://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html
中文翻译
https://www.gitbook.com/book/mcxiaoke/mqtt-cn
代理软件
Mosquitto —— 这是最早在生产环境中可用的消息代理之一,以 C 语言编写,提供轻量级多种配置与高性能。
Mosca —— 以 Node.js 编写,可嵌入 Node 应用或以独立可执行文件的形式运行。由于配置简单并具有可扩展性,它也是我们最喜欢的消息代理,具有高性能的优点。
RSMB —— IBM 对 MQTT 协议的实现,也是最不常用的选项之一,不过它是一个用C语言编写的成熟系统。
HiveMQ —— HiveMQ 是一种相对较新的消息代理,面向企业环境,在博客上有很多关于 MQTT 不错的信息。
二、CoAP
由于物联网中的很多设备都是资源受限型的,即只有少量的内存空间和有限的计算能力,所以传统的HTTP协议应用在物联网上就显得过于庞大而不适用。 IETF的CoRE工作组提出了一种基于REST架构的CoAP协议。CoAP是6LowPAN协议栈中的应用层协议。
1、网络资源
官网:https://en.wikipedia.org/wiki/Constrained_Application_Protocol
三、Lightweight M2M
OMA是一家国际组织,最初定义了一套 OMA-DM的协议,用来远程管理移动终端设备,比如手机开户,版本升级,等等。OMA-DM有着非常广泛的应用,很多运营生比如Verizon Wireless, Sprint都有自己的OMA-DM服务并要求手机/模块入网的时候通过自定义的OMA-DM入网测试。因为物联网的兴起, OMA在传统的OMA-DM协议基础之上,提出了LWM2M协议。2013年底,OMA发布了LWM2M规范。
OMA Lightweight M2M 主要动机是定义一组轻量级的协议适用于各种物联网设备,因为M2M设备通常是资源非常有限的嵌入式终端,无UI, 计算能力和网络通信能力都有限。同时也因为物联网终端的巨大数量,节约网络资源变得很重要。
LWM2M 定义了三个逻辑实体:
LWM2M Server 服务器
LWM2M client 客户端 负责执行服务器 的命令和上报执行结果
LWM2M 引导服务器 Bootstrap server 负责 配置LWM2M客户端.
在这三个逻辑实体之间有4个逻辑接口:
Device Discovery and Registration
这个接口让客户端注册到服务器并通知服务器客户端所支持的能力(简单说就是支持哪些资源Resource和对象Object
Bootstrap
Bootstrap server通过这个接口来配置Clinet – 比如说LWM2M server的URL地址
Device Management and Service Enablement
这个就是最主要的业务接口了。 LWM2M Server 发送指令给 Client 并受到回应.
Information Reporting
这个接口是 LWM2M Client 来上报其资源信息的,比如传感器温度。上报方式可以是事件触发,也可以是周期性的。
Lightweight M2M 协议栈

LWM2M Objects: 每个对象对应客户端的某个特定功能实体. LWM2M 规范定义了一下标准Objects,比如
urn:oma:lwm2m:oma:2; (LWM2M Server Object)
urn:oma:lwm2m:oma:3; (LWM2M Access Control Object)
每个object下可以有很多resource. 比如Firmware object可以有Firmware版本号,size等resource.
Vendor可以自己定义object
LWM2M Protocol: 定义了一些逻辑操作,比如Read, Write, Execute, Create or Delete.
CoAP: 是IETF 定义的Constrained Application Protocol 用来做LWM2M的传输层,下层可以是 UDP 或SMS .UDP 是必须支持的,SMS是可选的。CoAP有自己的消息头,重传机制等。
DTLS: 是用来保证客户端和服务器间的安全性的.
四、MQTT与CoAP比较
MQTT和CoAP都是非常有用的物联网协议,但两者有根本区别,两个协议各有特点,选择哪个才是正确的取决于你的应用程序。
1、MQTT是多个客户端通过一个中央代理传递消息的多对多协议。它通过让客户端发布消息、代理决定消息路由和复制来解耦生产者和消费者。虽然MQTT持久性有一些支持,但它是最好的实时通讯总线。
2、CoAP基本上是一个在Client和Server之间传递状态信息的单对单协议。虽然它支持观察资源,但是CoAP最适合状态转移模型,而不是单纯的基于事件。
3、MQTT Clients与Broker之间保持TCP长连接,这个在NAT环境中也不会有问题。CoAP Clients与Server都要接收和发送UDP包。在NAT环境下使用CoAP,需要使用“隧道掘进”或者端口转发(内网穿透),否则像LWM2M(轻量级M2M)一样,首先初始化设备到‘头端’( head-end )的连接.
4、MQTT不支持带有类型或者其它帮助Clients理解的标签消息。MQTT消息可用于任意目的,但前提是所有的Clients必须知道消息格式。而CoAP则相反,它内置内容协商和发现支持,这样允许设备彼此窥测以找到交换数据的方式。

- 原文链接:http://kuaibao.qq.com/s/20180112G0RSMB00?refer=cp_1026
IoT协议LwM2M MQTT与CoAP的更多相关文章
- 转:XMPP协议、MQTT协议、HTTP协议、CoAP协议的基本比较
一.先看下相关国外的专业数据对四大协议的比较: Protocol CoAP XMP ...
- 物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早是IBM开发的一个即时通讯协议,MQTT协议是为大量计算能力有限且工作在低带宽.不 ...
- MQTT协议-MQTT协议简介及协议原理
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建 ...
- MQTT、CoAP
实时协议是物联网的一项根本性技术,在物联网领域发挥了重大的作用.目前物联网设备所广泛使用的四大实时协议:XMPP.HTTP.CoAP以及MQTT等可谓各擅所长.亦各有弊端. 那么在万物互联的时代,谁主 ...
- MQTT和Coap
什么是MQTT? MQTT是一个“发布和订阅”协议.用户可以订阅某些主题,或发布某些主题的消息.订阅者将收到订阅的主题消息.用户可以通过保证交付来配置协议更可靠. 什么是CoAP? CoAP看起来像是 ...
- MQTT协议-MQTT协议解析(MQTT数据包结构)
协议就是通信双方的一个约定,即,表示第1位传输的什么.第2位传输的什么…….在MQTT协议中,一个MQTT数据包由:固定头(Fixed header). 可变头(Variable header). 消 ...
- HTTP协议和XMPP协议、MQTT协议
应用层协议:每个应用层的都是为了解决某一类应用问题.而问题的解决又必须通过位于不同主机中的多个应用进程之间的通信和协同工作来完成.应用进程之间必须遵守严格的规则.应用层协议应当定义如下几个: 应用进程 ...
- 物联网通讯协议:MQTT,CoAP,NB-IOT,RFID,BLUETOOTH,NFC
一.按网络四层协议分类: NB-IoT,LORA,WIFI,蓝牙,zigbee,4G都是物理层的,这几个都需要芯片模组支持(硬件支持) 而MQTT,COAP,HTTP都是应用层协议,这些需要开发服务器 ...
- 物联网开源框架Thingsboard使用总结
Thingsboard中文社区:http://thingsboard.iotschool.com/ 参考网址:https://thingsboard.io/docs/getting-started-g ...
随机推荐
- ssh连不上的问题
新安装的ubuntu,想要ssh远程连接,发现连接不上,何解? 答 : 在ubuntu上安装ssh. sudo apt-get install openssh-server
- 并发之ATOMIC原子操作--Unsafe解析(三)
Atomic 类的原子操作是依赖java中的魔法类sun.misc.Unsafe来实现的,而这个类为我们提供了访问底层的机制,这种机制仅供java核心类库使用,而不应该被普通用户使用. 获取Unsaf ...
- Docker - 查看容器进程在宿主机的 PID
概述 查看 docker 进程, 在容器外的 pid 背景 docker 中运行的进程, 本质上是运行在 host 上的 这些进程, 在 host 上, 也可以有自己的 pid 如果某种情况下, 连不 ...
- 每天进步一点点------Allegro 修线
Allegro中修线的方法有很多种,这里重点介绍走线的移动和走线的替换,掌握这两种方法,基本可以完成电路板的修线工作. 走线的移动 第1步:执行菜单命令Route->Slide,进入移动走线命 ...
- 从ICG cell 在 library 中的定义说起
如Coding 时需要考虑什么样的代码风格会使gating 的效率更高:综合时需要特别设置要插入的gating 类型,每个gating 的fanout 范围,是否可以跨层次,是否需要做physical ...
- SSG (slow global), TTG (typical global) and FFG (fast global)
https://semiwiki.com/x-subscriber/clk-design-automation/4481-variation-alphabet-soup/ n response, fo ...
- Web 安全工具篇:Burp Suite 使用指南
真的是一点都不过分,了解详情请继续往下读. Burp Suite 介绍 Burp Suite 是用于攻击 web 应用程序的集成平台.它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程 ...
- Vue学习 Day01
介绍 这个系列记录自己学习Vue的过程. Vue官方不推荐新手直接使用 vue-cli,所以前面这几天都是根据官方文档学习. 步骤 新建一个html文件. 在html中导入vue.js依赖. < ...
- ajax和promise及axios和promise的结合
链接:https://www.cnblogs.com/mmykdbc/p/10345108.html 链接2:https://blog.csdn.net/UtopiaOfArtoria/article ...
- angular 输入框自动绑定值最长为16位,超过16位则会报错
最近发现angular在使用input输入框的ng-model绑定scope变量的时候,发现,输入长串的数字将会出错.代码如下: <html> <head> <meta ...