ノードに対してオペレーションを実行できない場合、ノードのデータモデル(DM)は関連しません。インタラクション モデル(IM)は、ノードの DM と他のノードの DM の関係を定義します。これは、DM 間の通信のための共通言語です。
ノードは次のように相互に通信します。
- 属性とイベントの読み取りとサブスクライブ
- 属性への書き込み
- コマンドの呼び出し
ノードが別のノードと暗号化された通信シーケンスを確立するたびに、インタラクション関係が構成されます。インタラクションは 1 つ以上のトランザクションで構成され、トランザクションは 1 つ以上のアクションで構成されます。アクションは、ノード間の IM レベルのメッセージと見なすことができます。
トランザクションでは、別のノードから属性またはイベントをリクエストする読み取りリクエスト アクション、そのレスポンスであるレポートデータ アクションなど、いくつかのアクションがサポートされています。レポートデータ アクションは、情報をサーバーからクライアントに転送します。
開始元とターゲット
トランザクションを開始するノードはイニシエーター、応答するノードはターゲットです。通常、イニシエーターはクライアント クラスタで、ターゲットはサーバー クラスタです。ただし、このパターンには例外があります。このセクションで後述する定期購入のインタラクションなどがこれに該当します。
グループ
Matter 内のノードはグループに属している場合があります。デバイスのグループは、同じアクション内の複数のデバイスに同時にアドレス指定してメッセージを送信するためのメカニズムです。グループ内のすべてのノードは、同じ グループ ID(16 ビット整数)を共有します。
グループレベルの通信(Groupcast)を実現するために、Matter は IPv6 Multicast メッセージを利用します。すべてのグループ メンバーは同じ Multicast アドレスを持ちます。
パス
属性、イベント、コマンドとやり取りするときは、このやり取りのパス(ノードのデータモデル階層における属性、イベント、コマンドの位置)を指定する必要があります。ただし、パスでグループまたはワイルドカード演算子を使用して複数のノードまたはクラスタに同時にアドレス指定し、これらのインタラクションを集約してアクション数を減らすこともできます。
このメカニズムは、通信の応答性を高めるために重要です。たとえば、ユーザーがすべての照明をオフにしたい場合、音声アシスタントは、個々のインタラクションのシーケンスではなく、グループ内の複数の照明に対して 1 つのインタラクションを設定できます。イニシエータがライトごとに個別のインタラクションを作成すると、デバイスの応答性に人間が認識できる遅延が生じる可能性があります。この効果により、複数のデバイスがコマンドに反応する際に、デバイス間で目に見える遅延が発生します。これは「ポップコーン効果」とも呼ばれます。
Matter の Path は、次のいずれかのオプションを使用してアセンブルできます。
<path> = <node> <endpoint> <cluster> <attribute | event | command>
<path> = <group ID> <cluster> <attribute | event | command>
また、これらのパス ビルディング ブロックの endpoint
と cluster
には、複数のノード インスタンスを選択するためのワイルドカード演算子を含めることもできます。
時間制限ありと時間制限なし
書き込みトランザクションまたは呼び出しトランザクションを実行する方法は、時間指定ありと時間指定なしの 2 つあります。時間指定トランザクションでは、Write/Invoke アクションが送信されるまでの最大タイムアウトが設定されます。このタイムアウトの目的は、トランザクションに対するインターセプト攻撃を防ぐことです。これは、ガレージ オープナーやロックなど、アセットへのアクセスを制御するデバイスに特に有効です。
時間指定トランザクションを理解するには、インターセプト攻撃が発生する仕組みと、時間指定トランザクションが重要な理由を理解することが役立ちます。
インターセプト攻撃
インターセプト攻撃のパターンは次のとおりです。
- Alice は Bob に最初のメッセージ(書き込みリクエスト アクションなど)を送信します。
- 中間者であるイブがメッセージを傍受し、なんらかの電波妨害によってボブがメッセージを受信できないようにします。
- アリスはボブからの返信がないため、2 つ目のメッセージを送信します。
- イブは再び傍受し、ボブが受信できないようにします。
- イブは、アリスから送信されたかのように、最初の傍受メッセージをボブに送信します。
- ボブはアリス(とイブ)にレスポンスを送信します。
- Eve は、後で再生するために 2 つ目の傍受メッセージを保持します。ボブはアリスから元の 2 番目の傍受されたメッセージを受け取っていないため、そのメッセージを受け入れます。このメッセージは、メッセージが「ロックを開く」などのコマンドをエンコードしている場合に、セキュリティ侵害を表します。
このような攻撃を防ぐため、タイムド アクションでは、トランザクションの開始時に最大トランザクション タイムアウトが設定されます。Eve が攻撃ベクトルの最初の 6 つのステップを実行できたとしても、トランザクションのタイムアウトが切れているため、ステップ 7 でメッセージをリプレイすることはできません。
時間指定のトランザクションでは、アクションの複雑さと数が増加します。したがって、すべてのトランザクションに使用することはおすすめしません。物理または仮想のセキュリティとプライバシーのアセットを制御するデバイスの重要なオペレーションにのみ使用してください。
SDK 抽象化
「トランザクションの読み取り」、「トランザクションの書き込み」、「トランザクションの呼び出し」のセクションでは、SDK によって実行されるインタラクション モデル アクションの概要について説明します。
通常、Matter SDK を使用するプロダクトを作成しているデベロッパーは、アクションを直接実行する呼び出しを行いません。アクションは SDK 関数によって抽象化され、Interaction にカプセル化されます。ただし、IM アクションを理解することは、エンジニアが Matter の機能に精通し、SDK 実装をきめ細かく制御するために重要です。