【我的物联网成长记7】物联网主流通信协议解读【华为云分享】

【摘要】 当今物联网的主流通信协议是CoAP/LWM2M协议和MQTT协议,本文将会为您分别解读这些协议的工作方式,了解它们的特点,助您选择最适合您的设备的通信协议。

通信协议又称为传输协议,用于定义多个设备之间传播信息时的系统标准。通信协议定义了设备通信中的语法、语义、同步规则和发生错误时的处理原则,可以理解为机器之间使用的语言。

在物联网场景中,通信主要发生在设备和物联网平台之间,由于大部分物联网设备都是资源受限型设备,它们的物理资源和网络资源都非常有限,直接使用现有的HTTP协议进行通信对它们来说要求实在是太高了。因此,物联网场景中主要使用的通信协议都是轻量级的,为资源受限环境而设计的通信协议,例如CoAP/LWM2M协议和MQTT协议。

本文将会为您分别解读CoAP/LWM2M协议和MQTT协议,希望能帮助您了解这些协议,并选择最适合您的设备的通信协议。

CoAP/LWM2M协议

CoAP(Constrained Application Protocol,受限制的应用协议)运行于UDP协议之上,设计上主要借鉴了HTTP协议的RESTful风格,简化了协议包格式,一个最小的CoAP数据包仅4字节。CoAP协议采用了和HTTP协议相同的请求/响应模型,客户端发出请求后,服务端处理请求并回复响应,是一种点对点的通信模型。CoAP和HTTP一样都是通过URI指定要访问的资源,但CoAP协议以“coap:\\”或"coaps:\\"开头,其中coaps的s是指消息通过DTLS协议加密。CoAP的每一条消息都是一条二进制的报文,由以下部分组成:

VER:长度2位,用于表示CoAP协议的版本号。

T:长度2位,用于表示报文类型。CoAP协议定义了四种报文类型:

CON:需要应答的报文,接受者收到该消息后需要及时回复一个ACK报文。

NON:无需应答的报文。

ACK:应答报文。

RST:复位报文,当接受者无法解析收到的报文或收到的报文中含有错误时,可以回复RST报文。

TKL:长度4位,用于表示Token字段的长度。

Code:长度8位,在请求消息中用于表示请求方法(GET/POST/PUT/DELETE),在响应消息中表示响应码(与HTTP的响应码类似)。

Message ID:长度16位,用于标识报文。主要用途有两个,一个是服务端收到CON报文后,需要返回相同Message ID的ACK报文;另一个是重发场景下,用相同的Message ID表示这是同一条报文的重复发送。

Token:可选字段,长度由TKL决定,同样用来标识报文。例如,有时候服务端收到CON报文(携带了Token)后,请求的内容无法立刻处理完成,就只能先回复一个不带响应数据的ACK报文,待请求处理完成后再通过一个CON或者NON报文将实际响应数据带给客户端;此时这个报文就必须携带和之前的CON报文相同的Token,告诉客户端这个报文是之前的CON报文的响应。

同理,若客户端发送NON报文进行请求,服务端也可同样使用NON报文进行响应,两个报文使用Token进行关联。除此之外,Token还可用于消息防伪造等场景,此处不再展开说明。

Options:可选字段,长度不定,作用类似于HTTP协议中的消息头。

1 1 1 1 1 1 1 1:隔离符,用于分隔Options和Payload。

Payload:实际负载数据,即HTTP协议中的消息体,用于携带这条消息实际的内容,可以为空。

若您希望了解更多CoAP协议的内容,可访问IETF的网站查看详细协议。

>>点击查看CoAP协议规范

了解过CoAP协议后,接下来我们再了解下LWM2M协议。

LWM2M(Lightweight Machine-To-Machine,轻量级M2M)协议是由由OMA(Open Mobile Alliance)提出并定义的基于CoAP协议的物联网通信协议。LWM2M协议在CoAP协议的基础上定义了接口、对象等规范,使得物联网设备和物联网平台之间的通信更加简洁和规范。

LWM2M协议定义了三个逻辑实体:LWM2M Server(服务端),LWM2M Client(客户端),LWM2M Bootstrap Server(引导服务),其中LWM2M Server和LWM2M Bootstrap Server可以是同一个服务器。在这些实体间,LWM2M协议定义了四个接口:

