本笔记基于 OMA 发布的 Lightweight Machine to Machine Technical Specification Version 1.0.1 (OMA-TS-LightweightM2M-V1_0_1-20170704-A),旨在概述 LwM2M 1.0 协议的核心概念、架构、接口、安全机制、数据格式以及对象模型。
一、概述
LwM2M (Lightweight Machine-to-Machine) 是一种轻量级应用层通信协议,专为资源受限的物联网设备设计,旨在实现设备管理和服务使能。其主要特点包括:
- 轻量级协议设计: 采用简洁的资源模型和高效的数据传输机制。
- 多种数据传输格式: 支持 TLV、JSON、纯文本和二进制数据格式。
- 多种传输协议: 支持 UDP 和 SMS 传输。
- 基于 DTLS 的安全机制: 提供认证、机密性和数据完整性保障,支持多种凭证类型(证书、原始公钥、预共享密钥)。
- 队列模式: 允许设备在断开连接时通知服务器,并在重新连接时接收积压的消息。
- 多服务器支持: 允许设备与多个 LwM2M 服务器通信。
- 安全凭证和访问控制列表的集中配置: 通过专用的 LwM2M 引导服务器 (Bootstrap Server) 进行配置。
二、架构
LwM2M 采用 客户端-服务器 (Client-Server) 架构:
- LwM2M 设备: 作为 LwM2M 客户端 (Client),运行 LwM2M 客户端软件,负责与服务器通信并执行服务器指令。
- M2M 服务、平台或应用程序: 作为 LwM2M 服务器 (Server),负责管理设备并提供相关服务。
LwM2M 架构包含以下四个接口:
1.
引导接口 (Bootstrap Interface):
- 功能: 为 LwM2M 客户端提供必要的配置信息,使其能够注册到 LwM2M 服务器。
- 主要操作:
- Bootstrap-Request: 客户端向引导服务器发送请求以启动引导过程。
- Write/Delete: 引导服务器向客户端写入或删除配置信息。
- Bootstrap-Finish: 引导服务器指示客户端引导过程结束。
- 引导模式:
- 工厂引导 (Factory Bootstrap): 设备出厂时已预配置引导信息。
- 智能卡引导 (Bootstrap from Smartcard): 从智能卡中读取引导信息。
- 客户端启动引导 (Client Initiated Bootstrap): 客户端主动从引导服务器获取引导信息。
- 服务器启动引导 (Server Initiated Bootstrap): 服务器主动配置客户端引导信息。
2.
客户端注册接口 (Client Registration Interface):
- 功能: 客户端向服务器注册、维持注册状态以及注销。
- 主要操作:
- Register: 客户端向服务器发送注册请求,包含设备标识符、支持的 LwM2M 版本、对象和对象实例列表等信息。
- Update: 客户端定期或根据事件更新注册信息,例如刷新注册生命周期、修改绑定模式或对象实例列表等。
- De-register: 客户端通知服务器其不再可用,例如设备重置或关机。
3.
设备管理与服务使能接口 (Device Management & Service Enablement Interface):
- 功能: 服务器访问客户端上的对象实例和资源,以实现设备管理和提供相关服务。
- 主要操作:
- Read: 读取资源、对象实例或对象的所有实例的当前值。
- Discover: 发现对象、对象实例或资源上附加的 LwM2M 属性,例如观察参数。
- Write: 修改资源或对象实例的值,支持替换和部分更新机制。
- Write-Attributes: 修改通知属性,例如最小/最大周期、阈值等。
- Execute: 执行资源上的操作,例如触发设备重启或执行特定功能。
- Create: 在客户端上创建对象实例。
- Delete: 删除对象实例。
4.
信息报告接口 (Information Reporting Interface):
- 功能: 服务器观察客户端资源的变化,并在新值可用时接收通知。
- 主要操作:
- Observe: 服务器向客户端发送观察请求,指定要观察的对象、对象实例或资源。
- Notify: 客户端在满足观察条件时向服务器发送通知,包含资源的新值。
- Cancel Observation: 服务器取消对资源或对象实例的观察。
三、对象模型与资源模型
- 资源 (Resource): LwM2M 客户端提供的信息的最小单位,每个资源都属于一个对象。
- 资源可以是可读、可写、可执行或可观察的。
- 资源可以是单一实例或多重实例。
- 对象 (Object): 资源的逻辑分组,每个对象由 OMA 命名机构 (OMNA) 分配唯一的对象标识符 (Object ID)。
- 对象定义中指定了资源的操作(读取、写入、执行)和特性(必需或可选)。
- 对象可以包含多个对象实例 (Object Instance),每个实例包含一组资源实例。
- 访问控制对象 (Access Control Object): 用于管理对对象实例的访问权限,定义哪些服务器可以对特定对象实例执行哪些操作。
四、安全机制
LwM2M 1.0 基于 DTLS (Datagram Transport Layer Security) 协议实现安全通信:
- 认证: 采用相互认证机制,确保通信双方的身份。
- 客户端和服务器都需要在 DTLS 握手过程中验证彼此的身份。
- 引导服务器和客户端之间的认证同样采用相互认证。
- 机密性和数据完整性: DTLS 加密通信数据并提供完整性保护。
- 凭证类型:
- 预共享密钥 (Pre-Shared Keys, PSK): 双方共享的密钥,适用于资源受限的设备。
- 原始公钥 (Raw Public Keys, RPK): 使用非对称加密技术,但无需完整的公钥基础设施。
- X.509 证书 (X.509 Certificates): 基于公钥基础设施 (PKI) 的认证机制,提供更强大的安全保证。
- SMS 通道安全: LwM2M 1.0 支持使用 SMS 作为传输通道,并提供两种安全模式:
- SMS NoSec 模式: 不提供安全保护,仅用于调试或特定场景。
- SMS Secured 模式: 使用基于 [3GPP TS 31.115] / [ETSI TS 102 225] 的安全数据包结构来保护 SMS 负载。
五、数据格式
LwM2M 1.0 支持以下四种数据格式:
1.纯文本 (Plain Text): 用于传输简单的文本数据,例如设备制造商名称。
2.不透明 (Opaque): 用于传输二进制数据,例如固件映像或特定应用的二进制格式。
3.TLV (Type-Length-Value):
- 适用于资源受限设备的高效二进制编码格式。
- 最小开销为 2 字节,最大为 5 字节。
- 支持多重资源实例的编码。
- 自描述性,允许解析器跳过未知资源。
4.JSON (JavaScript Object Notation):
- 基于 [SENML] 规范,并扩展以支持 LwM2M 对象链接数据类型。
- 适用于传输多个资源实例,例如返回对象层次结构。
- 支持时间字段,用于传输历史版本的通知。
六、对象定义与注册
- 对象定义: LwM2M 对象定义遵循特定的模板,并使用 XML 文件进行描述。
- 对象定义文件需要符合 OMA 提供的 XML Schema。
- 对象定义中包含对象名称、对象 ID、实例类型(单一/多重)、必需/可选标志、对象 URN 以及资源定义等。
- 对象注册: LwM2M 对象需要向 OMNA Lightweight Object registry 注册。
- 对象 URN 的格式为
urn:oma:lwm2m:{oma,ext,x}:{Object ID}[:{version}]
。 - 对象注册信息可在 OMNA 门户网站上找到。
- 对象 URN 的格式为
七、其他重要概念
- 对象版本控制: 允许对象在不更改对象 ID 的情况下进行版本升级,以支持对象特性的演变。
- 对象版本由主版本号和次版本号组成,例如
2.2
。 - 对象版本信息在对象注册和发现操作中传达。
- 对象版本由主版本号和次版本号组成,例如
- 对象链接资源: 用于引用特定对象实例,例如在对象层次结构中建立链接。
- 队列模式: 允许 LwM2M 服务器在设备离线时将消息排队,并在设备上线时发送。
- 设备通过发送注册更新消息来通知服务器其已上线。
- 服务器根据应用服务器的指示决定是否发送消息。
- 更新触发机制: 服务器可以通过执行设备对象实例中的 Registration Update Trigger 资源来触发设备发送注册更新消息,从而使其上线并注册到 UDP。
八、总结
LwM2M 1.0 提供了轻量级、高效且安全的设备管理和通信机制,适用于资源受限的物联网设备。其模块化设计、灵活的对象模型和多种传输协议使其能够适应各种应用场景。
注意: 本笔记仅涵盖 LwM2M 1.0 的核心内容,建议参考官方规范以获取更详细的信息。