第三章 協定架構

3.1 協定分層

DTP 採用分層架構設計,從上到下依次為:

┌─────────────────────────────────────────────┐
│           應用層                              │
│   iFay / coFay / Personal Data Heap          │
│   終端應用程式(軟體 / 硬體)                  │
├─────────────────────────────────────────────┤
│           DTP 協定層                          │
│   DTP_Master Engine / DTP_Slave Engine       │
│   ┌───────────────────────────────────────┐ │
│   │ 協商管理器 (Agreement Manager)         │ │
│   │ 幀編解碼器 (Frame Codec)              │ │
│   │ DAG 管理器 (DAG Manager)              │ │
│   │ 加密模組 (Encryption Module)          │ │
│   │ 工作階段管理器 (Session Manager)       │ │
│   │ 續傳管理器 (Resume Manager)           │ │
│   └───────────────────────────────────────┘ │
├─────────────────────────────────────────────┤
│           適配層                              │
│   Transport_Adapter                          │
├─────────────────────────────────────────────┤
│           傳輸層                              │
│   BLE / WebSocket / TCP / RTSP / ...         │
└─────────────────────────────────────────────┘

設計原則

  • 傳輸無關性:透過 Transport_Adapter 抽象底層傳輸,DTP 核心邏輯與具體傳輸協定解耦
  • 協商優先:所有資料傳輸必須基於雙方協商達成的約定,無「裸傳輸」
  • 資料主權:主端對資料流擁有最終決策權,從端是資料生產方或消費方
  • 端到端加密:Payload 加密傳輸,FayGer 執行環境無法存取明文
  • 語境保全:每個 Fragment 攜帶結構化上下文中繼資料,確保資料歸集時語境不遺失
  • 可恢復性:基於序列號的續傳機制,支援連線中斷後無縫恢復

3.2 核心元件

DTP_Engine

DTP 協定的核心處理引擎,分為兩個變體:

  • DTP_Master:執行在 Fay 側,擁有資料歸集發起權和資料注入決策權
  • DTP_Slave:執行在終端側,負責資料生產和注入申請

兩者共享幀編解碼、加密、DAG 管理等基礎能力,但在協商權限和資料流方向上有所區別。

Transport_Adapter

底層傳輸協定的抽象介面。DTP_Engine 透過此介面與具體傳輸協定通訊,實現傳輸無關性。支援的傳輸協定包括 BLE、WebSocket、TCP、RTSP 等。

當底層傳輸連線斷開時,Transport_Adapter 向 DTP_Engine 報告連線狀態變更事件,觸發工作階段掛起和續傳流程。

Agreement Manager(協商管理器)

管理約定的完整生命週期:

  1. 建立:發起協商請求
  2. 協商:處理請求和回應
  3. 啟用:雙方達成一致後產生 Agreement_ID
  4. 動態調整:傳輸過程中修改約定參數
  5. 終止:透過停止指令結束約定

Frame Codec(幀編解碼器)

負責 Logical_Frame 的序列化(編碼為二進位)和反序列化(從二進位解碼),以及格式化輸出(Pretty Print)。確保幀在不同平台間正確傳輸。

DAG Manager(DAG 管理器)

管理 Fragment 之間的有向無環圖依賴關係:

  • 環路偵測:防止形成循環依賴
  • 依賴解析:處理依賴目標尚未到達的情況
  • 關係查詢:查詢 Fragment 的依賴和被依賴關係

Encryption Module(加密模組)

負責 Payload 的端到端加密和解密,使用 CAP 預協商的金鑰。確保 FayGer 執行環境無法存取明文資料。

Session Manager(工作階段管理器)

管理 DTP 工作階段的生命週期:

  • 工作階段建立與關閉
  • 狀態持久化與恢復
  • 逾時偵測與資源釋放

Resume Manager(續傳管理器)

管理基於序列號的續傳機制:

  • Fragment 快取管理
  • 序列號追蹤
  • 斷點恢復協調

3.3 DTP_Engine 狀態機

DTP_Engine 的執行狀態遵循以下狀態機:

                    ┌──────────────────────────────────────────┐
                    │                                          │
    ┌───────┐      │  ┌──────────────┐    ┌────────────────┐  │
    │ Idle  │──────┼─▶│WaitingForCAP │───▶│SessionEstablished│ │
    │       │◀─────┼──│              │◀───│                │  │
    └───────┘      │  └──────────────┘    └───────┬────────┘  │
        ▲          │                              │            │
        │          │                              ▼            │
        │          │                     ┌─────────────┐       │
        │          │                     │ Negotiating │       │
        │          │                     └──────┬──────┘       │
        │          │                            │              │
        │          │                            ▼              │
        │          │                    ┌──────────────┐       │
        │          │                    │ Transmitting │       │
        │          │                    └───────┬──────┘       │
        │          │                            │              │
        │          │                            ▼              │
        │          │  ┌──────────┐      ┌─────────────┐       │
        └──────────┼──│ Resuming │◀─────│  Suspended  │       │
                   │  └──────────┘      └─────────────┘       │
                   └──────────────────────────────────────────┘

狀態轉換說明:

當前狀態觸發事件目標狀態
Idle收到連線請求WaitingForCAP
WaitingForCAPCAP 驗證 + 金鑰交換完成SessionEstablished
WaitingForCAPCAP 失敗 / 逾時Idle
SessionEstablished發起或收到 Request_FrameNegotiating
SessionEstablished工作階段逾時關閉Idle
NegotiatingAgreement 達成Transmitting
Negotiating協商失敗 / 拒絕SessionEstablished
Transmitting持續傳輸 FragmentTransmitting
Transmitting動態調整約定Negotiating
Transmitting連線斷開Suspended
TransmittingAgreement 終止(無其他活躍約定)SessionEstablished
Suspended連線恢復 + CAP 重新驗證Resuming
Suspended工作階段逾時Idle
Resuming續傳交握完成Transmitting
Resuming恢復失敗Idle

3.4 主從互動時序

完整的 DTP 互動分為五個階段:

階段 1:CAP 預處理

  • CAP 完成身分驗證和金鑰交換

階段 2:DTP 工作階段建立

  • 主端向從端發起工作階段建立,產生 Session_ID

階段 3a:資料歸集協商(Master 發起)

  • Master 傳送 Request_Frame(資料歸集請求)
  • Slave 回覆 Response_Frame(接受/拒絕/替代方案)
  • 達成 Agreement,產生 Agreement_ID

階段 3b:資料注入協商(Slave 申請)

  • Slave 傳送 Request_Frame(資料注入申請)
  • Master 回覆 Response_Frame(接受/拒絕/替代方案)
  • 達成 Agreement,產生 Agreement_ID

階段 4:資料傳輸

  • Slave → Master:Fragment(資料歸集,攜帶 Agreement_ID)
  • Master → Slave:Fragment(資料注入,攜帶 Agreement_ID)

階段 5:連線中斷與恢復

  • 連線斷開 → 重新建立連線(CAP 重新驗證)→ 報告已接收最高序列號 → 從斷點繼續傳輸