如果無法對節點執行作業,則節點的資料模型 (DM) 就不相關。「互動模型」 (IM) 定義節點與其他節點的 DM 關係,這是 DM 之間的通用通訊語言。
節點可透過以下方式彼此互動:
- 讀取及訂閱屬性和事件
- 寫入屬性
- 叫用指令
每當節點與另一個節點建立加密的通訊序列時,就構成一個互動關係。互動可能由一或多項「交易」組成,而交易是由一或多個「動作」組成,可以解讀為節點之間的 IM 層級訊息。
![互動模式階層](https://developers.home.google.com/static/matter/primer/images/primer-im-hierarchy.png?authuser=1&hl=zh-tw)
交易支援幾種動作,例如要求其他節點提供屬性或事件的讀取要求動作,或是回報資料動作,也就是將資訊從伺服器傳回用戶端的「讀取要求動作」。
啟動器與目標
啟動交易的節點為「發起者」,回應的節點為「目標」。一般來說,發起者是用戶端叢集,目標為伺服器叢集。但是這個模式仍有例外狀況,例如本節下進一步分析的「訂閱互動」。
群組
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
也可以包含萬用字元運算子,用於選取多個節點執行個體。
計時與無計時
執行寫入或叫用交易的方式有兩種:Timed 和 Untimed。定時交易會為要傳送的寫入/叫用動作建立「逾時時間上限」。此逾時的目的是防止交易發生攔截攻擊。對會限制資產存取權的裝置 (例如車庫開啟器和門鎖) 特別有效。
如要瞭解定時交易,瞭解攔截式攻擊的發生方式,以及定時交易的重要性。
攔截攻擊
攔截式攻擊的模式如下:
- Alice 會向 Bob 傳送首則訊息,例如「寫入要求動作」。
- 中間人 Eve 攔截了此訊息,並阻止小明接收到這封信,例如透過某種廣播電台作曲。
- 麗麗是未收到來自 Bob 的回覆,先傳送第二則訊息。
- 夏娃再次攔截並阻止白先生接收它。
- 夏娃將第一個攔截的訊息傳送給 Bob,就像來自小艾一樣。
- Bob 將回覆傳送給 Alice (和夏娃)。
- 夏娃會保留第二個攔截的訊息,方便稍後重播。由於 Bob 從未收到來自 Alice 的原始第二攔截訊息,因此他將接受該訊息。當訊息對「開啟鎖定」等指令進行編碼時,這則訊息代表發生安全漏洞。
為防止這類攻擊,定時動作會在交易開始時設定最長的交易逾時時間。即使 Eve 成功執行攻擊向量的前六個步驟,因為交易逾時,也無法在步驟 7 上重播訊息。
定時交易會增加複雜度和動作數量。因此,不建議每項交易都採用這些方法,但只有可以控管實體或虛擬安全性和隱私權資產的重要作業。
SDK 抽象化機制
「讀取交易」、「寫入交易」和「叫用交易」章節提供了 SDK 所執行互動模型動作的概要總覽。
使用 Matter SDK 建立產品的開發人員通常不會直接執行動作來直接執行動作;動作是由 SDK 函式提取,而該函式會封裝成「互動」。不過,要讓工程師充分掌握 Matter 的功能,並精細地控管 SDK 實作項目,就必須瞭解 IM 動作。