第三章 协议架构

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 重新验证)→ 报告已接收最高序列号 → 从断点继续传输