0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP

RTThread物联网操作系统 来源:未知 作者:李倩 2018-09-12 17:22 次阅读

MQTT协议

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)最早是IBM开发的一个即时通讯协议,MQTT协议是为大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备通讯而设计的一种协议。

MQTT协议的优势是可以支持所有平台,它几乎可以把所有的联网物品和互联网连接起来。

它具有以下主要的几项特性:

1、使用发布/订阅消息模式,提供一对多的消息发布和应用程序之间的解耦;

2、消息传输不需要知道负载内容;

3、使用 TCP/IP 提供网络连接;

4、有三种消息发布的服务质量:

QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络。分发的消息可能丢失或重复。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送。

QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复。

QoS 2:“只有一次”,确保消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费。

5、小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;

6、使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制;

在MQTT协议中,一个MQTT数据包由:固定头(Fixed header)、 可变头(Variable header)、 消息体(payload)三部分构成。MQTT的传输格式非常精小,最小的数据包只有2个bit,且无应用消息头。

下图是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的长度根据数据报长度来计算。

主要是一对一的协议

举个例子:

比如某个设备需要从服务器端查询当前温度信息。

a.请求消息(CON): GET /temperature , 请求内容会被包在CON消息里面

b.响应消息 (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协议的两个过程,Request和Response,两个都有各自的语言格式,我们看下是什么。

请求报文格式:(注意这里有个换行)

响应报文格式:(注意这里有个换行)

方法method:

这个很重要,比如说GET和POST方法,这两个是很常用的,GET就是获取什么内容,而POST就是向服务器发送什么数据。当然还有其他的,比如HTTP 1.1中还有:DELETE、PUT、CONNECT、HEAD、OPTIONS、TRACE等一共8个方法(HTTP Method历史:HTTP 0.9 只有GET方法;HTTP 1.0 有GET、POST、HEAD三个方法)。

请求URL:

这里填写的URL是不包含IP地址或者域名的,是主机本地文件对应的目录地址,所以我们一般看到的就是“/”。

版本version:

格式是HTTP/.这样的格式,比如说HTTP/1.1.这个版本代表的就是我们使用的HTTP协议的版本,现在使用的一般是HTTP/1.1

状态码status:

状态码是三个数字,代表的是请求过程中所发生的情况,比如说200代表的是成功,404代表的是找不到文件。

原因短语reason-phrase:

是状态码的可读版本,状态码就是一个数字,如果你事先不知道这个数字什么意思,可以先查看一下原因短语。

首部header:

注意这里的header我们不是叫做头,而是叫做首部。可能有零个首部也可能有多个首部,每个首部包含一个名字后面跟着一个冒号,然后是一个可选的空格,接着是一个值,然后换行。

实体的主体部分entity-body:

实体的主体部分包含一个任意数据组成的数据块,并不是所有的报文都包含实体的主体部分,有时候只是一个空行加换行就结束了。

下面我们举个简单的例子:

请求报文:

GET /index.html HTTP/1.1

Accept: text/*

Host:www.myweb.com

响应报文:

HTTP/1.1 200 OK

Content-type: text/plain

Content-length: 3

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。

功能

传输的是与即时通讯相关的指令。在以前这些命令要么用2进制的形式发送(比如QQ),

要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。而XMPP传输的即时通讯指令

的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。

举个例子看看所谓的XML(标准通用标记语言的子集)流是什么样子的?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2870

    文章

    41639

    浏览量

    358410
  • MQTT
    +关注

    关注

    5

    文章

    538

    浏览量

    21978

原文标题:物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    通信协议解读:CoAP/LWM2M协议MQTT协议

    本文将分别解读CoAP/LWM2M协议MQTT协议,希望能帮助您了解这些协议,并选择最适合您的
    的头像 发表于 12-04 14:09 1.2w次阅读
    通信<b class='flag-5'>协议</b>解读:<b class='flag-5'>CoAP</b>/LWM2M<b class='flag-5'>协议</b>和<b class='flag-5'>MQTT</b><b class='flag-5'>协议</b>

    【eBox生态圈】进步篇:移植超级火的MQTT联网协议,进攻联网

    `这个互联网的年代,如果你不支持联网就不要出来混啦!科普:MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通
    发表于 11-24 00:19

    联网传输协议MQTT到底是个什么?

    MQTT是什么?MQTT是一个联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的
    发表于 01-08 11:27

    联网的恶补MQTT

    很多做联网的很多人都听说过MQTT,但是MQTT到底跟传统的HTTP协议的优势在哪里,可能很多
    发表于 07-08 11:36

    联网的必须要恶补的MQTT

    本帖最后由 cuihu 于 2016-7-8 12:01 编辑 很多做联网的很多人都听说过MQTT,但是MQTT到底跟传统的HTTP
    发表于 07-08 11:55

    联网项目开发必读 深度分析MQTT协议优缺点

    解决这一方面的问题。什么是MQTT协议MQTT是一个由IBM主导开发的联网传输协议,它被设计
    发表于 07-08 16:04

    工业无线MQTT联网网关

    通信)和非常少的开销(较之 HTTP协议)。 在 3G 网络中,MQTT 的吞吐量速度是使用 HTTP 的表述性状态转移 (REST) 的 93 倍。工业无线
    发表于 02-07 14:00

    另一个角度看联网协议

    MCU集成了以太网控制器,简化了联网的工作。联网协议栈你可以使用熟悉的Web技术来构建物联网系统吗?答案是肯定,但没有使用新的
    发表于 10-12 10:09

    为什么 MQTT 是最适合联网的网络协议

    解为什么 MQTT 如此适合 IoT 开发人员,我们首先来分析一下为什么其他流行网络协议未在 IoT 中得到成功应用。为什么不选择HTTP
    发表于 03-03 15:52

    【直播预热】Harmony MQTT/CoAP应用指南——火热报名中

    (Hi3861V100) HarmonyOS联网应用开发实战分享系列课程的第五课,也是此系列课程的最后一课,将为各位开发者详细讲解鸿蒙MQTT/CoAP应用。 讲师简介许思维——江苏
    发表于 12-09 17:18

    【HarmonyOS HiSpark AI Camera试用连载 】萌新闯关之联网COAP协议梳理二

    名的消息协议MQTTXMPP,以及本文 要介绍的COAP协议.对于那些
    发表于 12-15 20:21

    联网的基石-MQTT协议初识

    1、联网的基石-mqtt协议初识随着 5G 时代的来临,万互联的伟大构想正在成为现实。联网
    发表于 09-08 16:03

    联网硬件接入之通信协议MQTT,CoAP,LwM2M协议)的详细资料概述

    本文档的作用内容详细技术的是物联网硬件接入之通信协议MQTT,CoAP,LwM2M协议)的详细资料概述。
    发表于 09-11 16:25 18次下载
    物<b class='flag-5'>联网</b>硬件接入之通信<b class='flag-5'>协议</b>(<b class='flag-5'>MQTT</b>,<b class='flag-5'>CoAP</b>,LwM2M<b class='flag-5'>协议</b>)的详细资料概述

    联网硬件接入之通信协议MQTT,CoAP,LwM2M协议)的详细资料概述

    本文档的作用内容详细技术的是物联网硬件接入之通信协议MQTT,CoAP,LwM2M协议)的详细资料概述。
    发表于 09-11 16:25 280次下载
    物<b class='flag-5'>联网</b>硬件接入之通信<b class='flag-5'>协议</b>(<b class='flag-5'>MQTT</b>,<b class='flag-5'>CoAP</b>,LwM2M<b class='flag-5'>协议</b>)的详细资料概述

    联网应用中,为什么MQTT干掉了HTTP

    HTTP作为当下使用最为广泛的协议之一,但随着物联网行业的发展,MQTT在过去的几年也受到了大量物联网开发人员的青睐。下面我们就分别对
    的头像 发表于 04-27 09:33 464次阅读
    物<b class='flag-5'>联网</b>应用中,为什么<b class='flag-5'>MQTT</b>干掉了<b class='flag-5'>HTTP</b>?