ノードに対してオペレーションを実行できない場合、そのノードのデータモデル(DM)は関係ありません。インタラクション モデル(IM)は、ノードと他のノードの DM との DM 関係を定義します。これは DM 間の通信のための共通言語です。
ノードは次の方法で相互に作用します。
- 属性とイベントの読み取りと登録
- 属性への書き込み
- コマンドの呼び出し
ノードが別のノードと暗号化された通信シーケンスを確立するたびに、それらはインタラクション関係を構成します。インタラクションは 1 つ以上のトランザクションで構成され、トランザクションは 1 つ以上のアクションで構成されます。アクションは、ノード間の IM レベルのメッセージとして理解できます。
![インタラクション モデルの階層](https://developers.home.google.com/static/matter/primer/images/primer-im-hierarchy.png?authuser=4&hl=ja)
トランザクションではいくつかのアクションがサポートされています。たとえば、別のノードから属性またはイベントをリクエストする読み取りリクエスト アクションや、そのレスポンスであるレポートデータ アクションで、サーバーからクライアントに情報を返します。
開始元とターゲット
トランザクションを開始するノードが「イニシエータ」で、応答するノードがターゲットです。通常、イニシエータはクライアント クラスタ、ターゲットはサーバー クラスタです。ただし、このセクションで後述する定期購入のインタラクションなど、このパターンには例外があります。
グループ
Matter 内のノードは Group に属することができます。デバイスのグループは、同じアクション内の複数のデバイスに同時にメッセージを送信するためのメカニズムです。グループ内のすべてのノードは同じグループ ID(16 ビット整数)を共有します。
グループレベルの通信(Groupcast)を実現するため、Matter は IPv6 の Multicast メッセージを利用し、すべてのグループ メンバーは同じ Multicast アドレスを持ちます。
パス
属性、イベント、コマンドとやり取りする場合は常に、その相互作用のパス(ノードのデータモデル階層における属性、イベント、コマンドの場所)を指定する必要があります。ただし、パスでグループまたはワイルドカード演算子を使用して複数のノードまたはクラスタを同時にアドレス指定し、これらのインタラクションが集計されてアクションの数が減る場合があります。
このメカニズムは、コミュニケーションの応答性を向上させるために重要です。たとえば、ユーザーがすべてのライトをシャットダウンする場合、音声アシスタントは、一連の個別の操作ではなく、グループ内の複数のライトに対する単一の操作を確立できます。イニシエータが各ライトで個別のインタラクションを作成すると、デバイスの応答性に人間が認識できるレイテンシが発生することがあります。この現象により、複数のデバイスがコマンドに対して目に見える遅延を持たせて反応します。これは多くの場合「ポップコーン効果」と呼ばれます。
Matter 内のパスは、次のいずれかの方法で作成できます。
<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID> <cluster> <attribute | event | command>
また、これらの Path 構成要素内で、endpoint
と cluster
には、複数の Node インスタンスを選択するワイルドカード演算子を含めることもできます。
時間制限ありと時間指定なし
書き込みトランザクションまたは呼び出しトランザクションを実行するには、時間指定と時間指定なしの 2 つの方法があります。時間指定トランザクションは、書き込み/呼び出しアクションを送信するための最大タイムアウトを設定します。このタイムアウトの目的は、トランザクションに対するインターセプト攻撃を防ぐことです。これは、ガレージ オープナーやドアロックなど、アセットへのアクセスを制限するデバイスに特に有効です。
時間指定トランザクションを理解するには、インターセプト攻撃がどのように発生するか、また、時間指定トランザクションが重要な理由を理解すると便利です。
インターセプト アタック
インターセプト攻撃には次のようなパターンがあります。
- Alice は Bob に、書き込みリクエスト アクションなどの最初のメッセージを送信します。
- 中間者である Eve がメッセージを傍受し、なんらかのラジオ受信制限などで Bob が受信できないようにします。
- ユーザー A から返信がないユーザーが、2 通目のメッセージを送信します。
- Eve は再びインターセプトし、Bob がそれを受け取れないようにします。
- Eve は、あたかも Alice から送信されたかのように、インターセプトされた最初のメッセージを Bob に送信します。
- Bob は Alice(と Eve)に回答を送信します。
- Eve は、後でリプレイするために、インターセプトされた 2 つ目のメッセージを保持します。Bob は、Alice から 2 番目にインターセプトされた元のメッセージを受信していないため、受信します。「オープンロック」などのコマンドがエンコードされている場合、このメッセージはセキュリティ侵害を表します。
このような攻撃を防ぐため、時間指定アクションでは、トランザクションの開始時にトランザクションの最大タイムアウトを設定します。Eve が攻撃ベクトルの最初の 6 つのステップを実行できたとしても、トランザクションでタイムアウトが期限切れになっているため、ステップ 7 でメッセージをリプレイできません。
Timed Transaction を使用すると、複雑さとアクション数が増加します。そのため、すべてのトランザクションでの使用は推奨されず、物理または仮想のセキュリティとプライバシー アセットを制御するデバイス上の重要なオペレーションのみに推奨されます。
SDK の抽象化
トランザクションの読み取り、トランザクションの書き込み、トランザクションの呼び出しの各セクションでは、SDK によって実行されるインタラクション モデル アクションの概要を説明します。
Matter SDK を使用するプロダクトを作成するデベロッパーは、通常は、アクションを直接実行する呼び出しを実行しません。アクションは、インタラクションにカプセル化する SDK 関数によって抽象化されます。ただし、エンジニアが Matter の機能に精通し、SDK 実装を細かく管理できるようにするには、IM Actions を理解することが重要です。