MQTT(2)---MQTT协议
MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早是IBM开发的一个即时通讯协议,MQTT协议是为大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备通讯而设计的一种协议。
MQTT协议的优势是可以支持所有平台,它几乎可以把所有的联网物品和互联网连接起来。
- QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络。分发的消息可能丢失或重复。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送。
- QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复。
- QoS 2:“只有一次”,确保消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。
下图是MQTT为可靠传递消息的三种消息发布服务质量
发布/订阅模型允许MQTT客户端以一对一、一对多和多对一方式进行通讯。
下图是MQTT的发布/订阅消息模式
CoAP协议
CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。由于目前物联网中的很多设备都是资源受限型的,所以只有少量的内存空间和有限的计算能力,传统的HTTP协议在物联网应用中就会显得过于庞大而不适用。因此,IETF的CoRE工作组提出了一种基于REST架构、传输层为UDP、网络层为6LowPAN(面向低功耗无线局域网的IPv6)的CoAP协议。
CoAP采用与HTTP协议相同的请求响应工作模式。CoAP协议共有4中不同的消息类型。
CON——需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。
NON——不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。
ACK——应答消息,接受到CON消息的响应。
RST——复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。
CoAP消息格式使用简单的二进制格式,最小为4个字节。
一个消息=固定长度的头部header + 可选个数的option + 负载payload。Payload的长度根据数据报长度来计算。
主要是一对一的协议
举个例子:
比如某个设备需要从服务器端查询当前温度信息。
- 请求消息(CON): GET /temperature , 请求内容会被包在CON消息里面
- 响应消息 (ACK): 2.05 Content “22.5 C” ,响应内容会被放在ACK消息里面
CoAP与MQTT的区别
MQTT和CoAP都是行之有效的物联网协议,但两者还是有很大区别的,比如MQTT协议是基于TCP,而CoAP协议是基于UDP。从应用方向来分析,主要区别有以下几点:
1、MQTT协议不支持带有类型或者其它帮助Clients理解的标签信息,也就是说所有MQTT Clients必须要知道消息格式。而CoAP协议则相反,因为CoAP内置发现支持和内容协商,这样便能允许设备相互窥测以找到数据交换的方式。
2、MQTT是长连接而CoAP是无连接。MQTT Clients与Broker之间保持TCP长连接,这种情形在NAT环境中也不会产生问题。如果在NAT环境下使用CoAP的话,那就需要采取一些NAT穿透性手段。
3、MQTT是多个客户端通过中央代理进行消息传递的多对多协议。它主要通过让客户端发布消息、代理决定消息路由和复制来解耦消费者和生产者。MQTT就是相当于消息传递的实时通讯总线。CoAP基本上就是一个在Server和Client之间传递状态信息的单对单协议。
HTTP协议
http的全称是HyperText Transfer Protocol,超文本传输协议,这个协议的提出就是为了提供和接收HTML界面,通过这个协议在互联网上面传出web的界面信息。
HTTP与CoAP的区别
CoAP是6LowPAN协议栈中的应用层协议,基于REST(表述性状态传递)架构风格,支持与REST进行交互。通常用户可以像使用HTTP协议一样用CoAP协议来访问物联网设备。而且CoAP消息格式使用简单的二进制格式,最小为4个字节。HTTP使用报文格式对于嵌入式设备来说需要传输数据太多,太重,不够灵活。
XMPP协议
XMPP(可扩展通讯和表示协议)是一种基于可扩展标记语言(XML)的协议,
它继承了在XML环境中灵活的发展性。可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议。
基本网络结构
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。
服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统
的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过
TCP/IP连接到单服务器,然后在之上传输XML。
功能
1
2
3
4
5
6
|
<? xmlversion = '1.0' ?>
< stream:stream
to = 'example_com'
xmlns = 'jabber:client'
xmlns:stream = 'http_etherx_jabber_org/streams'
version = '1.0' >
|
1
2
3
4
5
6
7
|
<? xmlversion = '1.0' ?>
< stream:stream
from = 'example_com'
id = 'someid'
xmlns = 'jabber:client'
xmlns:stream = 'http_etherx_jabber_org/streams'
version = '1.0' >
|
工作原理
XMPP核心协议通信的基本模式就是先建立一个stream,然后协商一堆安全之类的东西,
中间通信过程就是客户端发送XML Stanza,一个接一个的。服务器根据客户端发送的信息
以及程序的逻辑,发送XML Stanza给客户端。但是这个过程并不是一问一答的,任何时候
都有可能从一方发信给另外一方。通信的最后阶段是关闭流,关闭TCP/IP连接。
网络通信过程中数据冗余率非常高,网络流量中70% 都消耗在 XMPP 协议层了。对于物联网来说,大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备,省电、省流量是所有底层服务的一个关键技术指标,XMPP协议看起来已经落后了。
SoAP协议
SoAP(简单对象访问协议)是交换数据的一种协议规范,是一种轻量的、简单的、
基于可扩展标记语言(XML)的协议,它被设计成在WEB上交换结构化的和固化的信息。
SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),
简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到
远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议
(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。
MQTT(2)---MQTT协议相关推荐
- 【MQTT】MQTT协议学习
文章目录 MQTT协议 简述 特点 MQTT消息的QoS(服务质量) MQTT支持三种QoS等级: 协议实现方式 MQTT协议数据包(控制报文)结构 MQTT固定头 MQTT数据包类型 标识位 剩余长 ...
- gprs模块http mqtt_基于GPRS模块的MQTT至MODBUS协议转换器
[报名阶段需要填写的内容] 1.参赛者姓名(必填项): 方海钰 2.单位或学校名称(选填项): 3.当前职务或职称(选填项): 4.参赛作品的名字(必填项): 基于GPRS模块的MQTT至MODBUS ...
- CaysnPrinter 云打印机MQTT上层通讯协议V1.1_20170624
打印机MQTT上层通讯协议V1.3 版本 修改日期 修改人 修改内容 1.1 2017-06-22 许森煌 1. 增加设置心跳控制 2. 增加打印机心跳包返回 NOTE: 本次修改内容使用蓝色字区分 ...
- 【MQTT】MQTT简介+安装+使用
目录 前言 MQTT 协议简介 为何选择 MQTT MQTT 通讯运作方式 MQTT 协议帧格式 MQTT服务器搭建和使用 公共MQTT 测试服务器 MQTT服务器搭建 各种MQTT代理服务程序比较 ...
- 物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议)
目录 1.HTTP和websocket 2.XMPP 3.COAP 4.MQTT协议 5.DDS 对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在internet通信中比较常见的通讯协议 ...
- MQTT(3)---MQTT协议及其在物联网中的应用
MQTT (Message Queuing Telemetry Transport,消息队列遥测传输) 是一种标准化的发布/订阅消息传输协议,设计于1999年,最初是为了在卫星之类的物体上使用.它是一 ...
- 基于MQTT的RPC协议
RPC 是一种基于request/response 模式的分布式协议.而MQTT 是基于pub/sub模式的协议.是否能够将这两种协议相结合,实现RPC Over MQTT ?我并没有发现由比较知名的 ...
- lua语言开发esp8266接入巴法云,mqtt和tcp协议
第一步,lua语言开发环境配置 下载安装java环境,下载地址:点击下载 选择windows版本下载安装即可,如图所示: 下载开发环境包: 下载地址:点击下载 esp8266串口驱动:点击下载 下载后 ...
- python mqtt broker_python Mqtt 的安装及使用
简介&安装 MQTT是一个基于客户端-服务器的消息发布/订阅传输协议.MQTT协议是轻量.简单.开放和易于实现的,这些特点使它适用范围非常广泛.可以以极少的代码和有限的带宽,为连接远程设备提供 ...
最新文章
- STM32HAL库---串口中断接收时间管理机制
- #论文 《ImageNet Classification with Deep Convolutional Neural Networks》
- 笔记3——C++类的一些特性
- 源码学习【HashMap第二篇】hashMap为什么size 是2的 n次方倍
- The Linux device model
- 1 uC/OS工程目录
- 怎么快速了解自己的MySQL服务器?
- 发送广播BroadcastReceiver
- GenericObjectPool参数解析
- l如何更新linux内核,WSL更新Linux内核版本
- Java基础学习(1)-反射
- java怎么定义_java怎么定义方法
- 《通用规范汉字表》背景知识词条
- 程序员职业发展路径图:从菜鸟工程师到高级架构师(转)
- 计算机管理格式化没有顺利完成,tf卡无法格式化的解决方法
- ES索引生命周期管理ILM
- 小游戏开发怎么选游戏引擎
- Python图像库PIL的类Image的paste写法
- 洛谷:P5594 【XR-4】模拟赛
- 微软20日将验证Windows与Office盗版将黑屏