互动模式概念

如果我们无法对节点执行操作,则其数据模型 (DM) 不相关。交互模型 (IM) 定义了节点与其他节点的 DM 的 DM 关系:DM 之间通信的通用语言。

节点通过以下方式相互交互:

  • 读取和订阅属性和事件
  • 写入属性
  • 调用命令

每当节点与其他节点建立加密通信序列时,它们就构成了交互关系。互动可以由一个或多个事务组成,事务可以由一个或多个操作组成,这些操作可以理解为节点之间的即时通讯级消息。

互动模型的层次结构
图 1:互动模型的层次结构

事务支持多种操作,例如从其他节点请求属性或事件的读取请求操作,或其响应,即报告数据操作,可将信息从服务器传回客户端。

启动器和目标

启动事务的节点是“发起方”,而响应的节点是“目标”。通常,发起者是客户端集群,目标是服务器集群。不过,此模式也有例外情况,例如本部分后面分析的订阅互动

群组

Matter 中的节点可以属于某个。设备组是一种机制,用于在同一 Action 中同时处理多个设备并将消息发送至多台设备。群组中的所有节点共用同一个群组 ID,这是一个 16 位整数。

为了完成群组级通信 (Groupcast),Matter 使用了 IPv6 Multicast 消息,并且所有群组成员均具有相同的 Multicast 地址。

路径

每当我们要与属性、事件或命令互动时,都必须指定此互动的路径:属性、事件或命令在节点数据模型层次结构中的位置。需要注意的是,路径也可以使用通配符运算符同时寻址多个节点或集群,从而汇总这些互动,从而减少操作数量。

此机制对于增强通信的响应能力非常重要。例如,当用户想要关闭所有灯时,语音助理可以与一个组内的多个灯建立单个互动,而不是一系列单独的互动。如果启动器与每个指示灯创建单独的交互,就可能会导致设备响应速度出现人可感知的延迟。这种效应会导致多台设备对命令做出反应,且这些设备之间存在可见的延迟。这通常称为“爆米花效果”。

您可以使用以下选项之一组合 Matter 中的路径:

<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID>        <cluster> <attribute | event | command>

在这些路径构建块中,endpointcluster 还可能包含通配符运算符,用于选择多个节点实例。

计时和非计时

执行写入或调用事务的方式有两种:定时未定时。定时事务为要发送的写入/调用操作设定了最长超时。此超时的目的是防止事务发生拦截攻击。它对限制资源(如车库开启器和锁)的访问权限的设备尤其有效。

为了理解定时事务,了解拦截攻击的可能发生方式以及定时交易的重要性会很有帮助。

《拦截攻击》

拦截攻击具有以下模式:

  1. Alice 向 Bob 发送初始消息,例如写入请求操作。
  2. 中间人 Eve 拦截消息并阻止 Bob 接收,例如通过某种类型的无线电干扰等方式。
  3. 爱丽没有收到 Bob 的回复,她发送了第二条消息。
  4. Eve 再次拦截,并阻止 Bob 接收信号。
  5. Eve 向 Bob 发送第一条消息,就像它是发自 Alice 一样。
  6. Bob 将回复发送给爱丽丝(和夏娃)。
  7. Eve 持有第二条拦截的消息,以便稍后重放。由于 Bob 从未收到来自 Alice 的第二条原始被拦截消息,因此它将接受它。此消息表示当消息编码“open lock”等命令时发生安全事故。

为了防止这些类型的攻击,定时操作会在事务开始时设置事务超时上限。即使 Eve 成功执行了攻击途径的前六步,由于事务超时,它也无法重放第 7 步中的消息。

定时事务增加了复杂性和操作数量。因此,建议不要为每个事务执行这些操作,而只建议在可控制物理或虚拟安全和隐私资产的设备上执行关键操作。

SDK 抽象

读取事务写入事务调用事务部分简要介绍了 SDK 执行的交互模型操作。

使用 Matter SDK 创建产品的开发者通常不会执行直接执行 Action 的调用;这些 Action 由 SDK 函数抽象出来,这些 SDK 函数会将其封装到 Interaction 中。不过,了解 IM 操作对工程师能够充分熟练掌握 Matter 的功能以及对 SDK 实现进行精细控制非常重要。