物联网应用层协议选择和分析--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的长度根据数据报长度来计算。
主要是一对一的协议
举个例子:
比如某个设备需要从服务器端查询当前温度信息。
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(标准通用标记语言的子集)流是什么样子的?

联发科该不该存在?论联发科的重要性
电动汽车冬季不好过,究竟是什么原因造成的
基于WM2002设计的立体声耳机驱动方案
航天科工无人机灭火系统高原试验完成,具备群体协同消防作战能力
还在用牙签、纸巾、保鲜膜按电梯吗?智慧电梯冲刺IoT新风口
物联网应用层协议选择和分析--MQTT、CoAP 、HTTP、XMPP、SoAP
通过手持糖度计来研究水果的成熟度与甜度
OPPO Reno2视频防抖究竟多厉害?两大技术加持只为“画面稳”
具市场分析指纹识别传感器市场发展前景可佳
如何测量信号完整性均衡后的符号间干扰
贞光科技代理品牌_大普通信RTC芯片荣获 “2022年度最佳信号链芯片”大奖
“十二五”3G、4G投资规模将超万亿
大连化物所晶圆六方氮化硼成功外延
中国集成电路行业现状及发展趋势分析
AP5174车灯IC内置MOS_DCDC降压恒流芯片带过温保护
一份有关SOUL EV升级版的资料介绍
载具自动回流线
天数智芯与南京未来网络合作 共同探索新型算力基础设施建设方案
大唐恩智浦荣获“车规级模拟类芯片优质供应商”荣誉称号
AI深陷“亏损门”,人工智能产业化路在何方?