如果無法對節點執行作業,節點的資料模型 (DM) 就沒有意義。互動模型 (IM) 會定義節點的 DM 關係,以及其他節點的 DM 關係:這是 DM 之間通訊的通用語言。
節點會透過下列方式互動:
- 讀取及訂閱屬性和事件
- 寫入屬性
- 叫用指令
節點與其他節點建立加密通訊序列時,即構成「互動」關係。互動可能由一或多個「交易」組成,而交易則由一或多個「動作」組成,可視為節點之間的 IM 層級訊息。
交易支援多種動作,例如從其他節點要求屬性或事件的讀取要求動作,或是其回應 (即報告資料動作),可將資訊從伺服器傳回用戶端。
發起端和目標
發起交易的節點是「發起者」,而回應的節點是「目標」。通常「啟動者」是「用戶端叢集」,「目標」是「伺服器叢集」。不過,這個模式也有例外狀況,例如本節稍後分析的「訂閱互動」。
群組
Matter 中的節點可能屬於群組。裝置群組是一種機制,可同時將訊息傳送至同一動作中的多個裝置。群組中的所有節點共用相同的群組 ID (16 位元整數)。
如要進行群組層級的通訊 (Groupcast),Matter 會使用 IPv6 Multicast 訊息,所有群組成員都會有相同的 Multicast 位址。
路徑
每當要與屬性、事件或指令互動時,都必須指定互動的路徑:屬性、事件或指令在節點資料模型階層中的位置。但路徑也可以使用群組或萬用字元運算子,同時處理多個節點或叢集,彙整這些互動,進而減少動作數量。
這項機制對於提升通訊的回應速度至關重要。舉例來說,使用者想關閉所有燈具時,語音助理可以與群組中的多個燈具建立單一互動,而不是一連串的個別互動。如果「發起者」與每盞燈建立個別「互動」,可能會在裝置回應速度方面產生人為可察覺的延遲。這項效果會導致多部裝置對指令做出反應時,彼此之間出現明顯延遲。這通常稱為「爆米花效應」。
您可以使用下列任一選項,在 Matter 中組裝路徑:
<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID> <cluster> <attribute | event | command>
在這些路徑建構區塊中,endpoint 和 cluster 也可能包含萬用字元運算子,用於選取多個節點執行個體。
計時和非計時
執行寫入或叫用交易的方法有兩種:計時和非計時。計時交易會為要傳送的寫入/叫用動作設定最長逾時時間。這項逾時設定的目的是防止交易遭到攔截攻擊。特別適用於可控制資產存取權的裝置,例如車庫門遙控器和門鎖。
如要瞭解限時交易,請先瞭解攔截攻擊的發生方式,以及限時交易的重要性。
攔截攻擊
攔截攻擊的模式如下:
- 小莉傳送初始訊息給志明,例如「撰寫要求動作」。
- 中間人 Eve 攔截訊息,並阻止 Bob 接收訊息,例如透過某種無線電干擾。
- 艾莉絲沒有收到志明回覆,因此傳送第二則訊息。
- Eve 再次攔截訊息,阻止 Bob 接收。
- Eve 會將攔截到的第一則訊息傳送給 Bob,並偽裝成 Alice 傳送。
- Bob 將回應傳送給 Alice (和 Eve)。
- 伊芙會保留截獲的第二封訊息,以供日後重播。由於鮑伯從未收到愛麗絲傳送的原始第二封訊息,因此會接受該訊息。如果訊息編碼的指令是「開鎖」等,這類訊息就會造成安全漏洞。
為防範這類攻擊,Timed Actions 會在交易開始時設定交易逾時上限。即使 Eve 設法執行攻擊向量的前六個步驟,由於交易逾時,她也無法在步驟 7 重播訊息。
計時交易會增加動作的複雜度和數量。因此,不建議用於每筆交易,只適用於可控管實體或虛擬安全和隱私權資產的裝置上,執行重要作業時使用。
SDK 抽象化
「讀取交易」、「寫入交易」和「叫用交易」部分提供 SDK 執行的互動模型動作概要。
建立使用 Matter SDK 的產品時,開發人員通常不會直接執行動作呼叫,而是透過 SDK 函式將動作封裝至互動中。不過,瞭解 IM 動作有助於工程師掌握 Matter 的功能,並精細控管 SDK 實作項目,因此非常重要。