IOT(6)---MQTT和CoAP
IoT物联网需要标准协议,针对小设备最有前景的两种是MQTT和CoAP。
MQTT和CoAP两者均:
开放标准;
比HTTP更适合于受限环境;
提供异步传输机制;
在IP上运行;
有很多种实现
MQTT在传输模式上更为灵活,对二进制数据而言就像是管道,CoAP为与网络设计。
MQTT
为轻量M2M通讯设计的一种发布/订阅消息协议,起初由IBM研发,现在是一种开放标准。
架构
客户端/服务器模型,其中每一个传感器为一个客户端,通过TCP连接到服务器,也称为代理。
MQTT以消息为导向,每个消息是具体的一组数据,对代理是透明的。
每个消息发布至一个地址,称为主题,客户端也许会订阅多种主题,订阅某个主题的每一个客户端会收到所有发布到主题的消息。举个例子说明,设想一个简单的网络,有一个中间代理和三个客户端。
所有三个客户端与代理建立TCP连接,客户端B、C订阅温度主题
稍后,客户端A给温度主题发布了一个值22.5,代理转发消息给所有订阅客户端。
发布/订阅模型允许MQTT客户端以一对一、一对多和多对一方式进行通讯。
主题匹配
MQTT中,主题是层次结构的,像文件系统(例如:kitchen/oven/temperature)。当注册订阅时允许通配符,但不是发布时,允许整个层次结构被客户端观察。
通配符+匹配任意单个目录名称,#匹配任意数量任意名称目录。
例如:主题kitchen/+/temperature可以匹配kitchen/foo/temperature,但是不能匹配
kitchen/foo/bar/temperature,而kitchen/# 可以匹配 kitchen/fridge/compressor/valve1/temperature。
应用级QoS
支持三种服务质量等级:触发而遗忘、至少传送一次、仅仅传送一次。
遗愿遗嘱
MQTT客户端可以注册一个典型的遗愿遗嘱消息,如果它们断开连接,由代理发送。这些消息可以用于向订阅者发出信号,当设备断开连接时。
持久化
MQTT支持在代理上存储持久化消息,当发布消息时,客户端也许会要求代理能够持久化消息。只有最近的持久消息会被存储。当客户端订阅一个主题时,任何持久化消息会被发送至客户端。
不像消息队列,MQTT代理不允许持久化消息在服务器内部备用。
安全
MQTT代理也许会要求用户名、密码认证,为确保隐私,TCP连接也许会用SSL/TLS加密。
MQTT-SN
虽然MQTT设计为轻量的,但是对于受限设备来说,有两个缺点。
每一个MQTT客户端必须支持TCP,任何时候都要求保持连接到代理。对于丢包很严重或者计算资源稀缺的环境来说,这会是一个问题。
MQTT主题名称通常是长字符串,使得其对802.15.4不切实际。
MQTT-SN协议解决这些问题,定义MQTT UDP映射,增加代理支持主题名称索引。
CoAP
架构
CoAP数据包比HTTP TCP流小得多,比特域与从字符串映射到整型广泛运用以节省空间。数据包易于生成,可以原位解析,不用消耗受限制设备内的额外RAM。
CoAP运行在UDP上,而不是TCP。客户端与服务器通过无连接的数据报进行通讯,在应用栈内实现重传与重排序。无需TCP也许会使得小型微处理器全部IP网络化,CoAP允许使用UDP广播与多播用于地址。
CoAP遵循客户端/服务器模型,客户端向服务器请求,服务器回送响应,客户端可以GET、PUT、POST和DELETE资源。
CoAP用于通过简单代理与HTTP、RESTFUL网络交互。
因为CoAP基于数据报文,也许会用于SMS或者其他基于分组的通讯协议之上。
应用级QoS
请求与响应也许会被标记为可确认的或者非确认的,可确认的消息必须由接收方通过ACK包进行确认。
非确认的消息是触发而忘记的。
内容协商
像HTTP,CoAP支持内容协商,客户端使用Accept选项表达倾向的资源表示,服务器回复Content-Type选项告知客户端它们接收的东西。和HTTP一样,这允许客户端与服务器独立演进,增加新的表达方式,而互不影响。
CoAP请求也许会使用查询字符串形式如?a=b&c=d,这些可以用于给客户端提供搜索、分页与其他特性。
安全
因为CoAP建立在UDP而不是TCP之上,SSL/TLS不可用于提供安全性。DTLS数据报传输层安全提供了与TLS同样的保证机制,但是针对UDP之上数据传输。通常来说,具备DTLS能力的CoAP设备支持RSA、AES或者ECC、AES。
观察
CoAP拓展了HTTP请求模型,有能力观察资源。当观察标记在CoAP GET请求之上设定时,服务器会继续应答在初始文档已经传输过后。这使得服务器能够将状态变化发生时流向客户端。两边一方结束会取消观察。
资源发现
CoAP为资源发现定义标准机制,服务端提供资源列表(同时包括相关的元数据)在/.well-known/core。这些链接以应用/链接格式媒介形式,允许客户端发现提供什么样的资源,并且它们是什么媒介形式。
NAT问题
CoAP, 传感器节点一般是一个服务器,而不是一个客户端(虽然有可能两者都是)。传感器(或者)提供客户端可以访问的资源,或者改变传感器状态。
虽然CoAP传感器是服务器,它们必须能够接收数据包。NAT后合理运行,设备也许会先发送一个请求,像在LWM2M中做的,允许路由器关联两者。虽然CoAP不需要IPV6,在设备直接路由的IP环境内最易于使用。
对比
MQTT和CoAP作为IoT协议都很有用,但是也有重要的区别。
MQTT是多对多通讯协议用于在不同客户端之间通过中间代理传送消息,解耦生产者与消费者,通过使得客户端发布,让代理决定路由并且拷贝消息。虽然MQTT支持一些持久化,最好还是作为实时数据通讯总线。
CoAP主要是一个点对点协议,用于在客户端与服务器之间传输状态信息。虽然支持观察资源,CoAP最好适合状态传输模型,不是完全基于事件。
MQTT客户端建立长连接TCP,这通常表示没有问题,CoAP客户端与服务器都发送与接收UDP数据包,在NAT环境中,隧道或者端口转发可以用于允许CoAP,或者像LWM2M,设备也许会先初始化前端连接。
MQTT不提供支持消息打类型标记或者其他元数据帮助客户端理解,MQTT消息可用于任何目的,但是所有的客户端必须知道向上的数据格式以允许通讯,CoAP,相反地,提供内置支持内容协商与发现,允许设备相互探测以找到交换数据的方式。
两种协议各有优缺点,选择合适的取决于自己的应用
IOT(6)---MQTT和CoAP相关推荐
- IoT -- (六) MQTT和CoAP对比分析
IoT物联网需要标准协议,针对小设备最有前景的两种是MQTT和CoAP. MQTT和CoAP两者均: 开放标准: 比HTTP更适合于受限环境: 提供异步传输机制: 在IP上运行: 有很多种实现 MQT ...
- IoT五种常见物联网协议:TCP/IP、UDP、HTTP、MQTT、CoAP初探
对于软件公司来说,IoT模式为其硬件设计以及所提供的服务带来决定性的改变.其中影响最大的一个方面是通信协议. 通信协议可以被认为是一种语言,即两台或两台以上的设备可以相互交流.同时无规矩不成方圆,通信 ...
- IOT(7)---MQTT
MQTT是什么? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协 ...
- 主流物联网协议选择:MQTT、CoAP 还是 LwM2M?
随着物联网技术的发展与普及,越来越多的智能设备具备了网络连接与数据传输能力.由于物联网场景复杂多样,设备端硬件条件.网络稳定性.流量限制.设备功耗以及设备连接数量等多方面因素造成物联网设备的消息传递与 ...
- IoT -- (七)MQTT协议详解
MQTT是什么? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协 ...
- NB-IoT,LORA,wifi,蓝牙,zigbee,MQTT,COAP
按网络四层协议: NB-IoT,LORA,WIFI,蓝牙,zigbee,4G都是物理层的,这几个都需要芯片模组支持(硬件支持),而MQTT,COAP,HTTP都是应用层协议,这些需要开发服务器,或者对 ...
- 物联网协议选型-MQTT/AMQP/CoAP/HTTP/LwM2M
0 摘要 前面笔者简单谈了在实际的mqtt产品实现时,客户端和服务端分别如何实现,选择了参考文献[1]mosquitto服务端实现和[2]华为鸿蒙mqtt客户端实现,两个比较典型的项目作为例子对产品级 ...
- 物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
物联网应用层协议选择和分析--MQTT.CoAP .HTTP.XMPP.SoAP MQTT协议 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早 ...
- 【协议】MQTT、CoAP、HTTP比较,MQTT协议优缺点
目录 MQTT.CoAP.HTTP区别 1. 协议栈: 2. 请求方式 3. 通讯消息格式: 4. 使用特点与使用场景 5.客户端平台差异 6.防火墙容错 MQTT.CoAP.HTTP介绍 CoAP ...
最新文章
- 自然语言处理中文本的token和tokenization
- R语言画形状—直线、矩形、多边形等
- KMP算法求解next数组值(模式串从下标0开始或从下标1开始)以及求值后与主串的匹配过程
- JavaScript学习总结(一)——JavaScript基础
- mysql如何优化性能优化_如何优化性能?MySQL实现批量插入以优化性能的实例详解...
- think php f方法,修改ThinkPHP3.2的F方法
- 十分钟上线 - 函数计算构建支付宝小程序的后端
- vue跳转下个页面关闭当前页面_如何机智判断页面是刷新还是关闭,背景:vue项目,需求:关闭页面,下次直接跳到登陆页...
- 编程 单引号 双引号_我的25个最喜欢的编程引号也很有趣
- 小管家进销存_管家婆物联宝微订货V2.3发版公告
- 交互设计的本质是什么?交互设计哪些意义?
- 【学习笔记】斯坦福大学公开课(机器学习) 之生成学习算法:朴素贝叶斯
- 微型计算机分类可以分为哪些,微型计算机的分类通常以微处理器的什么来划分...
- linux 下载文件
- 服务器c盘里面哪些是临时文件,别再让你系统产生的大量临时文件占用C盘了的方法...
- c758f52e87.html,查看源码: rainsoft_200372295849.rar_AboutFrm.dfm - VerySource
- Java解析pmml格式机器学习模型
- Windows 和Linux利用tftp协议传送文件
- 【附源码】计算机毕业设计SSM校园论坛设计
- arcgis desktop和arcgis engin连接postgresql数据库连接需要的类库