在物联网应用开发中,进场会碰到LwM2M和CoAP,有时会会不知道选哪种合适。例如当出现LwM2M/CoAP这种配合时,可能会想这种连接方式到底是用LwM2M还是用CoAP,我的设备开发时,选LwM2M与物联网平台连接呢?还是选择CoAP与物联网连接呢?要弄明白这些,需要对LwM2M和CoAP是什么以及它们之间的关系有一些了解。

1. LwM2M-Light Weight Machine to Machine

LwM2M是一种主要用于设备管理方面的应用层通信协议。通信一些采用了服务器和客户端的架构,即Server/Client。客户端通常是在设备端。设备端的资源通常是有限的,例如一个基于STM32F407的嵌入式设备,它的计算资源相比普通PC、服务器来说是比较少的,所以说是有限的。因此,LwM2M采用了轻量的、紧凑的通信协议以及有效的资源的数据模型。适合用于设备管理以及设备与设备之间的通信。如下是它的架构图。

LwM2M协议架构图 lwm2m和coap协议的区别_客户端

从架构图中可以看出,它主要包括服务端和客户端。接入物联网的设备属于客户端,物联网平台属于服务端。协议定义了服务端和客户端之间通信的4个接口,即启动引导接口、客户端注册接口、设备管理和服务使能接口、信息报告接口。在它的规范书中对这四个接口的具体功能、含义、需要实现的函数、函数的功能及参数等多级做了具体的说明。

在架构图中,可以看到其用到的协议栈。通常协议栈是按功能分层的。要实现协议规定的应用层内容,需要用到的协议栈,如下图所示。

LwM2M协议架构图 lwm2m和coap协议的区别_客户端_02

协议栈是分层的,通常底下的层是上面层的基础。没有地下层就无法实现上面的层。那么从这里我们可以看出LwM2M是建立在COAP上层的应用层协议。没有CoAP就无法实现现在的LwM2M。

2. CoAP-Constrained Application Protocol

CoAP是一种专门应用于资源有限的网络中,或者资源有限的网路节点上的网络传输协议。这里的资源有限的网络节点,可以理解为要接入互联网中的设备。这些设备接入互联网之后,就是属于网络中第一个节点了。物联网中的很多设备的计算资源都是有限的。协议设计指出也是为了机器与机器之间的通信。例如智慧能源或者智能楼宇中的设备之间。

CoAP实现了一种请求/响应式的机器与机器之间交互的协议。从逻辑分析上看,CoAP可以看成只有两个层,即消息层和请求/响应层。

LwM2M协议架构图 lwm2m和coap协议的区别_php lwm2m_03

CoAP协议主要定义了CoAP的消息的头部内容。通常消息的头后面就会有消息要传递的数据信息。这一部分有时称为消息要传输的payload。

3. LwM2M和CoAP的不同之处

根据上述的分析,可以总结如下的不同

1)两者是处在不同层上的通信协议。LwM2M是应用层的协议,它的实现需要传输层的CoAP来实现。

2)CoAP是传输层的协议,没有LwM2M,对于使用CoAP是没有影响的。但是,这是就需要交互的双方自己定义应用层的协议了。

3)一个设备具有LwM2M协议,要与物联网平台对接,那么平台也需要支持LwM2M协议。

4)一个设备只有CoAP协议,要与平台对接,那么就需要平台提供通过CoAP协议与该设备对接的具体协议方法。如果平台只提供通过LwM2M协议用于设备接入,那么只具有CoAP协议的设备是无法接入都平台的。不过,LiteOS提供了端云通信组件,该组件实现了LwM2M协议,可以应用该组件实现LwM2M协议,实现与IoTDA的对接。