第5章 ネゴシエーション機構

5.1 ネゴシエーション原則

DTP のコア設計原則の1つは「ネゴシエーション優先」です:すべてのデータ伝送は双方のネゴシエーションで合意されたアグリーメント(Agreement)に基づく必要があり、「裸の伝送」は存在しません。ネゴシエーション機構は以下を保証します:

  • マスター端とスレーブ端がデータ伝送前に伝送パラメータについて明確な合意に達する
  • 伝送中にアグリーメントパラメータを動的に調整可能
  • いずれの側もアグリーメントを主動的に終了可能

5.2 ネゴシエーションフレームタイプ

DTP は2種類のフレームタイプでネゴシエーションを完了します:

リクエストフレーム(Request_Frame)

データリクエストの発行またはアグリーメントの調整に使用され、以下の要素を含みます:

フィールド説明
requestIdリクエスト一意識別子
requestorRoleリクエスト側のロール(master / slave)
requestTypeリクエストタイプ:collection(収集)/ injection(注入)/ adjustment(調整)/ termination(終了)
targetAgreementId調整/終了時に参照するアグリーメント ID
proposedParams提案するアグリーメントパラメータ

レスポンスフレーム(Response_Frame)

データリクエストへの応答に使用され、以下の要素を含みます:

フィールド説明
requestId対応するリクエスト ID
resultネゴシエーション結果:accepted / rejected / counter_proposal
agreedParams承認または代替案時の最終パラメータ
agreementId承認時に生成されるアグリーメント ID
rejectionReason拒否理由

5.3 ネゴシエーションフロー

データ収集ネゴシエーション(Master 発行)

Master                              Slave
  │                                   │
  │── Request_Frame (collection) ────▶│
  │                                   │
  │◀── Response_Frame ────────────────│
  │    (accepted / rejected /         │
  │     counter_proposal)             │
  │                                   │
  1. Master が Slave にデータ収集リクエストを送信し、データタイプ、伝送モード、頻度などのパラメータを指定
  2. Slave が Response_Frame で応答:
    • 承認:リクエストパラメータに従ってデータを伝送することに同意
    • 拒否:コンプライアンス制約(DLP データ漏洩防止ポリシーなど)に限定され、コンプライアンス上の理由を必ず添付
    • 代替案:修正後のパラメータを提案

データ注入ネゴシエーション(Slave 申請)

Slave                               Master
  │                                   │
  │── Request_Frame (injection) ─────▶│
  │                                   │
  │◀── Response_Frame ────────────────│
  │    (accepted + フィルタ後データ範囲 / │
  │     rejected /                    │
  │     counter_proposal)             │
  │                                   │
  1. Slave が Master にデータ注入申請を送信し、必要なデータを説明
  2. Master が Response_Frame で応答:
    • 承認:フィルタ後のデータ範囲(最小化データセット)を添付
    • 拒否:データを提供しない
    • 代替案:異なる範囲またはフォーマットのデータを提供

5.4 アグリーメントパラメータ

双方が合意に達した後、一意の Agreement_ID が生成され、アグリーメント内容には以下が含まれます:

パラメータタイプ説明
dataTypestringデータタイプ識別子
dataRangestringデータ範囲の記述
transferModeenum伝送モード:one_time / periodic / streaming
frequencynumber | null伝送頻度(Hz)、ワンタイムモードでは null
validityPeriodnumber有効期間(ミリ秒)
priorityenum優先度:low / normal / high / critical

5.5 アグリーメントライフサイクル

アグリーメントは以下の状態を経ます:

negotiating ──▶ active ──▶ terminated
                  │
                  ▼
              suspended
  • negotiating:ネゴシエーション進行中
  • active:アグリーメント有効、データ伝送中
  • suspended:接続中断、アグリーメント一時停止
  • terminated:アグリーメント終了

5.6 動的調整

DTP は伝送中に新しい Request_Frame(requestType が adjustment)を送信することで、既存アグリーメントのパラメータを動的に調整することをサポートします。

典型的なシナリオ:iFay が最初にスマートウォッチに毎分1回の心拍報告を要求していたが、ユーザーがランニングを開始したことを検知した後、アグリーメントを毎秒1回の報告に動的調整する。

5.7 アグリーメント終了

Request_Frame(requestType が termination)を送信することで、アグリーメントを明示的に終了します。終了後、そのアグリーメント下のデータ伝送は即座に停止します。

5.8 マルチアグリーメント並行

DTP は単一セッション内で複数のアクティブなアグリーメントを同時に維持することをサポートします。マルチアグリーメントの直列または並列伝送は、下位トランスポートプロトコルの能力に依存します。

例:iFay がスマートウォッチと心拍データ収集アグリーメント(毎秒1回)と歩数データ収集アグリーメント(毎分1回)を同時に維持し、2つのアグリーメントは独立して動作する。