1、LwM2M是什么
官方文档:http://www.openmobilealliance.org/release/LightweightM2M/
release: http://openmobilealliance.org/wp/index.html
LwM2M的全称是Lightweight Machine-To-Machine,由OMA(Open Mobile Alliance)提出并定义的。OMA这个组织专注于移动通讯以及物联网产业的标准开发,给自己的定位是“规范大工厂”。
LwM2M协议原则上是一种设备管理协议,但不限于设备管理,应该能够传输服务/应用程序数据,是适用于资源有限的终端设备管理的轻量级物联网协议。这个协议基于COAP协议,COAP协议基于UDP协议。
那什么是CoAP协议?Constrained Application Protocol (CoAP) 是受约束设备的专用Internet应用程序协议。随着“万物皆可联”概念的兴起,物联网终端数目急剧膨胀,由于物联网设备大多都是资源限制型的,有限的CPU、RAM、Flash、网络宽带等。对于这类设备来说,想要直接使用现有网络的TCP和HTTP来实现设备实现信息交换是不现实的。于是为了让这部分设备能够顺利接入网络,CoAP协议就被设计出来了。CoAP是一个完整的二进制应用层协议,消息格式紧凑,默认运行在UDP上。
LwM2M是一种轻量级的、标准通用的物联网设备管理协议,可用于快速部署客户端/服务器模式的物联网业务。为物联网设备的管理和应用建立了一套标准,它提供了轻便小巧的安全通信接口及高效的数据模型,以实现M2M设备管理和服务支持。目前的成熟版本号是1.1。
LwM2M协议栈:
2、协议功能
LwM2M协议主要功能特性包括:
- 基于资源模型的简单对象
- 资源操作:创建/检索/更新/删除/属性配置
- 资源的观察/通知
- 支持的数据格式:TLV/JSON/Plain Text/Opaque
- 传输层协议:UDP/SMS
- 安全协议:DTLS
- NAT/防火墙应对方案: Queue模式
- 支持多LwM2M Server
- 基本的M2M功能:LwM2MServer,访问控制,设备,网络连接监测,固件更新,位置和定位服务,统计
3、架构体系
4、协议逻辑实体
LWM2M 定义了三个逻辑实体:
- LWM2M Server 工作服务器
- LWM2M client 客户端 负责执行服务器的命令和上报执行结果
- LWM2M Bootstrap server 引导服务器负责配置LWM2M客户端
5、通信接口定义
LwM2M引擎主要有两个组件:LwM2M服务器和LwM2M客户端。LwM2M标准为两个组件之间的交互设计了4种主要的接口,LwM2M的4种接口被分为上行操作和下行操作。
上行操作:LwM2M Client -> LwM2M Server
下行操作:LwM2M Server -> LwM2M Client
接口模型如下:
-
设备注册
注册接口的目的是使LwM2M客户端与LwM2M服务器互联,将LwM2M客户端的相关信息存储在LwM2M服务器上。只有完成注册后,LwM2M客户端与服务器端之间的通信与管理才成为可能。
LwM2M服务器必须支持该接口中的所有操作,而LwM2M客户端必须支持“Register”,“Update”和“De-register”操作。客户端注册接口使得一个LwM2M客户端注册到一个或多个服务器上,并且通过LwM2M维护每一个注册和注销。
注册基于Resource Model和identifier,客户端注册时,执行“注册”接口操作,并提供需要与服务端连接的属性,比如endpoint name。客户端会定期执行“update”操作,去更新他在服务端的注册信息,也可能什么都不更新,如果在周期内没有收到客户端的更新请求,服务端需要移除这个客户端的注册信息,客户端在下一步交流之前需要重新连接服务端。
客户端注册接口示例流程:
-
引导程序
引导接口的目的是向LwM2M客户端提供注册到LwM2M服务器的必要信息,使得客户端能通过注册接口注册到一个或多个LwM2M Server上。LwM2M Enabler支持四种引导模式:
Factory Bootstrap
Bootstrap from Smartcard
Client Initiated Bootstrap
Server Initiated Bootstrap
最后两种引导模式需要借助LwM2M引导服务器来实现LwM2M客户端连接到它的一个或多个LwM2M服务器。
LwM2M客户端必须支持启动接口中指定的至少一种引导模式。
LwM2M引导服务器必须支持定义在启动接口的Client Initiated Bootstrap and Server Initiated Bootstrap modes。
-
设备管理和服务实现
设备管理与服务实现接口的主控方为LwM2M服务器,服务器向客户端发送指令,客户端对指令做出回应并将回应消息发送给服务器。
LwM2M Server使用设备管理和服务实现接口来访问注册到服务端的LwM2M Client的对象实例和资源。该接口包括7种操作:“Create”、“Read”、“Write”、“Delete”、“Execute”、“Write Attributes”和“Discover”。Resource支持的操作通过对象模板在对象定义中定义。
接口交互流程示例:
-
信息上报
信息上报接口允许LwM2M服务器端向客户端订阅资源信息,客户端接收订阅后按照约定的模式向服务器端报告自己的资源变化情况。
信息上报接口用于LwM2M Server观察注册到server的客户端上的recourse的任何变化,并且接收客户端报告的资源变化情况,这个观察关系的建立是通过服务端向客户端上的对象,对象实例或者资源发送“observe”操作。当执行“cancle observation”操作是观察关系结束。
信息上报接口流程示例:
6、对象定义
LwM2M协议有以下几个突出特点:
协议基于REST架构。
协议的消息传递是通过CoAP协议来达成的。
协议定义了一个紧凑高效又不乏扩展性的数据模型。
由于协议的服务对象是资源有限的终端设备,传统的HTTP数据传输方式显得过分笨重,难以支持受限资源,因此选择了具备REST风格的CoAP来完成消息和数据传递。一方面CoAP基于UDP,与TCP相比,在网络资源有限及无法确保设备始终在线的环境里更加游刃有余(出于安全性考虑,使用了基于UDP的DTLS安全传输协议)。另一方面CoAP本身的消息结构非常简单,报文压缩,主要部分可以做到特别小巧,无需占用过多资源。
出于类似的考虑,协议的数据结构必须足够简单。LwM2M协议定义了一个以资源(Resource)为基本单位的模型,每个资源可以携带数值,可以指向地址,以表示LwM2M客户端中每一项可用的信息。资源都存在于对象实例中(Object Instance),即对象(Object)的实例化。
对象是逻辑上用于特定目的的一组资源的集合。例如固件更新对象,它就包含了用于固件更新目的的所有资源,例如固件包、固件URL、执行更新、更新结果等。使用对象的功能之前,必须对该对象进行实例化,对象可以有多个对象实例,对象实例的编号从0开始递增。
OMA定义了一些标准对象,LwM2M协议为这些对象及其资源已经定义了固定的ID。例如:固件更新对象的对象ID为5,该对象内部有8个资源,资源ID分别为0~7,其中“固件包名字”这个资源的ID为6。因此,URI 5/0/6表示:固件更新对象第0个实例的固件包名字这个资源。OMA的LwM2M规范中定义了7个标准对象:
考虑到扩展性,协议也允许根据实际需要自定义更多的对象。在这样的数据模型中,资源、对象实例以及对象都是用数字对应的ID来表示的,以实现最大程度的压缩,因此任何资源都可以用最多3级的简洁方式表示,例如/1/0/1表示服务器对象(Server Object)第1个实例中的服务器短ID资源。 在注册阶段,LwM2M客户端把携带了资源信息的对象实例传递给LwM2M服务器,以通知服务器自身设备所具备的能力。
7、资源定义
LwM2M定义了一个资源模型,所有信息都可以抽象为资源以提供访问。资源是对象的内在组成,隶属于对象,LwM2M客户端可以拥有任意数量的资源。和对象一样,资源也可以有多个实例。
LwM2M客户端、对象以及资源的关系如图所示:
8、固件升级
LwM2M的固件升级对象使得固件升级的管理成为可能。固件升级对象包括安装固件包、更新固件、以及更新固件之后执行的其它动作。成功进行了固件升级后,device必须要重启,以使新的固件生效。
在设备重启之后,如果“Packet”资源包含了一个合法的但还未被安装的固件包,“State”资源必须为<Downloaded>状态, 否则须为<Idle>状态。
在设备重启之前,标识更新结果的相关数值必须保存。
固件升级状态之间的变换关系如图所示:
固件升级流程如图所示:
9、协议实现
LwM2M协议的主要开源实现有以下几个:
OMA LwM2M DevKit:提供可视化界面与LwM2M服务器交互。
Eclipse Leshan:基于Java,提供了LwM2M服务器与LwM2M客户端的实现。
Eclipse Wakaama:基于C,提供了LwM2M服务器与LwM2M客户端的实现。
AVSystem Anjay:基于C,提供了LwM2M客户端的实现。
Reference:
https://www.jianshu.com/p/11d34008f486
https://liteos.github.io/sdk/sdk-lwm2m.html
https://boke.maoxiaomiyy.com/wp-content/uploads/OMA-TS-LightweightM2M-V1_0-20170208-A.pdf