物联网常用的网络协议:MQTT、AMQP、HTTP、CoAP、LwM2M_lmm2m和mqtt-程序员宅基地

技术标签: AIOT开发系列  网络  物联网  网络协议  

物联网常用的网络协议:MQTT、AMQP、HTTP、CoAP、LwM2M

物联网设备间沟通的语言,就是网络协议。
设备间想相互交流,通信双方必须使用同一种“语言”。比如说你和中国人问好说’你好‘、日本人问好要说‘こんにちは’、和英国人问好要说‘hello’.
说起网络协议,你可能马上就想到了 HTTP 协议。是的,在日常的 Web 开发中,我们总是需要跟它打交道,因为 HTTP 协议是互联网的主流网络协议。类似地,应用在互联网中的网络协议,还有收发电子邮件的 POP3 、SMTP 和 IMAP 协议,以及用于区块链中的 P2P 协议。

具体需要用什么协议我们需要根据物联网的特点来做决定物联网的网络通信特点是物联网设备很大可能工作在不可靠、高延迟的网络环境中。
比如共享单车,使用 NB-IoT 这样的通信技术,本身的通信速率就只有不到几十 Kbps;要是被人停在城市的角落里,信号可能很不稳定。假设你使用 HTTP 协议,就需要单车先发出连接请求,然后等待服务器的响应(下发开锁指令)。这样一来,受网络通信质量的影响,很可能连接经常中断,而需要单车与服务器交互多次,那用户可能就要等很长时间。对于这种场景来说,不只是 HTTP,其他跟 HTTP 一样单向的、同步的网络协议,都不是理想的技术方案。

物联网系统中,设备数量多,而且交互非常复杂。比如家里的环境监测,温度、湿度、光照、二氧化碳、甲醛含量……这些都需要不同的设备测量,而且每个房间用到的设备也不同。如果让云平台的服务对每个设备分别做权限控制和数据阈值设置,这会非常麻烦。因为当数据的“生产者”和“消费者”直接交互时,要是没有中间角色基于共同的目标协调,双方的耦合度会很大,导致系统很难实现。这时候,需要把家为一个整体来处理,交互逻辑就会变得简单多了。设备经常需要根据实际使用环境做增加、减少等调整。

正是因为这些特点,物联网系统在选择网络通信的协议时,一般采用

发布 - 订阅模式

发布 - 订阅模式包含三个角色,分别是发布者、经纪人和订阅者,它们的关系如下图所示。

在这里插入图片描述

消息传递的过程可以分为三步:
1.发布者负责生产数据。发布者发送某个主题的数据给经纪人,发布者不知道订阅者。
2.订阅经纪人管理的某个或者某几个主题。
3.当经纪人接收到某个主题的数据时,将数据发送给这个主题的所有订阅者。

比如说当使用美团外卖点一分午餐,这时候发布订单给外卖订单中心服务器时,外卖订单中心收到订单之后,再把订单发送给店家

发布 - 订阅模式之所以适合物联网系统因为在物联网场景中,一个传感器数据需要触发多个服务或者终端执行动作。
比如红外传感器,当它检测到有人体靠近时,就需要触发一系列动作:通知摄像头拍照,声光报警器执行报警,推送消息给主人的手机等。
怎么满足这种需求呢?我们最好让摄像头、声光报警器和手机都订阅“人体靠近”这个主题消息。当红外传感器被触发时,它发送人体靠近的消息,然后这些设备就能同时收到这个消息,接着完成系统定义的那些动作。这就是发布 - 订阅模式的工作方式。

那么,具体有什么网络协议采用的是发布 - 订阅通信模式呢?MQTT 协议就是其中的佼佼者。

MQTT

MQTT它有三个主要特点:

1.采用二进制的消息内容编码格式,所以二进制数据、JSON 和图片等负载内容都可以方便传输。
2.协议头很紧凑,协议交互也简单,保证了网络传输流量很小。
3.支持 3 种 QoS(Quality of Service,服务质量)级别,便于应用根据不同的场景需求灵活选择。

这三个特点,让 MQTT 协议非常适合计算能力有限、网络带宽低、信号不稳定的远程设备,所以它成为了物联网系统事实上的网络协议标准。

AMQP

除了 MQTT 协议外,还有其他采用发布 - 订阅模式的网络协议,比如 AMQP 协议。
虽然 AMQP 协议拥有庞大的特性集,比较重,不适合计算资源有限、对功耗要求严苛的物联网设备,但是它可以满足后台系统对于可靠性和可扩展性的要求。因此,它在物联网的平台系统中应用广泛。

刚才我介绍了发布 - 订阅模式的很多好处,但是凡事都有例外,也有一些物联网应用场景,并不适合使用这种模式。比如,现在小区里面都有智能快递柜,当你输入取件码后,服务器会向对应的柜门发送开门指令。在发布 - 订阅模式下,服务器知道指令发送成功了,但是它无法知道柜门是否真的打开了。这时,你就需要让柜门能够向服务器反馈一下命令的执行结果。当然,你也可以让服务器订阅一个“柜门关闭”的主题消息,然后等待柜门发布这个消息。但是这样的话就非常繁琐、不够直接。在这种场景下,另一种通信模式就能派上用场了,那就是

