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