Bootstrap:引导接口。客户端首次启动后,可以通过该接口访问引导服务(需要厂家提前把引导服务器的地址写入设备),获取服务端的地址。

Device Discovery and Registration:设备发现与注册接口。客户端通过该接口将自己的基本信息写到服务端,包括自己支持哪些能力。该接口同时还可以用于升级注册信息和注销设备。

Device Management and Service Enablement:设备管理和业务实现接口。服务端通过该接口给客户端下发指令,客户端处理指令并返回响应。该接口定义了7种操作,分别是:“Create”、“Read”、“Write”、“Delete”、“Execute”、“Write Attributes”和“Discover”。

Information Reporting:信息上报接口。LWM2M允许服务端向客户端订阅资源信息,客户端被订阅后按照接口约定的模式(事件触发或定期)向服务端主动上报信息。

在上述接口中,服务端对客户端进行操作时都需要指定一个具体的操作目标,例如读某个属性,写某个属性。在HTTP协议中,这种目标的指定是通过URI或者消息体内携带的文本消息进行指定。而LWM2M协议为了使通信消息更加简洁,定义了对象和资源的概念。

对象是资源的集合,LWM2M协议定义了8个标准对象,给它们分别分配了0~7的对象ID,例如对象ID为5的是固件对象。考虑到拓展性,LWM2M协议也允许使用者自定义新的对象并分配对象ID。

每个对象在被使用之前必须先被实例化,因为对象都是抽象的模型,一个对象可以有多个实例,每个实例为一个单独的逻辑实体。对象实例化时会被分配实例ID,从0开始递增。

资源则可以理解为对象的属性,是LWM2M协议中实际用于携带信息的实体。同一个对象的不同实例中的资源携带值可以是不同的。每个资源都需要被分配了一个资源ID,例如固件对象的固件包名称的资源ID为6。和对象一样,LWM2M协议也允许自定义资源。

至此,通过对象ID,实例ID和资源ID,我们就可以用三个数字指示一个具体的资源,例如5/0/6表示固件对象第一个实例的固件包名称。在注册阶段,客户端就会把自己支持的对象的示例写入服务端,用于通知服务端自己支持的能力。

若您希望了解更多LWM2M协议的内容,可访问OMA的网站查看详细协议。

>>点击查看LWM2M协议规范

MQTT协议
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)协议运行于TCP协议之上,是一种基于发布/订阅模型的通信协议。在发布/订阅模型模型中,我们需要一个代理服务器(通常称之为Broker),所有客户端都需要和服务器建立连接,然后进行订阅和发布。若某个客户端发布了其他客户端已订阅的主题(MQTT协议中称之为topic),服务器就会将这个主题转发给所有已订阅的客户端。例如有A、B、C三个客户端都连上了同一个服务器,B和C订阅了“test”主题,然后A发布了一个主题为“test”的消息,服务器就会把这条消息转发给B和C。

在物联网场景中,物联网平台既是一个服务器又是一个客户端。平台制定一套主题规则(我们可以称之为MQTT接口),并订阅数据上报类接口的主题,然后只要设备使用该接口上报数据,平台就可以接收到数据。同理,设备若想要收到平台下发的数据,需要先订阅数据下发类接口的主题。

MQTT消息基于文本传输,主要有以下三类消息:

CONNECT:当客户端想要和服务器建立连接时,需要发送一条CONNECT消息给服务器,消息内包含自己的用户名、密码等信息,服务器鉴权通过后,和客户端建立连接。若双方想要断开连接,则需要遵循TCP协议的四次挥手规则,才能正常断开连接。客户端在发送CONNECT消息时,还可以指定“最后遗愿(last will)”消息,包括消息的主题和内容。当服务器检测到客户端异常断开连接时,就会自动发布这条“最后遗愿”消息。

SUBSCRIBE:当客户端订阅主题时,需要发送一条SUBSCRIBE消息给服务器,指定要订阅的主题。MQTT协议的主题表示为层次结构,类似文件系统,例如“/huawei/v1/devices”这种格式。同理,客户端可以通过UNSUBSCRIBE消息取消订阅指定主题。