请求 - 响应模式。

请求 - 响应模式有两个角色,一个是客户端,另一个是服务器。
客户端是请求数据或者服务的一方。服务器则用来接收客户端的请求,并提供相应的数据或者服务。服务器在收到请求后,会获取数据,对资源数据(比如数据库)进行加工处理,准备好响应,然后返回给客户端。
请求 - 响应模式是无状态的通信方式,每个完整的请求 - 响应都是相互独立的。进一步细分的话,它还可以分为同步和异步两种。你可以看下这张图片。

在这里插入图片描述

HTTP

HTTP 就是请求 - 响应模式的的代表。HTTP/2 协议还引入了异步请求 - 响应模式,客户端可以对请求设置不同的优先级,服务器可以根据优先级决定先响应哪个请求。
虽然 HTTP 协议的报文格式非常重,光是报文头就能达到 KB 大小,不太适合资源有限的嵌入式设备。但在一些计算资源和网络资源都比较充足的物联网设备上,HTTP 协议仍然是一个可选项。而且它和现有的 Web 系统兼容,可以利用已有的 Web 服务器资源。

CoAP

那么有没有跟 HTTP 协议类似,但是设计轻量,可以用于资源受限的物联网设备的协议呢?
有的,那就是 CoAP(Constrained Application Protocol)协议。
跟 HTTP 协议一样,CoAP 协议同样有 GET、POST、PUT、DELETE 等方法和响应状态码,同样使用 URI 而不是 Topic 来标识资源。
比如我们需要访问服务器 iotdemo.com 下面的 bedroom/temp 这个资源,那完整的资源地址是:

coap://iotdemo.com:5683/bedroom/temp

CoAP 的消息采用二进制格式,支持可确认消息和不可确认消息两种 QoS 级别。可确认消息(Confirmable Message)与 MQTT 协议的 QoS 1 类似,不可确认消息(Non-confirmable Message)对应 MQTT 协议的 QoS 0 级别。
另外,CoAP 协议基于的传输层协议是 UDP,而不是 HTTP 、 MQTT 协议的 TCP 协议,所以对于设备的计算资源要求更低。传感器设备一般只需要上传数据,不用随时接收服务器的控制命令,这都说明 CoAP 协议适合电池供电的传感器设备。
LwM2M
说完 CoAP,我再介绍一下跟它有关

LwM2M

LwM2M 协议定义在 CoAP 协议之上,不过它在消息传输的基础上更进一步。因为它基于 IPSO (IP-base Smart Object)对设备模型进行了标准化,提供了一组轻量级设备管理和交互接口协议。
LwM2M 协议目前主要的实现是 C 语言的 Wakaama 和 Java 语言的 Leshan,相对来说应用还比较少。CoAP 协议的应用场景同样适合 LwM2M 协议,如果你希望在 CoAP 协议的基础上更方便地实现设备的管理,可以考虑 LwM2M 协议。
通信模式的共存

学习笔记总结自‘物联网开发实战’–郭朝斌
–笔记只用于学习交流,请不要用于商业用途。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_47567401/article/details/113810919

智能推荐

十大移动开发平台_webbuilder是免费的吗-程序员宅基地

文章浏览阅读8.9k次,点赞2次,收藏7次。1. Putdb WebBuilder    WebBuilder是一款开源的可视化移动Web应用开发和运行平台。基于浏览器的集成开发环境,可视化和智能化的设计,能轻松完成常规应用和面向手机的移动应用开发;高效、稳定和可扩展的特点,适合复杂企业级应用的运行;跨平台、数据库和浏览器的架构,适应复杂的服务器和客户端环境;包括智能数据库访问在内的多项先进技术,使应用系统的开发更快捷和简单。 ..._webbuilder是免费的吗

RS485硬件标准1-电平定义_485端口正负电压-程序员宅基地

文章浏览阅读1.5k次。RS485标准是为了弥补RS232通信距离短、速率低等缺点而产生的而产生的,该接口标准只规定了电气特性,并没有规定接插件,传输电缆和 应用层通信协议。RS485标准与RS232不一样,数据信号采用差分传输方式。所谓差分传输,就是发送端在两条信号线上传输幅值相等,相位相反的电信号,接收端对接收的两条线信号做 减法运算,这样就获得幅值翻倍的信号。RS485上的两根线定义为A、..._485端口正负电压

centos mysql 端口,CentOS 上mysql端口3306的问题-程序员宅基地

文章浏览阅读200次。CentOS 上mysql端口3306的问题今天装了一台Linux系统,以前都是RedHat,后来听说有Fedora了,一直没用过。正好项目里环境要用就想弄一个来玩玩,结果现在人家最新的是CentOS,就一张CD,其他的根据需要自己上网Down,(我不喜欢这样子就自己下载DVD版)。安装完之后没有图形界面,而且没有提示输入root密码,还得到单用户模式下修改。后来下载了一个图形界面,弄好之后在那个..._centos修改mysql端口tcp6:3306为tcp

