DLMS Green Book
DLMS Green Book
文章内容
s1 Scope
s3 Terms, definitions and abbreviations and symbols
s4.1 General
s4.2 Communication model
s4.3 Naming and addressing
s4.3.3 Addressing
s5.1 Overview
s5.3.3.1 General
s6.2 METERING HDLC protocol using protocol mode E for direct local data exchange
s6.3 Physical layer – Introduction
s7 DLMS/COSEM transport layer for IP networks
sTCP-CONNECT
sTCP-DISCONNECT
sTCP-ABORT
sTCP-DATA
s7.2.4.3 Protocol specification for the DLMS/COSEM TCP-based transport layer
s7.2.5 Converting OSI-style TL services to and from RFC-style TCP function calls
s7.3.2 Overview
s7.3.3 Structure of the DLMS/COSEM CoAP transport layer
s7.3.4.2.1 CoAP-DATA.request
s7.3.4.2.2 CoAP-DATA.indication
s7.3.4.2.2 CoAP-DATA.confirm
s8.1 Overview
s8.2.2 Setting up the data link connection: the DL-CONNECT and MA-CONNECT services
s9.2.2.2.1 Identification
s9.2.2.2.2 Authentication mechanisms
s9.3.2.3 Use
s10.2.6.1 Confirmed and unconfirmed AAs and data transfer service invocations, frame
types used
s10.2.6.2 Correspondence between AAs and data link layer connections, releasing AAs
s10.2.6.3 Service parameters of the COSEM-OPEN / -RELEASE / -ABORT services
s10.2.6.4 EventNotification service and protocol
s10.2.6.5 Transporting long messages
s1 Scope
1. 建模 : 包括设备的 接口模型 和数据识别规则;在 blue book 中定义
2. 消息 : 这涵盖了将接口模型 映射 到协议数据单元(APDU)的服务,以及这个 APDU 的 编码 。在本
中定义
green book
3. 传输 : 通过通信通道 传输消息 。在本 green book 中定义
通信模型:
s3 Terms, definitions and abbreviations and symbols
s3.1 General DLMS/COSEM definitions
:
ACSE APDU Association Control Service Element (ACSE) 标准 A-ASSOCIATE/A-RELEASE 实现的
,
APDU AARQ/AARE/RLRQ/RLRE
s4.1 General
The key characteristics of data exchange using DLMS/COSEM are the following:
使用 DLMS/COSEM 进行数据交换的主要特点如下:设备可以被各种各方访问:客户端和第三方;
mechanisms to control access to the resources of the device are provided;
提供了控制对设备资源的访问的机制;
these mechanisms are made available by the DLMS/COSEM AL and the COSEM objects (
Association SN / LN object, Security setup object);
通过各种机制,包括选择性访问、压缩编码和压缩,确保了低开销和效率;
at a site, there may be single or multiple devices.
在一个站点,可能有单个或多个设备。
In the case of multiple devices at a site, a single access point can be made available;
在一个站点有多个设备的情况下,可以提供一个单一的接入点;
data exchange may take place either remotely or locally.
数据交换可以在远程或本地进行。
Depending on the capabilities of the device, local and remote data exchange may be performed
simultaneously without interfering with each other;
根据设备的能力,本地和远程数据交换可以在不相互干扰的情况下同时进行;
various communication media can be used on local networks (LN), neighbourhood networks (NN)
and wide area networks (WAN).
各种通信媒体可用于局域网(LN)、邻网(NN)和广域网(WAN)。
s4.2 Communication model
之间的通信通过 应用程序实体 (application entities, )之间的通信进行
application processes( APs ) AEs
建模。AE 代表 AP 的 通信功能 。
AP 中可能有 多组 OSI 通信功能,因此 一个 可以用 多种 AP 来表示(比如一个 AP 可以使用 HDLC-
AEs
TODO:AE 的意思还不明确
999,999,999,999(0x0-0xE8D4A50FFF)
交换方式(见 10.4.3.3):
通信配置注册过程
在明确建立 AA 的情况下,在 AA 建立期间使用 服务;
COSEM-OPEN
性。适用于预连接 AA
加密 APDU 交换,general-ciphering (originator and recipient system title)或 general-glo-
ciphering (originator system title).
预连接AA 不需要 1 和 3
务建立,也可以是预连接的
一个 COSEM 逻辑设备可以支持一个或多个 AA,但它们必须是 不同的客户端 ,也就是不允许同一个
客户端使用两个以上的 AA 与同一个逻辑设备连接。每个 AA 决定发生信息交换的上下文。
confirmed AA:
confirmed AA由客户端提出并被服务器 接受 ,前提是:
客户端用户为服务器所知,见 4.3.6;
客户端在 4.5.2 中提出的应用上下文对于服务器来说是可接受的;
客户端(见 4.5.3)提出的认证机制对服务器来说是可接受的,认证是成功的;
xDLMS 上下文的元素参见 4.5.4 可以在客户端和服务器之间成功协商。
unconfirmed AA:
应用程序上下文确定:
AL 中存在的一组应用服务元素(Application Service Elements,ASEs)
COSEM 对象属性和方法的引用方式:短名称(SN) 引用或逻辑名称(LN) 引用。 另见 9.1.4.3.1
传输语法
是否使用加密
s4.5.3 Authentication
DLMS中的认证发生在 AA 建立阶段
在 中,客户端( 单向认证 )或客户端和服务器( 双向认证 )都可以对对端进行认证。
confirmed AAs
对于 ,只有客户端可以验证对端。
unconfirmed AA
在 预连接 中,身份验证不可用。
AA
在 中:
confirmed AA
客户端可以发送确认的服务请求,服务器响应: 操作 pull
客户端可以发送未经确认的服务请求。 服务器没有响应
服务器可以向客户端发送未经请求的服务请求: 操作 push
note:主动推送的服务可以是 InformationReport(使用 SN 引用)、EventNotification(使用
LN 引用)或 DataNotification(同时使用 SN 和 LN 引用)
。
在 中:
unconfirmed AA
只有客户端可以发起服务请求,并且只有未确认的请求。 服务器无法响应,也无法发起服务
请求。
s4.8 Communication profiles
通信配置文件指定了 和建模 Application Process (AP) 的
DLMS/COSEM AL 数据模型 如何由较低
COSEM
的通信媒体特定协议层支持。
通信配置文件包括许多 协议层 。 每一层都有不同的任务并为其上层 提供服务 并使用其支持协议层
的服务。 客户端和服务器 使用最高协议层的服务,即
COSEM AP 的服务。 这是唯
DLMS/COSEM AL
务的层都可以支持它。 较低层的数量和类型取决于所使用的通信媒体。
s4.9 Model of a DLMS/COSEM system
设备被建模为 一组逻辑设备 ,托管在 单个物理设备 中。 每个逻辑设备代表一个服务器 AP,并对 设备
功能 的一个 子集 进行建模,这些功能子集可以通过其通信接口看到。使用 COSEM 对象对各种功能
进行建模。
串口通信原理
9600 8N1 代表着波特为 9600,8 个数据位,无奇偶校验和 1 个停止位,这一种是较为常
用的串行协议配置方法。那么,9600 8N1 的数据包是什么样的呢?举个例子吧!传输
ASCII 字符’ ‘和’ ‘的设备必须创建两个数据包。O 的 ASCII 值(大写)为 79,则二进制
O K
值 ,而 K 的二进制值为
01001111 。剩下的就是追加同步位。假设传输数据时首
01001011
先传输 最低位 :
示例:
PH-INITIALIZE.request / PH-INITIALIZE.confirm;
PH-GET_VALUE.request / PH-GET_VALUE.confirm
PH-SET_VALUE.request / PH-SET_VALUE.confirm
PH-LM_EVENT.indication
注意这张图很关键,表明了管理器AP用于管理物理层的关系,包括管理器AP和物理层的原语,链路层和物理层的原语
情况下的这些动作的例子。
PH-CONNECT.indication 连接建立服务的服务指示原语
帧应该从起始位开始传输,首先是最低有效位,最低有效位标识为位 0,最高有效位标识为位 7。
s5.3.3 Physical layer operation – description of the procedures
s5.3.3.1 General
连接的建立和释放由 物理连接管理器 管理。任何希望使用 DLMS/COSEM 协议的 应在请求连接
AP AP
(主叫方)和 (被叫方)基元将结果通知服务用户实体。
PH-CONNECT.indicat
用 数据 服务 直接交换。如果在 多播 配置中使用了一个以上的服务器,客户端能够识别 每个
PhL data
服务器中的协议栈。
该服务在 后 CONNECTED 状态才能调用
PH-CONNECT
限制 (帧间和响应超时)。
当收到这 第一个字符 时,PhL 进入 “ 识别中 “状态,等待更多的字节或帧间超时(意味着消息的结
束)。
identify 识别阶段 过程:
连接管理器 来实现 AP
向 modem(DCE)发送 拨号 命令,并返回拨号结果,物理层将结果转换为
AT 返
PH-CONNECT.confirm
回给 AP
对于 被叫者 ,AP 会被物理层通知 PH-CONNECT.indication表示物理层已连接
PH-DATA:
假设之前 建立了 与远程 DCE 的 连接 ,并且 DCE 现在处于 数据传输模式 ,那么传递到本地 DCE 的所
有数据都将被传输到远程 DCE(不是透明传输,每一层都会对 data 数据做处理,比如添加开始停
止位,校验位等)。
PH-ABORT:
PH-ABORT.request:
PhL 实体中止连接。
IANA中注册了 4059/TCP-UDP 端口
DLMS/COSEM 只监听 一个 或 端口 。另一方面,如 4.9 和 DLMS UA 1000-1 所示, 一个物理设
AL UDP TCP
包装 子层具有以下功能:
wrapper
Console
UDP-DATA.indication
(
Local_wPort,
Remote_wPort,
Local_UDP_Port,
Remote_UDP_Port,
Local_IP_Address,
Remote_IP_Address,
Data_Length,
Data
)
Console
UDP-DATA.confirm
(
Local_wPort,
Remote_wPort,
Local_UDP_Port,
Remote_UDP_Port,
Local_IP_Address,
Remote_IP_Address,
Result
)
能(NOK)。result 为 OK 只能表示数据已发送,不保证能送达
UDP-DATA.confirm 是 可选的
SEND() 和 接口函数之间的 转换 。
RECEIVE()
面向流的,可靠,包括重传、全双工、流控
缺点:端到端,不支持广播和多播
TCP 作为一种面向连接的传输协议,涉及到 建立连接 、 交换数据 和 释放连接 三个阶段。因此,基于
TCP 的 为服务用户提供三个阶段的
DLMS/COSEM TL 服务: OSIstyle
此外,一个 服务被提供给服务用户
TCP-ABORT 。 DLMS/COSEM AL
术报告的范围
TCP-DATA 可 本地或远程 确认, UDP-DATA 只能 本地 确认
sTCP-CONNECT
Console
TCP-CONNECT.request
(
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address
)
TCP-CONNECT.indication
(
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address
)
TCP-CONNECT.response
(
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address,
Result
)
TCP-CONNECT.confirm
(
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address,
Result,
Reason_of_Failure
)
TCP-CONNECT.confirm 一般来说需要远程确认,如果是本地确认,可能回失败
sTCP-DISCONNECT
Console
TCP-DISCONNECT.request
(
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address
)
TCP-DISCONNECT.request 用于断开请求
Console
TCP-DISCONNECT.indication
(
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address,
Reason
)
中
TCP-DISCONNECT.indication 参数: Reason
Console
TCP-DISCONNECT.response
(
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address,
Result
)
同 TCP-CONNECT.confirm
sTCP-ABORT
见 7.2 图 27,TCP-ABORT 是 层和 层交互的原语
AL TL
Console
TCP-ABORT.indication
(
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address,
Reason
)
由基于 DLMS/COSEM TCP 的 生成,用于向服务用户
TL 表示支持 TCP 连接的 非请求
DLMS/COSEM AL
中断 。
当收到此指示时, 应释放所有使用此 TCP 连接建立的 ,并应使用
DLMS/COSEM AL AAs COSEM-
sTCP-DATA
Console
TCP-DATA.request
(
Local_wPort,
Remote_wPort,
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address,
Data_Length,
Data
)
Data 是 APDU
Console
TCP-DATA.indication (
Local_wPort,
Remote_wPort,
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address,
Data_Length,
Data
)
将被直接丢弃。
TCP-DATA.indication 需要在接收完完整包并解包后交给 AL,Data 是 APDU
Console
TCP-DATA.confirm
(
Local_wPort,
Remote_wPort,
Local_TCP_Port,
Remote_TCP_Port,
Local_IP_Address,
Remote_IP_Address,
Confirmation_Type,
Result
)
可选的,request 的确认
s7.2.4.3 Protocol specification for the DLMS/COSEM TCP-based transport layer
发送消息。
TCP disconnection
s7.2.5 Converting OSI-style TL services to and from RFC-style TCP function calls
s7.2.5.1 Transport layer and TCP connection establishment
s7.2.5.2 Closing a transport layer and a TCP connection
s7.3.2 Overview
,以实现
DLMS/COSEM AL 方法 的使用CoAP POST
个 CoAP 客户机和服务器端点上
s7.3.3.2 Identification and addressing
识别与寻址
默认 5683 端口,同一个物理机里的客户端和服务端可以共用该端口
TODO: 结合 Bluebook 4.9 关于 CoAP 配置的对象
s7.3.3.2.2 DLMS/COSEM AL identification within the CoAP transport layer
Path : “ dlms ”
coap://127.0.0.1:5683/dlms
层 返回给 AL 层 confirm 原语
wrapper
Transport_Mode 传输模式,“
: CoAP ”可靠,“
RELIABLE ”不可靠(这里的可靠其实
UNRELIABLE
值:” “, “
CONFIRMED “, “
UNCONFIRMED “。RESPONSE
:标识了特定的数据请求操作。Request_ID 将在可能产生的
Request_ID CoAP-DATA.confirm
定的 Request_ID 标识。
使用场景:
发送 请求 (单播或多播广播):
DLMS/COSEM
指定为对方 Uri-Path
Remote_Path
Local_Port and Local_IP_address 可选
:
Response_Mode
UNCONFIRMED
Console
CoAP-DATA.indication
(
Transport_Mode,
Local_SAP,
Remote_SAP,
Local_IP_address,
Local_Port,
Remote_IP_address,
Remote_Port,
Data_Length,
Data
)
Console
CoAP-DATA.confirm
(
Local_SAP,
Remote_SAP,
Local_IP_address [Optional Use],
Local_Port [Optional Use],
Remote_IP_address,
Remote_Port,
Request_ID [Optional Use],
Result
)
使用场景:
CoAP-DATA.confirm 由 wrapper 层生成
三种响应模式见上述文章
客户端错误和服务器 错误响应代码 由 协议层 或 包装器 根据错误条件 填充CoAP CoAP
Token(可选,TKL 指定是否存在)
令牌用于配置响应和请求
Token Length(TKL 指定)
Options 也只用到了标准中的一部分,当然没有规定只能用这些,但要保证双方能处理这些选
项
7.3.5.4.5,另见CoAP 分块传输
CWPDU 或错误响应的 消息
piggybacked ACK
关于piggybacking 技术:
在双向通信中,每当收到帧时, 接收方 都会 等待 ,并且 不会立即 将控制帧( 确认 或 ) ACK
发送回 发送方 。
接收方等待 ,直到其网络层传入下一个 数据包 。然后, 延迟的确认 将 附加 到此传出数据
帧。
这种暂时 延迟确认 以便可以与下一个传出数据帧挂钩的技术称为 。 piggybacking
优点 :提高效率,更好地利用可用信道带宽。
缺点 :如果 接收方 没有要发送 的内容,则接收器可能会 阻塞 服务。这可以通过在接收到
数据帧时启用计数器( 接收器超时 )来解决。如果 计数结束 并且没有要发送的数据帧,则
接收方将发送 控制帧。 发送方 还会添加一个 计数器 (发送器超时),如果计数器在没有
ACK
收到 确认 的情况下结束,则发送方将假定数据包丢失,然后 再次发送 帧。
该技术主要是为了 减轻网络负担 ,这个附带内容可以是接收器对于 上一帧的回复 (如果处理
快的话也可以是本次请求的回复),也可以是 主动上报 等
层会考虑使用
CoAP 的可能性, 会 延时发送 ,直到本地 wrapper 层收到 AL 层的
piggybacking ACK
送,不附带在这个 ACK 中
7.3.5.4.3.2 CoAP Retransmission Parameters
需确认消息的最小初始 ACK 超时
是在
initial_ack_timeout 和 ack_timeout ack_timeout x ack_random_factor 之间 随机选择 的
值。
是可靠的 CoAP 消息层的 初始重传延迟 。
initial_ack_timeout
ack_random_factor
需确认消息的最大重传次数。
delay_ack_timeout
消息传递层在 返回确认 之前 等待 应用层返回响应的时间(以毫秒为单位),piggybacking
CoAP
相关的,防止太久不回 ACK 触发对方重传
7.3.5.4.3.3 CoAP Congestion Control Parameters
拥塞控制
NSTART
探测速率
定义一个端点发送到另一个没有响应的端点时不应超过的平均 数据速率 (字节/秒)。
s7.3.5.4.5 CoAP Block Transfer
见 7.3.5.4.2
第 31 篇:CoAP 分块传输
在 APDU 大于 MTU,且小于 receiver_max_pdu_size 时生效(大于 receiver_max_pdu_size 本身就不
合法,AL 或 TL 应该屏蔽该报文)
TODO: 为什么是 APDU 大于 MTU,MTU 不是链路层的限制吗,就算要分也是加上 IP 头,
UDP 头和 CoAP 头,wrapper 头后的 APDU 的长度作为基准吧
或 请求 响应层 的错误通过 重置消息 (名词)或 CoAP 协议层实体根据 RFC 7252 和 RFC 7959
CoAP 消息层 /
服务器错误
由 接收 包装器层 产生的。
CoAP
CoAP 消息层交付失败原因:
接收到重置消息
放弃 CoAP block transfer 操作
可靠 CoAP 消息传递层放弃可靠传输的 CoAP 消息
CoAP 层错误或 UDP 或 IP 层错误
也只能回复 负面 的确认(无需正面确认,因为不可靠就是无确认的)
CoAP 传输层错误指示
失败 。参见 7.3.5.7.5。
CoAP 传输层确认
需响应,客户端 AL 也不会收到传输层给它的确认,但传输层自己要保证发送成功,包括超时
重发和失败重发。
注意,CoAP 层只会在未收到 ACK 时重发,对于 wrapper 层 CWPDU 未收到的情况需
要 wrapper 层自己重发
束,进入 Idle
s7.3.5.7.2 CoAP DLMS/COSEM wrapper request/response context
(远端客户端发来的)
空闲到客户端等待模式
收到 AL 层 CoAP-DATA.request 调用,且 Response_Mode = UNCONFIRMED(UNCONFIRMED
无需回应,不可能是回应,只能是请求),CWPDU中的WRM置1
收到 AL 层 CoAP-DATA.request 调用,且 Response_Mode = CONFIRMED,且是个请求(没找
到对应请求,说明不是回应)
收到 AL 层 CoAP-DATA.request 调用,且 Response_Mode = RESPONSE,且是个请求(没找
到对应请求,说明不是回应),和GBT相关
空闲到服务器等待模式
收到 CoAP 层传来的非空且 需 层回复 (WRM=0)消息,发给 AL 层后, 等待 AL 层回复 CoAP-
AL
DATA.req 消息
服务器等待模式到空闲状态:
在服务器等待模式下收到 AL 层传来的 原语,且该原语中的
CoAP-DATA.request
Transport_Mode, the Local SAP, the Remote SAP, the Local_IP_address, the Local_port, the
Remote_IP_address and the Remote_Port 参数与当前wrapper层上下文中的对应
TODO: 后面是有关GBT的部分
s8.1 Overview
本章指定数据链路层为三层, 面向连接 , 基于 , 异步通信配置文件 。 HDLC
本规范支持以下通信环境:
点对点和点对多点配置
专用和交换数据传输设施
半双工和全双工连接
异步 启动/停止 传输,1 个启动位,8 个数据位,无奇偶校验,1 个停止位
s8.1.2 Structure of the data link layer
为了确保面向连接和无连接两种操作模式都有一致的数据链路层服务规范,数据链路层被划分为
两个子层: 逻辑链路控制 子层和 媒体访问控制 子层
(LLC) (MAC)
LLC 层
类型 1: 无连接 。该方式对信息的发送通常无法保证接收。
类型 2: 面向连接 。该方式提供了四种服务:连接的 建立 、确认和承认 响应 、 差错恢复 (通过
请求重发接收到的错误数据实现)以及 滑动窗口 (系数:128)。通过改变滑动窗口可以提高
数据传输速率。
类型 3: 无连接承认响应服务 。
类型 的 LLC 无连接 服务中规定了一种静态帧格式,并支持运行网络协议。有关 传输层网络协议 通
1
常是使用服务类型 1 方式。
类型 的 LLC 面向连接 服务支持 可靠数据传输 ,运用于 不需要 调用网络层和传输层协议的局域网环
2
帧扩展;
frame format type 3;
非基本帧格式透明度(non-basic frame format transparency)
HDLC的三种操作方式:
正常响应方式 NRM
正常响应方式NRM(Normal Response Mode)一种非平衡数据链路操作方式,有时也称为非平衡
正常响应方式。该操作方式使用于面向终端的点到点或一点到多点的链路。在这种操作方式下,
传输过程由主节点启动,从节点只有收到主节点某个命令帧后,才能作为响应向主节点传输信
息。响应信息可以由一个或多个帧组成,若信息由多个帧组成,则应指出哪一帧是最后一帧。主
节点负责管理整个链路,且具有轮询、选择从节点及及向从节点发送命令的权利,同时也负责对
超时、重发及各类恢复操作的控制。
本文使用 UI 帧框架扩展了 类过程的基本命令和响应库,以支持多播和广播以及从服务器到
UNC
客户端的非请求信息传输。
使用非平衡连接模式数据链路操作意味着客户端和服务器端数据链路层在 HDLC 帧集及其状态机
方面是不同的(意思就是客户端和服务端的链路层实现不同)。
异步响应方式 ARM
异步响应方式 ARM(Asynchronous Response Mode)也是一种非平衡数据链路操作方式,与 NRM
不同的是,ARM 下的传输过程由从节点启动。从节点主动发送给主节点的一个或一组帧中可包含
有信息,也可以是仅以控制为目的而发的帧。在这种操作方式下,由从节点来控制超时和重发。
该方式对采用轮询方式的多节点点链路来说是必不可少的。
异步平衡方式 ABM
异步平衡方式 ABM(Asynchronous Balanced Mode)是一种允许任何节点来启动传输的操作方
式。为了提高链路传输效率,节点之间在两个方向上都需要有较高的信息传输量。在这种操作方
式下,任何时候任何节点都能启动传输操作,每个节点点即可以作为主节点又可以作为从节点,
即每个节点都是组合节点。各个节点都有相同的一组协议,任何节点都可以发送或接受命令,也
可以给出应答,并且各节点对差错恢复过程都负有相同的责任。
s8.1.3 Specification method
收。
由于客户端和服务器端 LLC 和 MAC 子层不同,因此为双方指定了服务原语。
MAC 子层的寻址方案在 8.4.2 中规定。
s8.2.2 Setting up the data link connection: the DL-CONNECT and MA-CONNECT
services
数据链路连接的建立 只能 由 客户端请求 。因此,DL-CONNECT / MA-CONNECT 和
.request .confirm
Console
DL-CONNECT.request
(
Destination_MSAP,
Source_MSAP,
User_Information
)
MA-CONNECT.request
(
Destination_MSAP,
Source_MSAP,
User_Information
)
部分))
s8.2.2.3 DL-CONNECT.indication and MA-CONNECT.indication
Console
DL-CONNECT.indication
(
Destination_MSAP,
Source_MSAP,
User_Information
)
MA-CONNECT.indication
(
Destination_MSAP,
Source_MSAP,
User_Information
)
Console
DL-CONNECT.response
(
Destination_MSAP,
Source_MSAP,
Result,
User_Information
)
MA-CONNECT.response
(
Destination_MSAP,
Source_MSAP,
Result,
User_Information
)
连接请求,但同时只能有一个,即使服务用户层接受,连接也不能建立),MAC 层收到后发送
DM 帧
Result == 。这意味着不应发送对 DL-CONNECT.indication 的响应。MAC 层收到
NO-RESPONSE
MA-CONNECT.response 后不发送任何帧
Console
DL-CONNECT.confirm
(
Destination_MSAP,
Source_MSAP,
Result,
User_Information
)
MA-CONNECT.confirm
(
Destination_MSAP,
Source_MSAP,
Result,
User_Information
)
Console
DL-DISCONNECT.indication (
Destination_MSAP,
Source_MSAP,
Reason,
Unnumbered_Send_Status,
User_Information
)
MA-DISCONNECT.indication (
Destination_MSAP,
Source_MSAP,
Reason,
Unnumbered_Send_Status,
User_Information
)
Reason
使用 I 帧或 UI 帧
和 DL-DISCONNECT 及 DL-CONNECT 的区别是这个 DL-DATA 不再是 透传 了,LLC 层需要组
LSDU 作为 data,前面两个 LLC 就是什么也不干,直接把参数和 data 给 MAC 层。
收到调用后,LLC 层组装 ,其中包括 LSDU (the two LLC addresses and the
LLC specific fields
Format type sub-field (4 bit): 固定为 0b1010,十进制为 10 ,表示 type3 (HDLC frame format
type 3)
很大的包,需要 IP 层来做分片时就会用到该标记,表示这些分片都属于同一个应用包。
the frame length sub-field (11 bit):除了 flag field 外的 长度
要求,如果是多点接入则必须指定)
s8.4.2.3 Reserved special HDLC addresses
MAC 层中 HDLC addresses 的含义
客户端地址、服务端地址(分为低地址逻辑地址部分和高地址物理设备部分):
每个字节的 LSB 用于标识是否有后续字节,所以 不计入 实际字节的表示,也就是一个字
节就 个有效位 。1111 1111 表示一个字节,后续无字节,然后把 LSB 去掉就是 1111 111,
7
RRR ,接收帧号
is the receive sequence number N(R)
信息传递
字段, :自身发送帧的 序号
SSS N(S)
收。
发送接收最大 长度默认为128字节,最大 2030 字节
information field
通知 准备好 接收 I 帧
确认之前收到的 N(R)-1 序号的 I 帧
按照上面 I 帧的描述,I 帧也可以利用 RRR 字段确认对方 I 帧,也可以用 P/F 字段交出发送权,
达到和 RR 帧相同的效果,RR 帧可以认为是不带信息的 I 帧。
Receive not ready ( RNR ) command and response
通知 未准备好 接收 I 帧
确认之前收到的 N(R)-1 序号的 I 帧
RNR 接收方应该要知道,N(R)-1 之后的 I 帧发送都是无效的,也不应该再发 I 帧了,要补发
N(R) 及之后的 I 帧。
在接受该命令后,从站发送和接收状态变量应设置为零。
此命令执行后,原来由 DL 层管理的未被确认的 I 帧需要交还给更高层管理,是否重新交给 DL
层发送取决于该高层。
TODO: 什么是正常响应模式。更新:见 8.4.4
Disconnect ( DISC ) command
终止之前配置的可操作或初始化模式,从站应进入逻辑断开模式。
TODO: 逻辑断开模式和正常断开模式区别?更新:应该是同一个概念,就是 NDM
从站应发 UA 响应表示确认收到
(同 SNRM)此命令执行后,原来由 DL 层管理的未被确认的 I 帧需要交还给更高层管理,是
否重新交给 DL 层发送取决于该高层。
可以理解为 SNRM 的逆操作
可能携带 information field。TODO:是否要把该信息交给上层(AL层)?
Unnumbered acknowledge ( UA ) response
command
不影响 I 帧或其他帧的序号
response
当主备用站点之间建立了物理链路,但没有建立活动的数据链路通道时,客户端和服务器端的
MAC 子层都处于 正常断开模式 Normal Disconnected Mode( );不传送或不接受任何信息或编号的
NDM
监控帧。从站功能限制为:
接收与响应 SNRM
接收 UI
发送 UI 响应
收到 DISC 后发送 DM 响应
当 MAC 连接建立后,MAC 层工作在正常响应模式(NRM)。从站(服务器)只有在从主站(客户端)获得
明确的许可后才可以开始数据传输。在收到许可(POLL BIT == TRUE)后,从站发起响应传输。响应
传输可以由一个或多个帧组成,同时保持活跃的数据链路通道状态(见 8.4.4.3.1)。响应传输的最后
一帧应由从站明确表示(FINAL BIT == TRUE)。在最后一帧指示之后,从站应停止发送,直到再次收
到主站的明确许可。
s8.4.4.2 Transmission considerations
不适用
Start/stop transmission inter-octet time-out
字节间超时等待状态,接收完一个字节开始等待,直到收到下个字节或超时,超时要结束接
收。
Idle HDLC channel state
SNRM/UA 消息交换不仅可以建立连接,还可以协商一些数据链路参数
最大 information field 长度参数,默认 128 字节
发送
接收
Window size 窗口大小,默认 1,最大 7(因为 SSS 和 RRR 字段只有3个bit位,见 8.4.3.1).
发送
接收
SNRM 中的 Window size – receive 是强制的,UA 中的‘Max_info_field_length– receive’ (0x40),
and the ‘Window size – transmit’ (0x07)是强制的
Disconnecting the data link
应。
超时重发和 Setting up the data link 相同
s8.4.5.4 Procedures for data exchange
响应 (就是不会把发送权交给从站)
DISC 一般用于在 通过断开低层连接方式断开 时发送的命令。 AA
服务端发送 UI 帧的情况
在 HDLC 中因为是 主从模型 ,服务器作为从站 没有权利 主动上报,需要等客户端作为主站发送
任意请求后,因为需要回复,从站获得 发送权 ,再趁机发送该上报 UI 帧,且应在响应的最后
一帧前发送
其他情况:
客户端发送 RR 帧,P=1
客户端发送空的 UI 帧,P=1
8.4.5.4.8 Handling the CALLING device physical address
,见 8.4.2.3
CALLING Physical Device address
允许服务端发起物理连接请求,以便自己能上报数据(8.4.5.4.7那些数据)
客户端需要发送 为服务端配置模式,其中 Lower MAC Address 的值应该为
SNRM CALLING
响应超时
发送完 poll bit 为 1 的帧后开始计时,收到 final bit 为 0 的帧时刷新计时,收到 final bit 为 1 的
帧时结束计时
超时应该重发,当该帧时 I 帧时不应该重发,应该发 RR 帧同步 I 帧序号,确认丢失的是哪帧
(TODO:是否同步完再重发 I 帧)
FCS and HCS error
TODO :引用了一些其他标准
有错误帧时,所有的连续帧都应被丢弃。
N(S) sequence error
FRMR 回应
Busy
等待响应超时时间,所有命令和信息帧,客户端参数
TO_WAIT_RESP > RespTime + 2*MaxTxTime
最大超时重发次数
Time-out 2: Inactivity time-out
未向 PhL 发送或接收超时,每次发送或接收时重置。调用DL-LM_EVENT.indication原语,见
8.6.2.7。超时应断开 DL 层连接
帧间超时,接收端参数,超时未收到下一帧表示已经结束
Maximum information field length
窗口大小,默认 1
s8.4.5.7 State transition diagram for the server MAC sublayer
大致思路见:https://www.cnblogs.com/Dvelpro/p/10206555.html
s8.5.3 16-bit FCS computation method
DL-INITIALIZE
初始化 DL 层参数
DL-GET_VALUE
从 DL 层获取一个或多个参数
DL-SET_VALUE
设置 DL 层的一个或多个参数
DL-LM_EVENT
通知 DL 层的事件
端都包含三个必需的组件:
关联控制服务元素,Association Control Service Element, ACSE
扩展 DLMS 应用服务元素 the extended DLMS Application Service Element, ; xDLMS ASE
原语 。见 9.4.1。
客户端和服务器 DLMS/COSEM 都可能包含其他可选的应用程序协议组件。
ASO
用提供服务之间的 映射 。见 9.1.5。
DLMS/COSEM AL 也执行 OSI 表示层的一些功能:
对 和
ACSE xDLMS APDUs 进行 编码和解码 ,参见 9.4.3;
另外,生成和使用代表 和 ACSE 的 文档 ;
xDLMS APDUs XML
用于 压缩和解压 ;
启用、验证和删除 密码保护 。
s9.1.3 The Association Control Service Element, ACSE
客户端发送,服务端不回应。(多播,广播)
可能预先存在。 不使用 COSEM-OPEN 服务。 客户端必须知道服务器
pre-established AAs
COSEM-ABORT
客户端ASO 总是使用带有 LN引用 的 xDLMS ASE 。 服务器ASO 可以使用带有 LN引用 的 xDLMS ASE ,也
可以使用带有 SN引用 的 xDLMS ASE,或者 两者都使用
相关的服务可以是:
:客户端请求
requested / solicited
还可将其分为两类(见 9.4.6.2):
confirmed: 在这种情况下,服务器提供对请求的响应;
unconfirmed:在这种情况下,服务器不提供对请求的响应。
unsolicited: 由服务器端发起,无需请求
如来自服务器的 的
unsolicited(见 9.3.10):
DataNotification
服务器用于向客户端推送数据的 服务;
DataNotification
服务端使用 服务通知客户端服务器发生的事件。
EventNotification
、 、 、
GET9.3.6 SET9.3.7 ACTION9.3.8 ACCESS9.3.9
、 、
Read9.3.14 Write9.3.15 UnconfirmedWrite9.3.16
、 和 ACCESS 服务有一个特殊功能,即
GET SET 引用。 Attribute_0
法。
s9.1.4.4.3 Identification of service invocations: the Invoke_Id parameter
在 client/server 模型中,请求由客户机发送,响应由服务器发送。允许客户端在接收到对前一个
请求的响应之前发送 多个请求 ,前提是 较低层允许 这样做。
需要用 来 标识 数据包,这样客户端才能判断响应是 对应 哪个请求的
Invoke_Id
Invoke_Id 参数。
此功能仅在 引用 时可用 LN
此功能仅在 引用 时可用 LN
特定于服务的块传输 只能一包一包顺序传,不支持流式传输,不支持恢复丢失块。加密是加一个
,而不是整个 APDU(根据协议原文所述这会带来更多的性能消耗,这个我持怀疑态度,分
block
块后加密和全部加密后再分块应该不会有明显的性能差距)。数字签名不可用(数字签名只能保护
完整 APDU,不支持分块保护)。
相反, 机制 可以与任何 xDLMS APDU 一起使用,包括 通用密码和通用签名 。它提供 双向块传
GBT APDU
可组合的 xDLMS 消息
处理 xDLMS 消息的三个重要方面是 编码 解码 、 应用 验证 删除密码保护 和 块传输 ,见9.3.5。
/ / /
由特定于服务的“with-datablock”APDUs 携带。
GBT 机制支持 双向块传输 、 流传输 和 丢失块恢复 特性:
双向数据块传输:是指一方在发送数据块时,另一方不仅可以确认收到的数据块,而且如果
有数据块要发送,也可以在接收数据块的同时发送;注意双向数据块传输适用于需要双向传
输较长服务参数的情况。(TODO:是否有这种情况)
流式传输:是指一方可以发送多个数据块(流式传输),而另一方无需对每个数据块进行确认
(只需在适当的时机进行一次回复告知所有已经被正确接收的块,也就是窗口的概念,每次
窗口结束才回复一次);参考 TCP 传输
丢失数据块恢复:是指如果发送的数据块的接收未得到确认,可以再次发送。如果使用流式
传输,则在每个流式传输窗口结束时进行丢块恢复。
通用块传输机制的协议在 9.4.6.13 中指定
GBT 机制支持以下用例(GBT 触发条件):
低于 12 的值被保留,0 表示无限制
Server Max Receive PDU Size
Unsigned16
低于 12 的值被保留,0 表示无限制
s9.1.5 Layer management services
这些服务的规范不在本技术报告的范围内。
s9.1.6 Summary of DLMS/COSEM application layer services
身份验证机制确定通信实体在 AA 建立期间使用的协议来证明自己。
的方法。
High Level Security (HLS) authentication
的身份验证
Pass 4: 服务器 根据对给定 AA 有效的 HLS 身份验证机制的规则处理 CtoS 和 附加信息 ,并将
结果 发送 给客户端。客户端检查 是否是正确处理的结果,如果是,则 接受 服务器
f(CtoS)
的身份验证。
总结,由服务端先校验客户端合法性,再由客户端校验服务端合法性
pass2 后 ,如果 application context and xDLMS context 合法 (这两个参数在 pass1 和 2 交换或生
成,pass2 后已存在,只不过要到 pass4 全走完才激活),则 授予 当前”Association SN / LN”对象的
reply_to_HLS_authentication方法 权限
pass3 和 4 依赖于 reply_to_HLS_authentication
它能够 验证 由服务器和/或客户端应用的保护响应。
The DLMS client
作为第三方和服务器之间的中间人 ;broker
根据 消息中包含的信息, 为第三方提供适当的 ;
TP-client AA
验证 TP 有权使用 该 AA;验证方法超出了本技术报告的范围。
这里提到了AA是client和server维护的,和third party无关,但third party可以利用
这个AA传递消息
它可以验证第三方申请的保护;
封装 第三方客户端消息到一个通用的受保护的 xDLMS APDU;
它可以验证服务器对封装 COSEM 对象相关服务响应或未经请求的服务请求的 APDU 应用的
保护;(Push 操作时);
它可以对发送到 TP 的受保护的 xDLMS APDU 应用自己的保护。
The server
它可以检查使用 AA 的第三方的身份;
一旦客户端和/或第三方应用的保护被服务端成功验证,服务端将提供访问 COSEM 对象属
性和方法的权限,这些属性和方法由安全策略和访问权限确定;
它应该准备响应——或者,在推送操作的情况下,一个未经请求的服务请求——并应用由传
入请求的保护、访问权限和安全策略决定的保护。
s9.2.2.6 COSEM data security
对 具体 COSEM 对象内属性、方法参数等的 保护 ,与 AL 层整体加密整个 xDLMS APDU 有区别。
s9.2.3 Cryptographic algorithms
AES 算法,属于分组加密算法
AES 结合了安全性、性能、效率、易于实现和灵活性。具体来说,该算法在各种计算环境的硬件
和软件上都有良好的性能。此外,该算法对内存的要求非常低,这使得它非常适合于空间受限的
环境。
TODO: 内存占用少是不是因为是分组加密,每一块加解密时占用少导致的
s9.2.3.3.4 Encryption Modes of Operation
AES-GCM 可规避相同明文块加密成相同密文块带来的重复特征检测,密文块批量篡改的问题。
s9.2.3.3.5 Message Authentication Code
消息验证码 MAC
MAC 作用与 HASH 函数相似,都可以验证 完整性 ,不同的是 MAC 需要密钥 而 HASH 不需要密钥。
MAC 一般依赖于对称加密密钥。
但 MAC 不支持防止否认性,因为对称加密密钥可能被多人持有,无法判断消息到底是谁发送的,
所有人都能否认自己是该消息的发送者。但数字签名是私钥生成的,私钥只允许一人持有,一旦
发送,所有公钥持有者都能对其进行验证,发送者不能否认自己是该消息的发送者。
s9.2.3.3.6 Key wrapping
可以使用对称密钥算法使用密钥封装密钥(也称为 密钥加密密钥 )来封装(即加密)密钥材料。
master key
见 9.2.3.3.8
s9.2.3.3.7 Galois/Counter Mode
认证加密函数
输入:
密钥 , EK
明文 ,表示为 P ;
长度要求(bit):
len(P) < 2^39-256;
len(A) < 2^64-1;
1 <= len(IV) <= 2^64-1.
输出:
一个与明文 P 位 长度相同 的 密文 C
一个 身份验证标记 或 标记 ,简称 T
认证解密函数
输入:
密钥 , EK
密文 C
附加认证数据 Additional Authenticated Data( AAD ),记为 A ;
一个 身份验证标记 ,简称 T
输出:
一个与密文 C 长度相同 的 明文 P
IC
又称 调用字段
32位(4字节)
数将 返回错误 ,且 IC 不得增加 。
使用 鉴权解密 功能时,验证 的值。该值必须等于或大于 最低可接受值 。
IC
解密相反。
AES-WRAP algorithm
key wrap
Inputs: Plaintext, n 64-bit values {P1, P2, …, Pn}, and Key, K (the KEK).
1. Initialize variables
Console
Set A = IV, an initial value (see 2.2.3)
For i = 1 to n { R[i] = P[i]; }
Console
For j=0 to 5
For i=1 to n
B = AES(K, A | R[i])
A = MSB(64, B) ^ t where t = (n*j)+i
R[i] = LSB(64, B)
Console
Set C[0] = A
For i = 1 to n
C[i] = R[i]
key unwrap
Inputs: Ciphertext, (n+1) 64-bit values {C0, C1, …, Cn}, and Key, K (the KEK).
1. Initialize variables.
Console
Set A = C[0]
For i = 1 to n
R[i] = C[i]
Console
For j = 5 to 0
For i = n to 1
B = AES-1(K, (A ^ t) | R[i]) where t = n*j+i
A = MSB(64, B)
R[i] = LSB(64, B)
1. Output results.
Console
If A is an appropriate initial value (see 2.2.3)
Then
For i = 1 to n
P[i] = R[i]
Else
Return an error
模块W
图中的S是明文64bit块,输入输出等长
说明
AES(K, W) Encrypt W using the AES codebook with key K
椭圆曲线密码学 ECC
素数域上的椭圆曲线由实数(x, y)组成,满足下列方程:
2 3
y = x + ax + b
曲线的形状由 a 和 b 两个参数决定
NIST 推荐使用椭圆曲线
本节描述了数据转换原语,用于在用于指定公钥算法的不同数据类型之间进行转换:八位字节串
(OS)、位串 (BS)、整数 (I)、字段元素 (FE) 和椭圆曲线点 (ECP)
。 DLMS/COSEM 使用八位组字符串
来表示公钥算法的元素,并使用这些数据类型与八位组字符串之间的转换原语。 长度为 d 的 八位
字节串 被编码为
Md–1 Md–2 … M0 A-XDR OCTET STRING ,其中最左边的八位字节 Md–1 对应于八
位字节串的编码值的第一个八位位组
Conversion between Bit Strings and Octet Strings (BS2OS)
位串转换为八位串的数据转换原语称为位串到八位串转换原语,或称 BS2OS。它以位字符串
作为输入,输出八位字符串。长度为 l 的字节串 应该转换为长度为 bl−1bl−2 … b0 d = ⌈l/8⌉
的八位字符串 。Md−1Md−2 … M0
时候需要 补足 的倍数 8
和上面相反
最左一字节的最左位必须是 0
Conversion between Integers and Octet Strings (I2OS)
每个整数的位用一个字节表示:
x = xd−1 ⋅ 256
d−1
+ xd−2 ⋅ 256
d−2
+ ⋯ + x1 ⋅ 256 + x0 ;
where 0 ≤ xi < 256 for 0 ≤ i ≤ d − 1 ;
Mi = xi , for 0 ≤ i ≤ d − 1 .
正好是二进制0b100000000,1在8位,这样的话0-7位就表示 ,通过
256 x0 让8-15位
x1 ⋅ 256
表示 x1
例:十进制1234,转为OS为 0 ⋅ 256
3
+ 0 ⋅ 256
2 1
+ 4 ⋅ 256 结果为0x000004D2。
+ 210
其实就是把数字转换为16进制数用 表示 HEX
和上面相反
0 字节的 OS 输出整数 0
将 字段元素 转换为八位字符串的数据转换原语称为字段元素到八位字符串转换原语,或
。它接受一个 字段元素 作为 输入 ,并 输出 相应的 八位字符串 。应用 I2OS 转换原语,参
FE2OS
数 将域元素
l 转换为长度为
x ∈ Fp 的八位字符串
d = ⌈log256 p⌉ ,其中 Md−1Md−2 … M0
F E2OS(x) = I 2OS(x, l)
与上面相反
OS2F E(x) = OS2I (x) mod p
是什么,FE2OS 不懂 更新:域元素应该就是某个域范围内的一个
TODO:Field Elements
值,比如域为0-9999,这个值可能就是3456。 ,log25645768865 = 3.18098289749
所以长度就至少是4,结果为0x02BA60A1,其实就是把数字转换为16进制数用HEX表示
s9.2.3.4.4 Digital signature
数字签名是书面签名的电子模拟,可用于向收件人或第三方证明消息是由发信人签名的(这种特性
称为 不可否认性 )。还可以为所存储的数据和程序生成数字签名,以便可以在稍后时间验证数据和
程序的 完整性
数字签名与 MAC (消息认证码,见s9.2.3.3.5 Message Authentication Code)的区别:
数字签名与 MAC 都是一种认证方式,认证可分为
实体认证
消息认证
消息源认证(即消息的来源不是冒充的,来源必须持有密钥)
消息完整性(即消息未被恶意篡改)
MAC 只能进行消息认证,因为其基于对称密钥,即至少有两方拥有该密钥,虽然可保证消息的完
整性和基本的消息源认证(肯定是由持有密钥的实体发送),但无法确定该消息一定是某个特定实
体发送的(因为每个拥有该密钥的实体都能生成相同的 MAC)。
而数字签名基于非对称密钥,有特定实体独自保有私钥,其他认证方仅有公钥,公钥只能用于验
证签名,不能进行生成数字签名操作,所以可以保证数字签名一定是由该实体生成,也就保证了
消息一定是该实体发送。
s9.2.3.4.5 Elliptic curve digital signature (ECDSA)
in the case of Security Suite 2 , the elliptic curve P-384 with the SHA-384 hash algorithm.
签名
输入:
要签名的消息 M;
签名者的私钥 d
输出:
ECDSA signature (r, s) over M.
验签
输入:
已签名的消息 M’
ECDSA signature (r’,s’)
签名者的公钥 Q
在 DLMS/COSEM 中,应使用纯文本格式:签名 (r, s) 被编码为八位字节串 (表示 串联 ,不是逻 R||S
辑运算符的或),即作为八位字节串 和 的 串联 , 。
R = I2OS(r,l) S = I2OS(s,l) l = [log256 n]
密钥协商允许两个实体联合计算共享密钥并从中派生密钥材料。
对于 DLMS/COSEM,已从 NIST SP 80056A Rev. 2: 2013 中选择了三种椭圆曲线密钥协商方案
椭圆曲线密钥协商方案:
the Ephemeral Unified Model C(2e, 0s, ECC CDH) scheme;
2 Ed.15:2021, 4.4.7.
钥 和 其他输入 中派生出来的。()
Z
域参数是什么
在密码学中,domain parameters(域参数)是指用于定义某些密码算法的特定参
数集合。这些参数在算法的正确性、安全性和互操作性方面起着关键作用。域参
数的具体内容根据使用的密码算法类型而有所不同,例如对于椭圆曲线密码学
(ECC)和离散对数问题(如 Diffie-Hellman)等算法,域参数各不相同。
ECC 使用的域参数定义了椭圆曲线的具体形式和操作基数。这些参数包括:
素数 ( p ):定义有限域 ( \mathbb{F}_p )。
椭圆曲线参数 ( a ) 和 ( b ):定义椭圆曲线方程 ( y^2 = x^3 + ax + b )。
基点 ( G ):椭圆曲线上一个固定点,用作所有密钥对的生成点。
阶 ( n ):基点 ( G ) 的阶,即最小正整数,使得 ( nG = O )(点 ( O ) 是椭圆曲线上
的无穷远点,或称为零点)。
协因子 ( h ):曲线的阶 ( n ) 与域的阶 ( p ) 之间的关系。
TODO: 密钥材料,密钥派生是什么。
密钥材料 (Secret Keying Material)
密钥材料是指用于密码学操作(如加密、解密、签名和验证)的秘密数据。密钥
材料包括但不限于以下内容:
对称密钥:用于对称加密算法(如 AES 和 DES)的密钥。
私钥:用于非对称加密算法(如 RSA 和 ECC)的私钥。
会话密钥:在某个会话期间使用的临时密钥,通常由密钥交换协议生成。
共享秘密:如 Diffie-Hellman 密钥交换生成的共享秘密,随后可用于生成对称
密钥。
密钥材料必须保持机密性,以确保其在密码操作中的安全性。如果密钥材料泄
露,整个加密系统的安全性可能会被破坏。
密钥派生函数 (Key Derivation Function, KDF)
密钥派生函数是一种用于从原始密钥材料(如共享秘密、主密钥或密码)生成一
个或多个密钥材料的方法。KDF 的主要目标是将原始密钥材料转换成适合特定用
途的密钥材料。
KDF 通常使用的原始密钥材料包括:
这种表示方式表示 U 方和 V 方都使用
C(2e, 0s) ephemeral key pair(ephemeral private key 和
ephemeral public key), 也就是说公私钥是动态生成的。
the One-Pass Diffie-Hellman C(1e,1s, ECC CDH) scheme;
密钥派生函数,用于根据相关信息(Z, OtherInput)生成密钥材料。
Function call: kdf(Z, OtherInput)
实现时需要的一个哈希函数,可能的相关的参数:
hashlen: 哈希函数的输出长度,用于生成密钥材料块
max_hash_inputlen: 哈希函数的最大输入长度(单位为 bit,因为输入是一个 bit string),
在 SHA-256 下应该小于 ,或在 SHA-384 下小于 。
2
64 128
2
函数所需参数:
共享秘密(shared secret),byte string
Z
OtherInput
位,安全套件 为 位; 2 256
OtherInfo 等于下列串联的位字符串
:
KEK AES-WRAP-128 / AES-WRAP-256
固定长度7位,如下:
和哈希的加密算法
s9.2.4 Cryptographic keys – overview
密钥作用:
明文到密文的转换;
密文到明文的转换;
验证码(MAC)的计算和验证;
密钥包装 wrapping;
应用和验证数字签名;
密钥协商。
s9.2.5 Key used with symmetric key algorithms
对称密钥的使用
s9.2.5.1 Symmetric keys types
对称密钥的分类:
按目的分类
用于加密其他对称加密密钥,又称 master key
key encrypting key (KEK)
encryption key 用于 AES-GCM 算法的块加密
按生命周期分类
打算使用 较长时间 的 静态密钥 。 在 DLMS/COSEM 中,它们可能是:
一个 全局密钥 ,可用于在相同合作伙伴之间重复建立的多个 AA。 全局密钥可以是单播
加密密钥( )、广播加密密钥( )或认证密钥( );
GUEK GBEK GAK
在两个合作伙伴之间建立的单个 AA 期间可以重复使用的 专用密钥 。 因此,其生命周期
与 的生命周期 相同。 专用密钥只能是 单播加密密钥 。
AA
APDU/COSEM 数据,包括EK、AK、MK等
s9.2.5.3 Key identification
确定的密钥可以是全局单播加密密钥(GUEK)或全局广播加密密钥(GBEK)。在这种情况下,安
全控制字节(SC,见s9.2.7.2.4 Encryption, authentication and compression)的密钥设置(Key_Set)
位无关紧要,应设置为零。
The Key_Set bit is not relevant and shall be set to 0 when the service-specific dedicated ciphering,
the general-ded-ciphering or the general-ciphering APDUs are used.
可以用 The Ephemeral Unified Model C(2e,0s, ECC CDH) scheme 协商的密钥:
the master key, KEK; and/or
the global unicast encryption key GUEK; and/or
the global broadcast encryption key GBEK; and/or
非对称加密算法密钥分类:
按目的:数字签名、密钥协商
按生命周期:静态密钥、临时密钥
s9.2.6.2 Key pair generation
由(q, FR, a, b {, domain_parameter_seed}, G, n, h)生成私钥 d 和公钥 Q
s9.2.6.3 Public key certificates and infrastructure
程,正常导入证书应该是通过“Security setup”对象
提供关于存储在服务器上的 证书 的信息的 属性 ;
用于 生成 服务器 密钥对 的方法和用于 生成 服务器上的证书签名请求( )信息的方法,CSR 由 CSR
客户端 代为发送给 ; CA
导入、导出、移除证书 的方法
证书一般都有一个 有效期限 。但是,颁发给 服务器 的证书可能 无限期有效 。证书到期后,可能 DLMS
需要进行 替换 。
在服务器使用证书之前,必须对其进行验证。验证包括:
检查证书的 语法 有效性;
检查证书包含的 属性 ;
检查证书有效期是否 未过期 ;
检查 信任锚点 的认证路径;
检查证书 颁发者 的 签名
s9.2.6.3.3 PKI architecture – informative
Root-CA 证书策略定义了处理证书颁发的规则
End entities
m (mandatory): 强制使用;
o (optional): 可选;
Certificate:
tbsCertificate 包含主题和颁发者的名称、与主题关联的公钥、有效期和其他相关信息
Version V3 为 2
Serial number 序列号必须为 CA 分配给每个证书的 正整数 。对于给定 CA 颁发的每个证书,
它必须是 唯一 的。上限 个字节 20
开始生效(notBefore)
无效时间(notAfter)
DLMS 服务器可以获得无法指定有效过期日期的证书;这样的证书将在设备的 整个生命周期 内
使用
为了表明证书没有明确定义的到期日期, 应该被分配 的
notAfter 99991231235959Z
GeneralizedTime 值。
SubjectPublicKeyInfo 标识公钥和密钥算法
Console
SubjectPublicKeyInfo ::= SEQUENCE
{
Algorithm AlgorithmIdentifier,
subjectPublicKey BIT STRING
}
AlgorithmIdentifier ::= SEQUENCE
{
algorithm OBJECT IDENTIFIER,
parameters ANY DEFINED BY algorithm OPTIONAL
}
用于识别密钥算法
AlgorithmIdentifier
OBJECT IDENTIFIER:
parameter :
:
1.2.840.10045.3.1.7 NIST P-256
:
1.3.132.0.34 NIST P-384
Subject Unique ID 主题唯一 id 可以选择性地用于终端设备证书,而不是服务器证书。
Certificate extensions
标识公钥,公钥是和用于签名证书的私钥对应的
Authority Key Identifier
SubjectKeyIdentifier 标识包含特定公钥的证书
KeyUsage 密钥用途,keyAgreement、digitalSignature 等
CertificatePolicies 证书策略
Other extensions
类型密钥必须用 类型密钥签名
P-384 P-384
Root-CA 自签名证书(信任锚)
Sub-CA 证书
用于 签名生成和验签的证书
ECDSA
scheme or with the Static Unified Model C(0e, 2s, ECC CDH) scheme)
TLS 证书
多个信任锚
信任锚的部署或替换是 带外操作 ,out of band ( ) OOB
信任锚证书和其他证书 存储在一起
TODO: 这个是否有安全问题,比如 windows 有专门的受信任根证书区域,每个分类都有
专属区域。 更新:见下句
可以 导出 ,不能 导入或删除 ,解释了上面的安全问题,是有防篡改保护的
直接信任的 CA 公钥不能导出
s9.2.6.6.3 Provisioning the server with further CA certificates
“ ”对象中的
Security setup 方法 import_certificate
导入的 CA 证书需要使用信任锚校验
s9.2.6.6.4 Security personalisation of the server
安全个性化导入非对称密钥:
通过设备商专有方式导入私钥和公钥证书
“Security setup”相关函数产生
签名、密钥协商或 TLS;
2. 客户端调用 方法。方法调用参数标识生成证书签名请求
generate_certificate_request
( )所需的密钥对。返回参数包括 CSR,由新生成的密钥对的私钥签名;
CSR
TODO:CSR 还要私钥签名吗,用哪个私钥签名
1. 客户端 向 发送 ,该消息封装了调用 generate_certificate_request 方法得到的返回参
CA CSR
数。CA(如果满足必要条件) 颁发 证书并将其发送给客户端;
客户端调用
2. 方法。方法调用参数包含证书。服务器 验证 证书,如果成
import_certificate
使用“ ”对象的
Security setup 方法 export_certificate
作为 的一部分(在 认证 期间)
AARE HLS
向服务器提供客户端和第三方证书
服务器要 验证数字签名 ,要使用使用静态密钥协商密钥的方案执行 密钥协商 ,或要 建立 连接 , 服 TLS
务器 需要 对方 的适当 公钥证书 。
如果在制造时 已经知道 客户端和/或第三方,则制造商可以将其 公钥证书注入服务器 。
否则,可以使用“ ”对象的 方法为服务器提供客户端和第三方
Security setup import_certificate
的证书。
s9.2.6.6.6 Provisioning clients and third parties with certificates of servers
向客户端和第三方提供服务器的证书
要 验证数字签名 ,要使用使用静态密钥协商密钥的方案执行 密钥协商 ,或要 建立 连接 , 客户端或第 TLS
三方 需要 对方 的适当 公钥证书 。
证书可以随服务器一起交付,并插入到客户端/第三方 OOB 中。
或者,客户端或第三方可以使用“ ”对象的 方法从服务器请求
Security setup export_certificate
证书。方法调用参数标识所请求的证书。
s9.2.6.6.7 Certificate removal from the server
从服务器上删除证书
当属于服务器的证书被删除时,与公钥相 关联的私钥 也应被 销毁 。
“ “对象的
Security setup 方法用于删除证书 remove_certificate
保护 参见 9.2.7.2;
xDLMS APDUs
持有。access_rights 的
access_rights_list access_mode 元素决定了访问类型并规定了密码保
护。它是一个 enum 数据类型。
对 对象 属性 和/或 方法 的 访问权
COSEM 可能要求对 xDLMS APDUs 进行 认证、加密
Access rights
低于安全策略和访问权限要求 的 APDU 应被 拒绝 。
在这种情况下, 更多的保护 是指在 xDLMS APDU 上应用比安全策略所要求的 更多种类 的保护:例
如,安全策略 security policy 要求所有的 APDU 都经过 认证 ,但访问权限 Access rights 要求 APDU
经过 加密和认证 ,即更高的保护。
(access rights 是针对某个对象的特定属性或方法的,security policy 是全局的,所以
access rights 可以比 security policy 更严格,而不能更宽松)
息是 数据 ,即
COSEM data 属性值 或 方法调用 返回参数 。
COSEM /
The security header
SH = SC||I C
plaintext, P
authentication key, AK
information, I
Initialization vector
三种加密方式
Service-specific ciphering xDLMS APDUs
支持压缩,可以选择GLO全局密钥或DED独立密钥
The general-ciphering APDU
本节描述不同类型的加密服务保护的内容以及各个字段的意义
Encoding example: global-get-request xDLMS APDU
TODO: 很难理解,需要实例。对应9.2.2.5一起
s9.2.7.4 HLS authentication mechanisms
需要提前知道对方的证书和 systemtitle,不知道的话需要传递
见原文示例
s9.2.7.5 Protecting COSEM data
需要保护的数据列表、需要保护的对象和保护参数由“ Data protection 对象决定。
”
件可能逻辑上与远程服务请求有关,也可能是 N-层内部的事件引起的;
:响应原语从 N-用户传递到 N-层,以完成先前由指示原语调用的过程。
RESPONSE
原语参数含义:
字段 说明
M 该参数对基元是强制性的。
U 该参数为用户选项,可根据 ASE 用户的动态使用情况提供或不提供。
S 该参数从其他 S 参数中选择,作为服务器 ASE 环境的内部响应。
C 该参数取决于其他参数或 ASE 用户环境。
(–) 该参数从不存在。
= M、U、S 或 C 代码后面的 “(=)” 代码表示该参数在语义上等同于表中左侧服务基元中的参数。
(重要)命名规则
强制。它包含使用通信配置文件层所必需的所有信息,包括通信配置文件(协议)标识符和
所需的地址。它确定了 AA 的参与者。该参数的元素被传递给管理低层连接的实体,并酌情传
递给低层。
ACSE_Protocol_Version
可选参数。如果存在,则应使用缺省值。
Application_Context_Name
强制。在请求原语中,它持有客户端 提议 的值。在响应原语中,它保存相同的值或服务器 支
持 的值。(类似于 TLS 握手中的加密策略,是一个需要 协商 的值)
见 registered-cosem-names
Called_AP_Title, Called_AE_Qualifier, Called_AP_Invocation _Identifier,
Called_AE_Invocation_Identifier
可选。本技术报告不包含
Calling_AP_Title
可选。本技术报告不包含
Calling_AE_Invocation_Identifier
可选。携带 AA 的客户端用户的标识符。
Local_or_Remote
Responding_AE_Qualifier
可选
ACSE_Requirements
Security_Mechanism_Name
有条件的。携带客户端的推荐值,或服务端的支持值
见 COSEM_Authentication_Mechanism_Name
The Calling_Authentication_Value、the Responding_Authentication_Value
有条件的。两者分别保存客户端和服务端的 Security_Mechanism_Name 的验证值
Implementation_Information
可选的。本技术报告不包含
Proposed_xDLMS_Context
Negotiated_xDLMS_Context
xDLMS_Initiate_Error
User_Information
字段 混淆 。
information
Service_Class
s9.3.2.3 Use
服务原语通信模型:
confirmed AA – a
unconfirmed AA – b
pre-established AA – c
原语发生在 AP 和 AL 之间,
s9.3.3 The COSEM-RELEASE service
优雅释放 已经存在的 AA
调用它的方式( 参数)决定了它是否使用 ACSE 的
Use_RLRQ_RLRE 服务。 A-RELEASE
Security_Options:可选,只有当应用程序上下文是加密的,且 Invocation_Type =
COMPLETE 或 FIRST-PART 时才会出现。它决定了 AL 层的加密保护方式。
General_Block_Transfer_Parameters:可选,仅当使用 GBT 且 Invocation_Type = COMPLETE
或 FIRST-PART 时,它才存在。它提供有关 GBT 流式处理功能的信息:
Block_Transfer_Streaming(BTS):它由 AP 传递给 AL,以指示是否允许 AL 使用 GBT。
服务原语通信模型:
successful confirmed GET – a
响应不能分包
的情况,同 GET,需要 SET 请求包含有 全部公开属性
COSEM_Object_Attribute_Id == 0 ( Attribute_0 )
的 Data 值的 结构体 。Result 将携带一个结果,如果写入了 所有属性 则为 成功 ,或者只有一个 失败
原因 。
TODO: 部分成功的情况呢
服务原语通信模型:
successful confirmed SET – a
unconfirmed SET – d
与旧的服务(GET/SET/ACTION)的重大差异:
GET: 现在请求中也包含 data(虽然是空的),且响应同时包含 data 和 result(Data-Access-Result)
(而不是仅能选择其中一个)
SET: 现在响应同时包含 data(空的) 和 result(Data-Access-Result)(而不是仅有 result)
自描述(self-descriptive ,位 28)指示服务响应是否不自描述(FALSE)或自描述(TRUE)。当
设置为 TRUE 时,Access_Response_Body 参数应包含 Access_Request_Specification 参数;注
意 1:Access_Request_List_Of_Data 参数不包含在.response 服务原始数据中。
处理选项(processing-option,位 29)指定在处理列表上的请求失败时该怎么办。当设置为
FALSE 时,处理将继续。当设置为 TRUE 时,处理将中断,即列表上后续失败的那一个请求不
应被处理。如 9.3.9.1.2 所述,处理请求列表应从列表上的第一个请求开始,并继续处理下一
个直到列表末尾;
服务类( service-class ,位 30)指示服务调用是否已确认(TRUE)或未确认(FALSE);注意
2:Service_Class 参数适用于整个服务调用,而不是列表上的个别请求。注意 3:根据通信配
置文件,Service_Class 参数还可能决定用于携带 APDU 的帧类型。
优先级(priority,位 31)指示与服务调用实例相关联的优先级级别。它可以是普通(FALSE)
或高(TRUE)。注意 4:Priority 参数适用于整个服务调用,而不是列表上的个别请求。
Access_Request_Specification:
Access_Request_Get 不带选择性访问参数
Access_Request_Set 不带选择性访问参数
Access_Request_Action
Access_Request_Get_With_Selection 带选择性访问参数,不能用于 Attribute_0 情况
带选择性访问参数,不能用于 Attribute_0 情况
Access_Request_Set_With_Selection
数据推送
服务类型:unsolicited 未经请求
确认类型:unconfirmed 无需确认 或 confirmed 需确认
request 支持分块传输(GBT)
成功标志:
服务类型:收到 Data-Notification-Confirm xDLMS APDU
Confirmed
Unconfirmed 服务类型:收到支持层确认或支持层不返回失败
的 unconfirmed 的服务
unsolicited
request 支持分块传输
可选,如果 没有 相应的 ,则包含全部识别信息(标识发送者和目的AP,
Application_Addresses: AA
有关 SN 的跳过
s9.4 DLMS/COSEM application layer protocol specification
见文中 Table 81
AARQ APDU 由 COSEM-OPEN.request 原语决定,AARE APDU 由 COSEM-OPEN.response 原语决定
各个参数:
TODO: 用到的时候补充下
user-information 中携带
:AARQ APDU 包含
xDLMS InitiateRequest APDU
COSEM_Application_Context_Name
应用上下文参数
{joint-iso-ccitt(2) country(16) country-name(756) identified-organization(5) DLMS-UA(8)
application-context(1) context_id(x)}
其中application-context和context_id的定义:
parameter 携带
COSEM_Authentication_Mechanism_Name
认证机制参数(认证指的是验证身份和数据完整性,原数据会被第三方看到,但不能篡改或
伪造)
{joint-iso-ccitt(2) country(16) country-name(756) identified-organization(5) DLMS-UA(8)
authentication_mechanism_name(2) mechanism_id(x)}
其中 authentication_mechanism_name 和 mechanism_id:
COSEM_Authentication_Mechanism_Name 由 COSEM-OPEN.request 中的 Mechanism-name
parameter 携带
COSEM_Cryptographic_Algorithm_Id
加密算法参数
{joint-iso-ccitt(2) country(16) country-name(756) identified-organization(5) DLMS-UA(8)
cryptographic-algorithms (3) algorithm_id(x)}
其中cryptographic-algorithms和algorithm_id:
XDR 编码
s9.4.3.2 Encoding of the xDLMS APDUs
xDLMS APDUs 编码: A-XDR
s9.4.3.3 XML
DataNotification APDU 可以编码为 XML 格式。
s9.4.4 Protocol for application association establishment
s9.4.4.1 Protocol for the establishment of confirmed application associations
发送
client AP 原语(Service_Class == Confirmed),client (control
COSEM-OPEN.request CF
的 ,并将其 发送 到服务器。
AARQ APDU
”状态。
PENDING
总结:先 xDLMS ASE 层打包,再 ACSE 层打包,得到 AARQ APDU。AARQ APDU 先 ACSE 层
解包,再 xDLMS ASE 层解包
IDIS 8.2.2.7 Associations on different communication ports:
一个本地通信端口(IEC 62056-21,红外)同时仅允许打开一个 AA
一个远程通信端口(IP)同时允许打开多个 AA
不同通信端口可以同时分别打开 AA
如果客户端希望同时使用多个通信端口,则必须在每个通信端口分别打开对应的 AA。(比
如不能在 IP 通道打开 AA 后用于红外通道的数据通信)
Synchronization of Internal memory access must be handled by the manufacturer.(不太理
解,推测是:为了实现上面几条需要的不同通信端口间的内部信息同步有厂家自行实现)
s9.4.4.2 Repeated COSEM-OPEN service invocations
本地 AL 不等待回应直接回.confirm
一般用于单向通信或广播
无需确认 AA 中只能使用无需确认 xDLMS 数据传输服务
s9.4.4.4 Pre-established application associations
预连接 AA 的目的是简化数据交换。
不需要 COSEM-OPEN 和 COSEM-RELEASE 服务的 AA 建立和释放阶段,只使用数据传输服务。
预连接 AA 在整个电表生命周期内总是存在。逻辑设备包含一个用于预连接 AA 的 Association LN /
SN 接口对象。
预连接应用上下文:
max receive pdu_size= 1224 ( 和 IPv6 MTU 相关)
max send pdu size= 1224
DLMS version nr= 6
优雅 graceful 方式
断开 AL 的支持协议层
前提是 面向连接 的协议层(HDLC,TCP)
the COSEM-RELEASE, 参数 不存在 或为
Use_RLRQ_RLRE FALSE 就是不使用 ACSE 的
( A-
服务,见 9.3.3)
RELEASE
使用 ACSE A-Release 服务
Use_RLRQ_RLRE参数为 (就是使用 ACSE 的
TRUE A-RELEASE 服务),COSEM-RELEASE 服务
可以包含 加密的 xDLMS InitiateRequest / InitiateResponse 在 RLRQ / RLRE APDUs 的
user-
Data-Notification (16)
Access (17)
Get (19)
Set (20)
Selective-access (21)
Action (23)
For the multiple references services, a minimum of 16 references must be supported by the GET
request service and by the ACCESS request service. For the Set and Action service, the minimum is
应该是指 with-list 服务最小支持的数量。
limited to one. TODO:
Use Cases
Reading basic device configuration information (e.g. SAP, COSEM logical device name,
association, serial nrs, …)
Block-transfer-with-get
Get
General-block-transfer
Access
Behavior
No security; i.e. the COSEM client may access the meter with: LOWEST SECURITY (
Logical_Name_Referencing_NoCiphering, Security policy 0,
COSEM_lowest_level_security_mechanism_name(0) ), independent of the value of the
attribute security_policy of object “security setup”.
Use Cases
Retrieving data
Authorized actions in the meter
Block-transfer-with-get
Block-transfer-with-set
Get
Glo-get
Set
Glo-set
Multiple-references
Selective Access
Action
Glo-action
General-block-transfer
General-protection
Access
Behavior
Use Cases
All unconfirmed application layer servicese.g.: Broadcasting time, image transfer, TOU
tables, load control (scheduled or spontaneous), confirmed and unconfirmed push
services
Set
Glo-set
Glo-action
Action
Data-Notification
General-block-transfer
General-protection
Access
Behavior
client 端发起:
在 的 AAs 中
confirmed
unsolicited services:
InformationReport
三种执行方式:
unconfirmed,支持协议层失败重试;
unconfirmed,丢失支持协议层确认重试;
confirmed,丢失(应用层)确认重试
详见 9.4.6.7
如果服务器 AL 无法处理已确认的服务请求(例如,接收请求时未首先建立 AA 或请求有其他错
误),服务器 AL 要么丢弃该请求,要么在可能的情况下用confirmedServiceError APDU做出响应(仅
用于响应 AARQ 内的InitiateRequest, 以及 SN 服务中的ReadRequest and WriteRequest),或者在执行
时用 ExceptionResponse APDU 做出响应。这些 APDU 可能包含有关无法处理请求原因的诊断信
息。它们在 9.5 中定义。
s9.4.6.3 Protocol for the GET service
有多个属性的情况下,每个属性都要回对应的 Data 或 Data_Access_Result
通过 协商在 过长 时是否使用 或
conformance block APDU GBT service-specific block transfer
结合 9.3.6 对 GET 的说明,AP 负责 Data 的 编解码 ,同时可以对 进行分块 ,也就是 service-Data
应,也可动态生成(即时生成)。
服务特定分块发送接收流程:
第一个响应的 DataBlock_G(见 9.3.7):
Last_Block == FALSE;
Block_Number == 1;
Result (Raw_Data) == the first K bytes of the encoded data: B1, B2, B3,…., BK .
Last_Block == TRUE;
Block_Number == 客户端确认的块序号 +1;
Result == Data_Access_Result,表示失败的原因。
Last_Block == TRUE;
Block_Number == 客户端发送过来的块序号;
Result == Data_Access_Result,long-get-aborted。
Last_Block == TRUE;
Block_Number == 客户端发送过来的块序号;
Result == Data_Access_Result,no-long-get-in-progress。
角色。服务端发出去的都不需要客户端回确认,超时也不重发
s9.4.6.7 Protocol of the DataNotification service
可以使用 partial service invocations
可以使用 GBT
有以下三种重试策略:
,支持协议层失败重试
unconfirmed Service Class
AP 向 AL 上报后不计时,等到 AL 回复发送失败(支持协议层错误)时开始计时并在等待一定时
间后重发
,丢失支持协议层确认重试
unconfirmed Service Class
AP 向 AL 上报后即开始计时,除非 AL 回复成功(支持协议层成功),否则计时超时就开始下一
次重发
,丢失(应用层)确认重试
confirmed Service Class
AP 向 AL 上报后即开始计时,除非对方 AP 回复确认(无视支持协议层错误或成功),否则等计
时超时就开始下一次重发
s9.4.6.8 Protocol for the EventNotification service
详见 10
s9.4.6.9 Protocol for the Read service
s9.4.6.10 Protocol for the Write service
s9.4.6.11 Protocol for the UnconfirmedWrite service
s9.4.6.12 Protocol for the InformationReport service
SN 相关的跳过
s9.4.6.13 Protocol of general block transfer mechanism
block transfer 块传输总结 :
, ,用于本地 AL 和 AP 通信时的分包,在 GBT 和加密中才需要
1. Partial service invocations 9.3.5
使用,按逻辑分包,非字节分包。猜测因为 GBT 或通用加密是流式的,AL 和 AP 通信时必须
使用完整的服务原语,所以接收时可能需要由 AL 判断是否已经接收到 AP 可以识别的一部分
并可以向 AP 发送了,不过这个判断的条件还不太明确。
2. service-specific block transfer,9.3.5,用于远程 AP 间通信,由每种 xDLMS 服务自行定义。
,用于远程 AL 间通信,由 AP 提供窗口和流参数,但如果没有参数会不
3. general block transfer
会也触发 GBT 有待讨论.AA 握手时 AL 会保存相关参数,见 9.3.2.2 table 54
由 AL 层实现,使用 传输 任意长度
General-Block-Transfer (GBT) xDLMS APDUs APDUs
打包 APDU
根据 Security_Options 打包加密 APDU
如果大于协商的最大 APDU 大小,使用 GBT 分包
区别于 AP 层的 部分服务调用 (9.3.5),这个 GBT 是针对 APDU
partial service invocations
的,两者没有直接关系
原语参数:
用于 AP 指示 AL 是否可以用 流方式 (窗口)发送,(窗口的意思
Block_Transfer_Streaming ( BTS ):
就是每发若干个包确认一次,结合 BTW 若为 0,表示无需确认,若为 1,表示 1 个包确认一
次)
Block_Transfer_Window ( ):用于 AP 指示 AL 最大流窗口大小 ,但最终由 AL 决定,AL 可以设
BTW
置的很小用于传输丢失包。
unconfirmed services 固定 Block_Transfer_Streaming 为 ,以及 Block_Transfer_Window 为
FALSE
NOTE: GBT is often used with the DataNotification and Access services.
Send Queue SQ: :发送队列,对于 block :每收到 调用原语 ,(和 partial service invocations 无关,
AP
Gr : 接收到的 对方参数
Gs : 发送的 自己的参数
BNApeer :自己的发送被对方确认的数量,(被 Gr.BNA 修改)
BNAself :对方的发送被自己确认的数量,(发给对方)
NextBN :自己 SQ 发送队列的下个插入序号,(插入 SQ 时递增)
STRpeer :对方是否支持 GBT 流,(被 Gr.STR 修改)
STRself :自己是否支持 GBT 流,(被本地 AP 修改)
Wpeer :对方接收窗口大小,(被 Gr.W 修改)
Wself :自己接收窗口的大小,(被本地 AP 修改)
其中 Wself 有默认值,是不是不需要 AP 提供,也可以有默认值 更新:有默认值的
TODO:
参数不需要 AP 提供也能使用,初始值就是默认值
子过程:
9.4.6.13.4 Send GBT APDU stream
最后一包管理。
confirmed client-server services
客户端发送请求,LB=0,直到最后一包,LB=1。此时SQ应该空了,如果收到服务端
响应,需要向SQ填充空的确认包,再发送,此时LB=1,如此重复。(如果服务端的
LB=1 这包丢了,就等超时后重复请求,直到收到 服务端 LB=1 的包)
服务端发送LB=0,直到收到客户端LB=1的包(请求发完后以及确认包的LB都为1)
且是服务端的最后一包,发送LB=1,服务端等待超时无请求后退出 GBT
unsolicited, confirmed service
该服务类型为需确认的上报
服务端发送上报 LB=0 直到发送最后一包 LB=1,等待客户端响应 LB=1,如果没有,
等待超时后重复上报,直到收到后退出 GBT。
客户端发送确认和响应都是LB=0,直到收到服务端LB=1且客户端已经发送完最后一
包,客户端发送 LB=1,客户端等待超时未接收数据后退出 GBT。
总结:谁主动发起,谁负责保证 GBT 完成。第一种情况中 client 主动发起,它负责接收
到服务端的 LB=1 才能退出,否则要重发。server 端作为被动方如果一段时间没收到数
据则自行退出。
TODO:9.4.6.13.4.3.1 If the SQ is empty, an empty block is added to the SQ and Nex
tBN is incremented. 为什么要加入空的 block,这个空的好像是确认包 更新:
9.4.6.13.4.3.2 Last block management中提到了如果客户端把请求的APDU全发完
了,那发送队列就空了,这时候还需要对服务端的响应回确认,所以还需要空的
block。或者当服务端在接收请求回确认时SQ也是空的,需要填充确认包
Gs.LB = B.LB, Gs.STR = STRself, Gs.W = Wself, Gs.BN = B.BN, Gs.BNA = BNAself and Gs.BD = B.BD
每个窗口最后一包以及LB=1时的包的Gs.STR都为0
被确认后才能从 SQ 删除,最后一包不需要对方确认,所以不能直接从 SQ 中删除。
TODO: 应该什么时候删除,文中也没说,是否是超时
Unconfirmed GBT send
调用原语参数 要等于 0
AP BTW
全部发完就清空 SQ,不用确认
9.4.6.13.5 Process GBT APDU sub-procedure
这个过程是接收一个窗口的过程
1. 判断GBT APDU是否被对方拒绝(是不是表明参数不合理)
2. 如果收到的是Gr.BN=1且Gr.BNA=0,表示是初始化包,是由对方发起的GBT过程,需要初始
化(是不是就是向AP请求参数)
3. 是否是confirmed service
9.4.6.13.5.2 Processing GBT APDUs in a confirmed GBT procedure
1. 判断合法性后将B放入RQ接收队列
2. 配置窗口和对方确认序号,Wpeer = Gr.W, BNApeer = Gr.BNA
3. 清空确认序号之前的SQ发送队列数据(已经确认)
4. RQ内数量是否等于BTW(BTW是AP给的接收窗口大小上限,相等说明一个窗口满了) ,
是的话说明一个窗口接收结束,否的话说明还有后续block
5. 判断STRpeer,如果为0表示即使没有到窗口上限,该(流)窗口也结束了,为1表示该
窗口还有后续block
6. (一个窗口结束需要回确认)
RQ中的报文回给AP,需要调用 .
Check RQ and fill gaps sub-procedure
1. 判断合法性后将B放入RQ接收队列
2. 如果达到RQ上限,则结束(虽然没有窗口的概念,但RQ也有上限,达到上限强制中
断)
3. 如果是最后一包LB=1则结束,如果不是则等待下一包
如果在结束后收到新的包,将视为overflow,直接丢弃,本次结果回给AP层后,清空
RQ,本次GBT结束
9.4.6.13.6 Check RQ and fill gaps
9.4.6.13.6.2 Confirmed GBT procedure
1. RQ为空时全部重传,Wself(接收窗口大小)设置为BTW也就是最大窗口
2. RQ不为空时检查gaps,为空时表示无需重传,BNAself(己方确认)设置为B.BN(确认最后
一包);不为空时表示还有需要重传的,此时Wself应设置为小于等于要重传的第一个gap
大小(比如只丢了一个包或者说第一个gap只需要重传一个包,就重传一个包,接收窗
口设为1就行,这样只要提供起始序号和窗口大小,对方就知道要补几个包了),开始
请求重传。
gap(缺口) 可以理解为一个连续的丢包块
比如1x2x3√4x5√6√7√
第一个gap大小就是2,第二个gap大小就是1
9.4.6.13.6.3 Unconfirmed GBT procedure
没有重传机制,没收全就是失败。
s9.4.6.13.7 GBT protocol examples
TODO: 图里的 GET.cnf NORMAL(FIRST-PART)是否是一种 AL 向 AP 请求 GBT 参数的机制,前
提是 AL 不知道相关的参数,所以 GET.req NORMAL(COMPLETE)其实是个空的报文?结合
9.3.5 Additional service parameters,这个参数是否应该在这个原语里携带。更新:the
client AP invokes a GET.request NORMAL service primitive, without additional service
明确提到了 GET
parameters. The client AL sends the request in a Get-Request-Normal APDU
相关原语可以携带 Additional service parameters。所以这里就是请求 GBT 参数,因为对方
发起了 GBT ,AL 需要 AP 的许可来使用 GBT 发送。
可以只补单个包,此时请求的 W 置 1,BNA 置 3,表示窗口大小变为 1,就是单个确认。然后 BNA
为 3 表示让对方补第 4 个包。
TODO:如果 4、5 两包都丢了,是不是就是先补 4,再补 5,不会两包一起补。更新:如果
4、5 丢了,就 W 置 2,BNA 置 3,可以表示丢了连续的两个包
GBT 终止条件:
1. 收到专用于终止命令的 GBT APDU: LB = 1, STR = FALSE, BN = 0 and BNA = 0;
2. 开始新的 GBT 过程。收到 BN = 1 and BNA = 0;
义为通信概要文件规范的一部分。
s10.2 The 3-layer, connection-oriented, HDLC based ommunication profile
应用层:DLMS/COSEM AL,章节 9
链路层:基于 HDLC 标准的,章节 8
物理层: 章节 5,光口和本地回环物理接口见章节 6
s10.2.3 Identification and addressing scheme
提供服务给 AL
Data Link SAP-s
例子:Client_01 (HDLC address = 16) and Server 2 in Host Device 02 (HDLC address = 2392),客户端
地址为 16,服务端地址为 2392,23 为 upper 地址,92 为 lower 地址
s10.2.4 Supporting protocol layer services and service mapping
DL 层连接管理
面向连接数据传输
无连接数据传输
Server_LLC_Address;
Client_LLC_Address.
页)判断请求是否是 Unconfirmed,
s10.2.6.2 Correspondence between AAs and data link layer connections, releasing AAs
释放AA连接 的方式是 A-RELEASE服务 或 断开支持层连接 ,因为本配置文件不需要任何下层连接,所以
断开支持层连接方式不可用,如果 A-RELEASE 服务也不支持,就没有别的方式释放连接
s10.2.6.3 Service parameters of the COSEM-OPEN / -RELEASE / -ABORT services
由于 SNRM 和 DISC 可以透明传输高层参数,COSEM-OPEN 和 COSEM-RELEASE 中的
User_Information 将会可用
s10.2.6.4 EventNotification service and protocol
事件上报时,服务端角色为 Management Logical Device(upper HDLC 地址 0x01),客户端角色为
Management AP(upper HDLC 地址 0x01)
通信协议栈
客户端发起 TriggerEventNotificationSending.request 原语,发送 UI 帧交出发送权,此时服务端才
能上报
s10.2.6.5 Transporting long messages
HDLC 提供分段(Segmentation)服务来传输长消息,见 8.4.5.4.5
s10.2.6.6 Supporting multi-drop configurations
可以视为逻辑总线
冲突避免一般使用主从模型,由主站控制发送权限
上报时可能多个设备同时上报,需要解决两个问题:
总线上的冲突,冲突在物理层体现,由厂家解决(可以用 CSMA 之类的)
客户端不知道需要上报服务端的物理地址时,目的地址可以使用 CALLING Physical Device
Address(只有要上报的客户端才会接受这个地址)
TCP TL 层提供的服务:
TCP connection manager AP:
DLMS/COSEM AL:
UDP TL 层提供的服务:
DLMS/COSEM AL:
Protocol_Connection_Parameters :
Protocol (Profile) Identifier – TCP/IP or UDP/IP;
Server_IP_Address – COSEM Physical Device Address;
Server_TCP_or_UDP_Port – The TCP or UDP port used for DLMS/COSEM, see 7.2;
不能通过断开支持层连接 断开 AA
User_Information 不可用
:
CoAP URI Uri-Host + Uri-Port + Uri-Path
口 ,可能会动态变化
DLMS AE 通过唯一 systemtitle 标识,通过以下方式交换:(TODO:AE 是什么意思)
的类型,这是一种能够以低比特率进行远距离通信的无线网络。LPWAN 可以同时满足覆盖和续航
的要求。以最小的功耗提供最长的距离覆盖是 LPWAN 最大的技术优势。
是物联网领域的一项新兴技术,支持广域网中低功耗设备的蜂窝数据连接。它也称为
NB-IoT
低功耗广域网(LPWAN)。NB-IoT 支持设备有效连接,待机时间长,对网络连接要求高。据
称,NB-IoT 设备的电池续航时间可以提高到至少 10 年。
作为物联网的一种应用场景。它具有超可靠和低延迟的特点。eMTC 主要应用在设备之
eMTC
间的通信需求上。
是一项专有技术, Semtech 为其提供芯片。Lora 技术改变了以往在传输距离和功耗之间
Lora
的折衷,为用户提供了一个简单的系统,可以实现远距离、长续航、大容量,进而扩展传感
器网络。
础设施项目设计。每个个人区域网络(PAN)被设计成用一个边界路由器支持数千个路由器设备。一
个 FAN 可以由多个 pan 组成,允许单个网络扩展到数百万个设备,见图 196。
支持层固定使用了 UDP 和 IPV6,对传输层来说和 UDP profile 类似,wrapper 和 TCP-UDP/IP profile
相同
s10.10 Gateway protocol
Header
Network ID
目的网络 ID,可以理解为VLAN ID
Address length L
目的物理地址长度
Physical device address
目的物理地址
只有网关设备处理该报文
s11 AARQ and AARE encoding examples
s12 Encoding examples: AARQ and AARE APDUs using a ciphered
application context
使用 compact-array 减少类型描述,也能压缩。
compact-array:
Console
compact-array [19] IMPLICIT SEQUENCE
{
contents-description [0] TypeDescription,
array-contents [1] IMPLICIT OCTET STRING
}
相关文章
2022/03/08
2022/03/08
C++ 实现的DAO(数据访问对象模式)
本文将会介绍如何使用 C++实现设计模式中的 DAO(数据访问对象模式) DAO 介绍 什么是 DAO 在计算机软件中,数
据访问对象(data access object,DAO)是为某种类型的数据库或其他持久性机制提供一个抽象接口的对象。…
2021/08/04
使用PlantUML绘制类图
本文基于 vscode 的 PlantUML 插件绘制类图。 类的 UML 表示 使用 UML 表示一个类,主要由三部分组成。类名、
属性、方法。其中属性和方法的访问修饰符用 - 、# 、+ 表示 private、protected、public。 如图所示,表示A类…
上一篇 下一篇
《Operating Systems: Three Easy Pieces》学习 Orangepi4 维护指南
笔记(七) 调度:比例份额
1 个表情
👍1