如果我们无法对节点执行操作,则节点的数据模型 (DM) 不相关。互动模型 (IM) 用于定义节点与其他节点的 DM 之间的关系:一种 DM 之间通信的通用语言。
节点通过以下方式相互交互:
- 读取和订阅属性和事件
- 向属性写入数据
- 调用命令
每当某个节点与另一个节点建立加密通信序列时,它们之间就会形成互动关系。互动可以由一个或多个事务组成,而事务由一个或多个操作组成,这些操作可以理解为节点之间的即时通讯 (IM) 级消息。
事务支持多种操作,例如从其他节点请求属性或事件的读取请求操作,或其响应,即将信息从服务器传回客户端的报告数据操作。
发起方和目标
发起事务的节点是发起方,而响应的节点是目标。通常,发起方是客户端集群,目标是服务器集群。不过,也有例外情况,例如本部分下文中分析的订阅互动。
社区
Matter 中的节点可以属于组。设备组是一种机制,用于在同一操作中同时向多部设备寻址和发送消息。组中的所有节点都具有相同的组 ID(一个 16 位整数)。
为了实现群组级通信(群组广播),Matter 会利用 IPv6 Multicast 消息,并且所有群组成员都具有相同的 Multicast 地址。
路径
每当我们想要与属性、事件或命令互动时,都必须指定此互动的路径:属性、事件或命令在节点的数据模型层次结构中的位置。需要注意的是,路径还可以使用组或通配符运算符来同时定位多个节点或集群,汇总这些互动,从而减少操作数。
此机制对于提高通信响应速度至关重要。例如,当用户想要关闭所有灯时,语音助理可以与组中的多个灯建立一次互动,而不是一系列单独的互动。如果发起者与每个灯具建立单独的互动,则可能会导致设备响应时间出现人眼可感的延迟。这种影响会导致多个设备对命令做出响应时出现明显延迟。这通常称为“爆米花效应”。
您可以使用以下任一选项组装 Matter 中的路径:
<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID> <cluster> <attribute | event | command>
在这些路径构建块中,endpoint
和 cluster
还可能包含用于选择多个节点实例的通配符运算符。
限时和不限时
执行写入或调用事务有两种方式:限时和不限时。有时间限制的事务会为要发送的写入/调用操作建立超时上限。此超时设置旨在防止对交易进行拦截攻击。这对于控制对资产的访问权限的设备(例如车库门开启器和锁具)尤为适用。
如需了解限时交易,了解拦截攻击是如何发生的以及限时交易的重要性非常有用。
拦截攻击
拦截攻击具有以下模式:
- Alice 向 Bob 发送初始消息,例如写入请求操作。
- Eve 是一名中间人,会拦截消息并阻止 Bob 接收消息,例如通过某种类型的无线电干扰。
- Alice 未收到 Bob 的回复,因此发送了第二封邮件。
- Eve 再次拦截并阻止 Bob 接收。
- Eve 将第一条拦截到的消息发送给 Bob,就像是这条消息来自 Alice。
- Bob 将响应发送给 Alice(和 Eve)。
- Eve 会保留第二条拦截的消息,以便稍后重放。由于 Bob 从未收到 Alice 发送的原始第二个拦截消息,因此会接受该消息。如果消息对“打开锁”等命令进行编码,则表示存在安全漏洞。
为防止此类攻击,定时操作会在事务开始时设置事务超时上限。即使 Eve 设法执行攻击矢量的前 6 个步骤,也无法在第 7 步重放消息,因为事务超时已过。
定时事务会增加操作的复杂性和数量。因此,不建议对每笔交易使用这些权限,而仅应对控制物理或虚拟安全和隐私资产的设备上的关键操作使用这些权限。
SDK 抽象
读取事务、写入事务和调用事务部分简要介绍了 SDK 执行的互动模型操作。
创建使用 Matter SDK 的产品的开发者通常不会直接执行调用来执行 Action;Action 由 SDK 函数提取出来,这些函数会将 Action 封装到 Interaction 中。不过,了解 IM 操作对于让工程师熟练掌握 Matter 的功能以及精细控制 SDK 实现至关重要。