互动模式概念

如果我们无法对节点执行操作,那么节点的数据模型 (DM) 就无关紧要。交互模型 (IM) 定义了节点的 DM 与其他节点的 DM 之间的 DM 关系:一种用于 DM 之间通信的通用语言。

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

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

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

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

交易支持多种操作,例如从另一个节点请求属性或事件的读取请求操作,或者其响应(即报告数据操作),该操作会将信息从服务器传回客户端。

启动者和目标

发起交易的节点是发起方,而响应的节点是目标方。通常,启动器是客户端集群,目标是服务器集群。不过,此模式也有例外情况,例如本部分下文进一步分析的订阅互动

社区

Matter 中的节点可以属于某个群组。设备组是一种机制,用于同时向同一操作中的多个设备寻址和发送消息。一个组中的所有节点共享相同的组 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. Alice 未收到 Bob 的回复,于是发送了第二条消息。
  4. Eve 再次拦截,阻止 Bob 收到消息。
  5. Eve 将截获的第一条消息发送给 Bob,就好像是 Alice 发送的。
  6. Bob 将响应发送给 Alice(和 Eve)。
  7. Eve 保留截获的第二条消息,以便日后重放。由于 Bob 从未收到 Alice 发送的原始第二条拦截消息,因此会接受该消息。当消息编码为“开锁”等命令时,此消息表示存在安全漏洞。

为防止此类攻击,定时操作会在交易开始时设置最长交易超时时间。即使 Eve 设法执行攻击向量的前六个步骤,也无法在第 7 步重放消息,因为交易的超时时间已过。

定时交易会增加操作的复杂性和数量。因此,不建议在每笔交易中使用它们,而只建议在对可控制实体或虚拟安全和隐私资产的设备执行关键操作时使用。

SDK 抽象

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

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