PXE自动化安装CentOS 8_centos8 pxe boot arp timeout-程序员宅基地

文章浏览阅读6.6k次,点赞5次,收藏26次。安装前准备:关闭防火墙和SELINUX,DHCP服务器静态IP。切勿用桥接模式 最好是NET模式而且把自动分配DHCP对勾取消。查看防火墙和seelinux是否关闭[root@centos8 ~]#firewall-cmd --statenot running[root@centos8 ~]#getenforce Disabled安装对应的软件包安装syslinux的时候..._centos8 pxe boot arp timeout

R软件学习笔记-5(R软件画图)_箱尾图绘制函数用法-程序员宅基地

文章浏览阅读6.8k次,点赞4次,收藏32次。转自:http://www.dataguru.cn/article-2421-1.html摘要: 一、直方图 绘制直方图函数:hist()对x1进行直方图分析 hist(x$x1)二、散点图 散点图绘制函数:plot()探索各科成绩的关联关系 plot(x1,x2) plot(x$x1,x$x2)三、柱状图 列联表分析 列联函数table():统计每个分数的人 ...一、直方图_箱尾图绘制函数用法

Redis常用命令-程序员宅基地

文章浏览阅读783次。http://www.4wei.cn/archives/1002509Redis常用命令集1)连接操作命令quit:关闭连接(connection)auth:简单密码认证help cmd: 查看cmd帮助,例如:help quit2)持久化save:将数据同步保存到磁盘bgsave:将数据异步保存到磁盘lastsave:返回上次成功将数据保存到磁盘的Unix时戳shundo..._redis怎么使用vi

随便推点

谷歌地图控件,通过扩展实现GMAP的自定义绘图系统-程序员宅基地

文章浏览阅读251次。  这两天搞网络规划和优化系统,需要开发一套地图,并在地图上放置自定义图标,和放置复杂贴图,或画矩形多边形等随着地图移动和放缩。这件事情一开始搞得很痛苦,通过GMAP.NET开发,并使用了CodeProject上面的drawtools工具(有兴趣可以自行搜索,博客园也有相关的文章讨论),但就是没法实现随地图移动而移动,仿佛是浮在地图上的。最后这种方法只能放弃。 看了几个博客上面讨论的..._gmap tooltip 背景透明

[源码解析] 机器学习参数服务器ps-lite 之(3) ----- 代理人Customer-程序员宅基地

文章浏览阅读469次。本文是参数服务器第三篇,介绍ps-lite的Customer模块。

卷积神经网络笔记--吴恩达深度学习课程笔记(四)_卷积神经 特征平面-程序员宅基地

文章浏览阅读2.8k次,点赞4次,收藏17次。各个知识点详解LeNet-5网络LetNet网络的的讲解主要参考1998年计算机科学家Yann LeCun发布的一篇论文《Gradient based learning applied to document-recognition》大家可以找到这篇论文结合学习,针对该网络,首先大家需要了解一下图像中的常用操作卷积,卷积这个词是信号处理领域的词,表示一个系统多数据处理的过程,在图像处理中的卷积,其实就是滤波器。下面先简要介绍一下卷积核的概念,这个不能细说,因为想要深入理解卷积需要很多知识,这里只给大家_卷积神经 特征平面

ANSYS无限大平板两边传热仿真_ansys热仿真-程序员宅基地

文章浏览阅读5.1k次,点赞4次,收藏20次。ANSYS无限大平板两边传热仿真有一无限大平板,导热系数为27.56,密度为591.8,密度为7800,厚度为1.08m,现将其划分为4层,5个温度节点,求分析其在两面不相等且温度变化的对流换热中的受热情况。对流换热系数为200。一、前处理器1、建立工程,改变工程名称2、选择处理热问题,勾选Thermal选项3、选择需要划分的节点类型,这里采用55节点若计算对称问题,则在o..._ansys热仿真

SpringBoot使用prometheus监控_spring security 只开启/actuator/promethues断点-程序员宅基地

文章浏览阅读3.1w次,点赞2次,收藏40次。本文介绍SpringBoot如何使用Prometheus配合Grafana监控。1.关于PrometheusPrometheus是一个根据应用的metrics来进行监控的开源工具。相信很多工程都在使用它来进行监控,有关详细介绍可以查看官网:https://prometheus.io/docs/introduction/overview/。2.有关GrafanaGrafana是一个开源监..._spring security 只开启/actuator/promethues断点

Redis数据结构_redis取值fet list-程序员宅基地

文章浏览阅读99次。redis是一种高级的key-value数据库存储系统 其中value值支持物种数据类型 ,key的数据类型一般都是String字符串类型:String散列类型:hash列表类型:list集合类型:set有序集合类型:sorted set对于redis的key值,如果定义的名称过长,查询效率就会降低,所以一般是按照规范命名就可以了。命令ping 就是连接是否成功 显示PONG就表示连接成功redis默认会在空间之中生成16个数据库,数据库编号以此从.._redis取值fet list

推荐文章

热门文章

相关标签