LwM2M简介
1、LwM2M是什么
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协议主要功能特性包括:
1. 基于资源模型的简单对象
2. 资源操作:创建/检索/更新/删除/属性配置
update是什么3. 资源的观察/通知
4. ⽀持的数据格式:TLV/JSON/Plain Text/Opaque
5. 传输层协议:UDP/SMS
6. 安全协议:DTLS
7. NAT/防⽕墙应对⽅案: Queue模式
8. ⽀持多LwM2M Server
9. 基本的M2M功能:LwM2MServer,访问控制,设备,⽹络连接监测,固件更新,位置和定位服务,统计
3、架构体系
4、协议逻辑实体
LWM2M 定义了三个逻辑实体:
1. LWM2M Server ⼯作服务器
2. LWM2M client 客户端 负责执⾏服务器的命令和上报执⾏结果
3. 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>状态。
在设备重启之前,标识更新结果的相关数值必须保存。
固件升级状态之间的变换关系如图所⽰:
固件升级流程如图所⽰: