BLUEPRINT
第三章 協定架構
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(協商管理器)
管理約定的完整生命週期:
- 建立:發起協商請求
- 協商:處理請求和回應
- 啟用:雙方達成一致後產生 Agreement_ID
- 動態調整:傳輸過程中修改約定參數
- 終止:透過停止指令結束約定
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 |
| WaitingForCAP | CAP 驗證 + 金鑰交換完成 | SessionEstablished |
| WaitingForCAP | CAP 失敗 / 逾時 | Idle |
| SessionEstablished | 發起或收到 Request_Frame | Negotiating |
| SessionEstablished | 工作階段逾時關閉 | Idle |
| Negotiating | Agreement 達成 | Transmitting |
| Negotiating | 協商失敗 / 拒絕 | SessionEstablished |
| Transmitting | 持續傳輸 Fragment | Transmitting |
| Transmitting | 動態調整約定 | Negotiating |
| Transmitting | 連線斷開 | Suspended |
| Transmitting | Agreement 終止(無其他活躍約定) | 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 重新驗證)→ 報告已接收最高序列號 → 從斷點繼續傳輸
