mqtt 一对一_物联网应用层协议——MQTT、CoAP 、HTTP、XMPP、SoAP

本文详细介绍了物联网应用层的五种常见通讯协议:MQTT、CoAP、HTTP、XMPP、SoAP。MQTT基于TCP,适合资源有限的设备,具有发布/订阅模式和三种QoS级别。CoAP是基于UDP的轻量级协议,适用于资源受限的设备。HTTP是超文本传输协议,用于Web内容传输。XMPP基于XML,适用于实时通讯,而SoAP则常用于企业级数据交换。针对物联网场景,MQTT和CoAP因其低开销和灵活性而更具优势。
摘要由CSDN通过智能技术生成

对于物联网,最重要的是在与设备的通讯,现在物联网在通信中比较常见的通讯协议包括:MQTT、CoAP 、HTTP、XMPP、SoAP

01

MQTT

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

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

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

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

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

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

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

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

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

    3. QoS 2:“只有一次”,确保消息只到达一次。

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

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

下图是MQTT为可靠传递消息的三种消息发布服务质量,发布/订阅模型允许MQTT客户端以一对一、一对多和多对一方式进行通讯。

e0ebe4eb0da8bb78234c4580068db119.png

02

CoAP协议

CoAP是受限制的应用协议(Constrained Application Protocol)的代名词。由于目前物联网中的很多设备都是资源受限型的,所以只有少量的内存空间和有限的计算能力,传统的HTTP协议在物联网应用中就会显得过于庞大而不适用。因此,IETF的CoRE工作组提出了一种基于REST架构、传输层为UDP、网络层为6LowPAN(面向低功耗无线局域网的IPv6)的CoAP协议。

CoAP采用与HTTP协议相同的请求响应工作模式。CoAP协议共有4种不同的消息类型。

  1. CON——需要被确认的请求,如果CON请求被发送,那么对方必须做出响应。

  2. NON——不需要被确认的请求,如果NON请求被发送,那么对方不必做出回应。

  3. ACK——应答消息,接受到CON消息的响应。

  4. RST——复位消息,当接收者接受到的消息包含一个错误,接受者解析消息或者不再关心发送者发送的内容,那么复位消息将会被发送。

CoAP消息格式使用简单的二进制格式,最小为4个字节。一个消息=固定长度的头部header + 可选个数的option + 负载payload。Payload的长度根据数据报长度来计算。CoAP主要是一对一的协议。

03

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之间传递状态信息的单对单协议。

04

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.xxxyyy.com响应报文:HTTP/1.1 200 OKContent-type: text/plainContent-length: 32

05

HTTP与CoAP的区别

CoAP是6LowPAN协议栈中的应用层协议,基于REST(表述性状态传递)架构风格,支持与REST进行交互。通常用户可以像使用HTTP协议一样用CoAP协议来访问物联网设备。而且CoAP消息格式使用简单的二进制格式,最小为4个字节。HTTP使用报文格式对于嵌入式设备来说需要传输数据太多、太重,不够灵活。

ebd9c62b280730002c81fa2704b04666.png

06

XMPP协议

XMPP(可扩展通讯和表示协议)是一种基于可扩展标记语言(XML)的协议,XMPP继承了在XML环境中灵活的发展性。可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议。

XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

XML(标准通用标记语言的子集)流是如下所示

客户端:<?xmlversion ='1.0'?><stream:streamto='example_com'xmlns='jabber:client'xmlns:stream='http_etherx_jabber_org/streams'version='1.0'>服务端:<?xmlversion ='1.0'?><stream:streamfrom='example_com'id='someid'xmlns='jabber:client'xmlns:stream='http_etherx_jabber_org/streams'version='1.0'>

从上方例子可以看出XMPP在网络通信过程中数据冗余率非常高,网络流量中70% 都消耗在 XMPP 协议层。对于物联网来说,大量计算能力有限且工作在低带宽、不可靠网络的远程传感器和控制设备,省电、省流量是所有底层服务的一个关键技术指标,XMPP协议看起来已经落后了。

07

SoAP协议

SoAP(简单对象访问协议)是交换数据的一种协议规范,是一种轻量的、简单的、基于可扩展标记语言(XML)的协议,它被设计成在WEB上交换结构化的和固化的信息。

SoAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP)、简单邮件传输协议(SMTP)、多用途网际邮件扩充协议(MIME)。

SoAP还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP使用基于XML的数据结构和超文本传输协议(HTTP)的组合定义了一个标准的方法来使用Internet上各种不同操作环境中的分布式对象。

总体而言SoAP还是更加适用于企业级应用场景,物联网场景也和XMPP类似会传输过多的冗余数据。

08

总结

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

在Quora(美版知乎)上也有类似的探讨: 

Which is the best protocol to use for IOT implementation- MQTT, CoAP, XMPP, SOAP, UPnP?

https://www.quora.com/Which-is-the-best-protocol-to-use-for-IOT-implementation-MQTT-CoAP-XMPP-SOAP-UPnP

arXiv上有一篇论文也有对通讯协议做更加深入的讲解:

A Survey of Communication Protocols for Internet of Things and Related Challenges of Fog and Cloud Computing Integration

https://arxiv.org/pdf/1804.01747.pdf

7c6292a3c78a2b39888dc530d2fb62bb.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值