如果無法對節點執行作業,節點的資料模型 (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 也可能包含萬用字元運算子,用於選取多個節點例項。
計時和不計時
執行寫入或叫用交易的方式有兩種:計時和不計時。定時交易會為要傳送的寫入/叫用動作設定逾時上限。這項逾時設定是為了防止交易遭到攔截攻擊。這項功能特別適用於控制資產存取權的裝置,例如車庫門遙控器和門鎖。
如要瞭解限時交易,請先瞭解攔截攻擊的發生方式,以及限時交易的重要性。
攔截攻擊
攔截攻擊的模式如下:
- Alice 向 Bob 傳送初始訊息,例如寫入要求動作。
- Eve 是中間人,會攔截訊息並阻止 Bob 接收訊息,例如透過某種無線電干擾。
- Alice 沒有收到 Bob 的回覆,因此傳送第二則訊息。
- Eve 再次攔截,阻止 Bob 收到。
- Eve 將第一則攔截的訊息傳送給 Bob,假裝是 Alice 傳送的。
- Bob 將回應傳送給 Alice (和 Eve)。
- Eve 保留第二則攔截的訊息,以便稍後重播。由於 Bob 從未收到 Alice 傳送的原始第二則攔截訊息,因此會接受該訊息。如果訊息編碼為「open lock」等指令,則代表安全漏洞。
為防範這類攻擊,定時動作會在交易開始時設定交易逾時上限。即使 Eve 成功執行攻擊向量的前六個步驟,也無法在步驟 7 重播訊息,因為交易逾時已過期。
限時交易會增加動作的複雜度和數量。因此,我們不建議在每筆交易中都使用這類金鑰,而只建議在裝置上執行重要作業時使用,以便控管實體或虛擬安全性和隱私權資產。
SDK 抽象化
「讀取交易」、「寫入交易」和「叫用交易」等章節,概略說明 SDK 執行的互動模型動作。
開發人員建立使用 Matter SDK 的產品時,通常不會直接執行動作,而是由 SDK 函式抽象化動作,並將動作封裝成互動。不過,工程師必須瞭解 IM 動作,才能充分掌握 Matter 的功能,並精細控管 SDK 導入作業。