PUBLISH:当客户端发布消息时,需要发送一条PUBLISH消息给服务器,指定消息的主题和内容。MQTT对发布消息的内容格式不做限制,需要由各个服务提供商自行制定规范。客户端发布消息时可以指定该消息是否需要保留,一个主题只能保留一条消息,被保留的消息会被代理服务器记录,以后每个新订阅这个主题的客户端都会先接收到这条保留消息。

在可靠传输方面,MQTT协议提供三种QoS等级的实现:

QoS=0表示消息只会被发送一次,但该消息可能会丢失。

QoS=1表示确保消息会到达至少一次,但可能会造成订阅者收到多条重复消息。

QoS=2表示确保消息会到达且仅到达一次。

QoS等级越高,消息传输的可靠度越高,但实现也会越复杂,对网络和设备资源的占用也会变多,所以传输时选用哪个级别的QoS需要根据实际状况选择。

若您希望了解更多MQTT协议的内容,可访问MQTT的官网查看详细协议。

>>点击查看MQTT协议规范

总结
在分别了解过CoAP/LWM2M协议和MQTT协议之后,我们可以得知,LWM2M协议是基于CoAP协议的一种具体规范,而MQTT协议是不同于CoAP协议的另一种传输协议。

CoAP/LWM2M协议基于UDP协议,服务器和客户端之间不保持连接;通信基于请求/响应模型,与互联网主流的HTTP协议相同,主要用于点对点的通信。CoAP/LWM2M协议针对物联网场景定义了各种类型和标签,支持内容协商与发现,允许设备相互探测以找到交换数据的方式;报文为极简的二进制报文,长度更短,对设备和网络的要求更低。

MQTT协议基于TCP协议,服务端和客户端之间保持连接;通信基于分布/订阅模型,可以简单实现多对多的通信场景。MQTT协议设计简单,易于理解和学习;报文消息基于文本,消息负载格式无限制,自由度更高,更便于调测和排障时查看和理解,但同时也需要服务提供商制定通信规范(接口文档),设备之间才可进行有效通信。

综上所述,CoAP/LWM2M协议和MQTT协议各有其特点,并不存在谁优谁劣,您需要根据自己的设备的应用场景选择最适合的协议。

若您希望进一步了解使用CoAP/LWM2M协议和MQTT协议的设备分别是如何接入华为云物联网平台的,可查看华为云帮助中心的开发指南。

HDC.Cloud 华为开发者大会2020 即将于2020年2月11日-12日在深圳举办,是一线开发者学习实践鲲鹏通用计算、昇腾AI计算、数据库、区块链、云原生、5G等ICT开放能力的最佳舞台。

欢迎报名参会https://www.huaweicloud.com/HDC.Cloud.html?utm_source=&utm_medium=&utm_campaign=&utm_content=techcommunity

原文地址:https://www.cnblogs.com/huaweicloud/p/12229498.html

时间: 2024-08-29 17:40:15

【我的物联网成长记7】物联网主流通信协议解读【华为云分享】的相关文章

由浅入深了解NB-IoT | 我的物联网成长记

[摘要] 什么是NB-IoT?NB-IoT有什么优势?NB-IoT能做什么?本文将会从NB-IoT技术的发展历程,技术特点,通信协议,应用场景等方面为您全方面解读NB-IoT技术,了解NB-IoT的独特魅力. 相信很多接触过物联网的人都听过NB-IoT的名字,但NB-IoT到底是什么,它和物联网又是什么关系呢?本文接下来就会为您回答这些疑问,由浅入深,一步步带您走进NB-IoT. 物联网顾名思义,就是各种物(设备)连入网络,而根据应用场景不同,不同设备对网络速率的要求也不同.根据专家预测,202

【我的物联网成长记3】如何开发物联网应用?【华为云技术分享】

[摘要] 物联网应用是设备管理.故障监测.数据分析的重要工具.本文介绍如何基于物联网平台开发应用,包括API.SDK和图形化开发三种方式. -------------------整体方案------------------- 物联网应用是企业和开发者进行设备管理.告警&故障监测.业务监控.数据分析的重要工具.物联网平台屏蔽了设备接入的复杂性和协议的差异性,解耦应用与设备,为上层应用提供统一格式的数据,简化终端厂商开发的同时,也让应用提供商聚焦于自身的业务开发.基于华为物联网平台的应用开发方案如下

