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

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

主要是一对一的协议

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

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

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

<method> <request-URL> <version>

<headers>

<entity-body>

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

<version> <status> <reason-phrase>

<headers>

<entity-body>

方法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/<major>.<minor>这样的格式,比如说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(标准通用标记语言的子集)流是什么样子的?

客户端:

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协议具有一定的优势。因为目前国内外主要的云计算服务商,比如阿里云、AWS、百度云、Azure以及腾讯云都一概支持MQTT协议。还有一个原因就是MQTT协议比CoAP成熟的要早,所以MQTT具有一定的先发优势。但随着物联网的智能化和多变化的发展,后续物联网应用平台肯定会兼容更多的物联网应用层协议。

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

  1. 现场解析服务化 即时通讯方案丨网络协议,应用层协议的选择

    90分钟解析服务化 即时通讯方案,(不要错过) 1. 网络协议选择 udp/tcp 2. 应用层协议选择 protobuf/xmpp/mqtt 3. 数据库表的设计 视频讲解如下,点击观看: [Lin ...

  2. 主流物联网协议选择:MQTT、CoAP 还是 LwM2M?

    随着物联网技术的发展与普及,越来越多的智能设备具备了网络连接与数据传输能力.由于物联网场景复杂多样,设备端硬件条件.网络稳定性.流量限制.设备功耗以及设备连接数量等多方面因素造成物联网设备的消息传递与 ...

  3. 物联网协议对比(HTTP、websocket、XMPP、COAP、MQTT和DDS协议)

    目录 1.HTTP和websocket 2.XMPP 3.COAP 4.MQTT协议 5.DDS 对于物联网,最重要的是在互联网中设备与设备的通讯,现在物联网在internet通信中比较常见的通讯协议 ...

  4. 物联网通讯协议:MQTT,NB-IOT,Zigbee,CoAP,RFID,BLUETOOTH,NFC,4G,HTTP

    目录 一.按网络四层协议分类 二.按需要网关来分类 三.NB-IoT,4G对比 四.应用层协议:MQTT和COAP对比 物联网组网技术 WIFI 蓝牙 ZigBee 2G/4G/5G NB-IoT L ...

  5. 物联网协议比较 MQTT CoAP RESTful/HTTP XMPP

    物联网协议 Protocol CoAP XMPP RESTful HTTP MQTT Transport UDP TCP TCP TCP Messaging Request/Response Publ ...

  6. 物联网常用协议:MQTT、CoAP、LwM2M、HTTP、LoRaWAN和NB-IoT

    目录 1.MQTT协议 2.MQTT-SN协议 3.CoAP协议 4.LwM2M协议 5.HTTP协议 6.LoRaWAN协议 7.NB-IoT协议 物联网,即物的互联网,属于互联网的一部分.物联网将 ...

  7. 基于MQTT应用层协议的物联网家庭温湿度监测系统

    引言 出生于互联网时代的我们,见证了智能手机和个人电脑通过计算机网络互相进行连接,把每个人紧密地连接在一起,形成了一个地球村.而今,我们即将迈入5G时代,在通信技术不断发展的今天,连接到互联网的将不仅 ...

  8. 物联网常用协议 MQTT介绍

    转载于 https://www.jianshu.com/p/ecde412d2eeb 简介 MQTT 全称为 Message Queuing Telemetry Transport(消息队列遥测传输) ...

  9. 物联网相关协议整理(HTTP、MQTT、SOCKET)

    互联网和物联网发展至今,已产生一些相关的通信协议,这里包括HTTP.MQTT.SOCKET这些平时接触的技术词汇,在这里做些整理和归纳. HTTP:应用层协议,HTTP协议即超文本传送协议(Hyper ...

最新文章

  1. Java异常类(Throwable)
  2. linux read命令用法
  3. c++清空串口缓冲区
  4. 单例设计模式 优缺点 及 使用场景
  5. 三国也风流服务器怎么不稳定呢,三国也风流手游
  6. 程序员背锅救星-docker
  7. 韩国与日本历年GDP总量和人均GDP的对比(1953-2020年)
  8. Referenced file contains errors解决
  9. 自定义微信小程序顶部导航栏(自适应微信胶囊按钮,flex布局)
  10. EI国际会议计算机2018,【Ei检索】2018年自动控制,机电和工业工程国际会议
  11. attempting to bokeyaunrun eclipse useing the jre instead of jdk,to run eclipse using
  12. 多视图几何学(Multiple View Geometry)读书笔记目录
  13. C语言学习——fscanf()返回值
  14. Android面试题目及其答案
  15. 原来漏斗分析应该这样用!
  16. 实现Fegin远程调用
  17. 域名是否被墙的辨别及解决方法
  18. 安卓自定义View画钟实现转动
  19. win10 metro app(应用商店中的APP)如何走代理?
  20. 分享一个表情包gif动图制作的简单办法

热门文章

  1. 【STM32】【STM32CubeMX】STM32CubeMX的使用之八:低功耗模式及MCU唤醒
  2. arm 饱和指令_ARM内核全解析,从ARM7,ARM9到CortexA7,A8,A9,A12,A15到CortexA53,A57
  3. Linux中断(interrupt)子系统之一:中断系统基本原理
  4. Ubuntu IP设置为静态
  5. jwt实现单点登录,基础讲解加实战!!!
  6. python 字符串排序 偶数位交换_在Python中将字符串列表转换为整数排序列表
  7. linux虚拟机备份树莓派,为树莓派做系统备份镜像(for Linux #038; Mac),
  8. java 批量执行 sql_执行批量操作 - SQL Server | Microsoft Docs
  9. 《深入理解分布式事务》第五章 强一致性分布式解决方案
  10. 《深入理解 Spring Cloud 与微服务构建》第九章 熔断器 Hystrix