互動模型概念

如果無法對節點執行作業,節點的資料模型 (DM) 就沒有意義。互動模型 (IM) 定義節點與其他節點 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. 小莉傳送初始訊息給志明,例如「撰寫要求動作」。
  2. 中間人 Eve 攔截郵件,並阻止 Bob 接收郵件,例如透過某種無線電干擾。
  3. 阿莉沒有收到志明回覆,因此傳送第二則訊息。
  4. Eve 再次攔截訊息,阻止 Bob 接收。
  5. Eve 會將攔截到的第一則訊息傳送給 Bob,並偽裝成 Alice 傳送。
  6. Bob 將回覆傳送給 Alice (和 Eve)。
  7. Eve 會保留第二則攔截到的訊息,以便稍後重播。由於志明從未收到小莉傳送的原始第二則攔截訊息,因此會接受該訊息。如果訊息編碼的指令是「開鎖」等,就表示發生安全漏洞。

為防範這類攻擊,Timed Actions 會在交易開始時設定交易逾時上限。即使 Eve 設法執行攻擊向量的前六個步驟,由於交易逾時,她也無法在步驟 7 重播訊息。

計時交易會增加動作的複雜度和數量。因此,不建議用於每筆交易,只適用於裝置上可控管實體或虛擬安全和隱私權資產的重要作業。

SDK 抽象化

「讀取交易」、「寫入交易」和「叫用交易」部分會提供 SDK 執行的互動模型動作概略總覽。

建立使用 Matter SDK 的產品時,開發人員通常不會直接呼叫來執行動作,而是透過 SDK 函式將動作抽象化,並封裝至互動中。不過,瞭解 IM 動作有助於工程師充分掌握 Matter 的功能,並精細控管 SDK 實作項目。