【我的物联网成长记】OceanConnect物联网平台概念全景

作者 | 我是卤蛋 华为云OceanConnect IoT云服务包括应用管理.设备管理.系统管理等能力,实现统一安全的网络接入.各种终端的灵活适配.海量数据的采集分析,从而实现新价值的创造. 华为云OceanConnect IoT云服务不仅可以简化各类终端厂家的开发,屏蔽各种复杂设备接口,实现终端设备的快速接入:同时面向各行业提供强大的开放能力,支撑各行业伙伴快速实现各种物联网业务应用,满足各行业客户的个性化业务需求. 我们将会用一系列文章为大家介绍一下华为云OceanConnect 物联网平台

如何进行端到端开发? | 我的物联网成长记

作者 | 我是卤蛋 [摘要] 自从华为物联网平台推出以来,很多开发者都在后台咨询小编设备如何上云等问题,我忍不住了,花了两天两夜,整理出“如何进行端到端开发”,帮助您快速了解设备上云全流程. 开始之前,先了解物联网平台的整体方案.使用物联网平台构建一个完整的物联网解决方案主要包括3部分:物联网平台.业务应用和设备. ---------------------------整体方案--------------------------- 物联网平台:作为连接业务应用和设备的中间层,屏蔽了各种复杂的设备

8招带你玩转规则引擎 | 我的物联网成长记

[摘要] 华为云物联网平台提供的规则引擎包括数据转发和设备联动等多种能力,这些能力都要怎么使用?本文教您8招最常用的用法,带您玩转规则引擎. 规则引擎是华为云物联网平台提供的一种能力,用户对接入平台的设备设定相应的规则,在条件满足所设定的规则后,平台会触发相应的动作来满足用户需求.规则引擎包含数据转发和设备联动两种类型. 数据转发规则:物联网平台支持将设备上报的数据(和设备信息)转发至其他云服务,包括数据接入服务DIS.对象存储服务OBS.企业集成平台ROMA等,并支持对转发的数据进行过滤. 设

蓝的成长记——追逐DBA(17):是分享,还是消费,在后IOE时代学会成长

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46456389 [简介] 个人在oracle路上的成长记录,其中以蓝自喻,分享成长中的情感.眼界与技术的变化与成长.敏感信息均以其它形式去掉,不会泄露任何企业机密,纯为技术分享. 创作灵感源于对自己的自省和记录.若能对刚刚起步的库友起到些许的帮助或共鸣,欣慰不已. 欢迎拍砖

五分钟了解物联网SIM卡 | 我的物联网成长记10

[摘要] SIM卡是移动通信中不可或缺的组成部分,在物联网解决方案中,设备移动上网也需要使用SIM卡.那么,SIM卡是什么?SIM卡有几种?各种SIM卡有什么区别?本文将为您答疑解惑. 通信进化史 过去几百年间,通信技术经历了天变地异般的发展:数百年前的古代,人们通过“烽火传讯”.“信鸽传书”.“击鼓传声”.“旗语”等利用自然界的基本规律和人的基础感官(视觉,听觉等)可达性建立通信系统. 到了19世纪中叶以后,随着电报.电话的发现,电磁波的发现,人类通信领域产生了根本性的巨大变革,从此,人类的信

蓝的成长记——追逐DBA(19):路上的插曲:触碰“框架”与“软件系统”

原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/47802553 [前言] 自接触oracle至今,愈是深入了解oracle愈是察觉到个人的渺小,时常感受到技术知识可以助推思维方式,一路走来,在汗水中收获着成长的充实,不仅局限于oracle技术,借由此系列文章,分享个人在追逐DBA道路上收获的些许感悟与成长的点滴记录.在浩

蓝的成长记——追逐DBA(18):小机上WAS集群故障,由一次更换IP引起

原创作品.出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处.否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/47720043 [简单介绍] 个人在oracle路上的成长记录,当中以蓝自喻.分享成长中的情感.眼界与技术的变化与成长.敏感信息均以其他形式去掉,不会泄露不论什么企业机密,纯为技术分享. 创作灵感源于对自己的自省和记录.若能对刚刚起步的库友起到些许的帮助或共鸣,欣慰不已.