第九章 错误处理

9.1 错误处理模型

DTP 的错误处理遵循"检测-通知-恢复"三阶段模型:

  1. 检测:识别异常情况
  2. 通知:向对端或上层发送错误信息
  3. 恢复:根据错误类型采取恢复措施

9.2 错误码体系

DTP 为每种错误类型定义唯一的错误码,按功能模块划分为八个范围:

错误类别错误码范围处理策略
帧处理错误1xxx丢弃帧 + 通知发送方 + 记录日志
加密错误2xxx丢弃帧 + 通知发送方 + 可能触发密钥重协商
约定错误3xxx丢弃 Fragment + 通知发送方 + 可能触发重新协商
DAG 错误4xxx拒绝 Fragment + 通知发送方 或 缓存等待
会话错误5xxx尝试恢复会话 + 若失败则关闭并通知上层
续传错误6xxx暂停发送 + 通知上层应用
版本错误7xxx发送版本不兼容通知 + 尝试降级处理
权限错误8xxx拒绝操作 + 通知请求方

9.3 错误码详表

帧处理错误 (1xxx)

错误码名称说明
1001FRAME_DESERIALIZATION_FAILED帧反序列化失败
1002FRAME_INVALID_FORMAT帧格式无效

加密错误 (2xxx)

错误码名称说明
2001DECRYPTION_FAILED载荷解密失败
2002KEY_NOT_READY密钥未就绪(CAP 未完成)

约定错误 (3xxx)

错误码名称说明
3001AGREEMENT_NOT_FOUND约定不存在
3002AGREEMENT_EXPIRED约定已过期
3003AGREEMENT_NEGOTIATION_FAILED约定协商失败

DAG 错误 (4xxx)

错误码名称说明
4001DAG_CYCLE_DETECTEDDAG 环路检测
4002DAG_DEPENDENCY_UNRESOLVEDDAG 依赖未解析

会话错误 (5xxx)

错误码名称说明
5001SESSION_NOT_FOUND会话不存在
5002SESSION_TIMEOUT会话超时
5003SESSION_RESTORE_FAILED会话恢复失败

续传错误 (6xxx)

错误码名称说明
6001BUFFER_FULL缓存已满
6002RETRANSMISSION_TIMEOUT重传超时

版本错误 (7xxx)

错误码名称说明
7001VERSION_INCOMPATIBLE版本不兼容

权限错误 (8xxx)

错误码名称说明
8001PERMISSION_DENIED权限拒绝
8002OBSERVER_WRITE_DENIED旁观者写操作拒绝

9.4 错误通知机制

错误通知通过控制帧(Control Frame)传递,包含以下信息:

字段说明
errorCode错误码
errorMessage错误描述信息
relatedFrameId触发错误的帧 ID(可选)
relatedAgreementId相关约定 ID(可选)
details附加详情(可选)

9.5 关键错误场景

反序列化失败

接收到的 Logical_Frame 无法正确反序列化时:

  1. 丢弃该帧
  2. 向发送方发送 FRAME_DESERIALIZATION_FAILED (1001) 错误通知

解密失败

接收到的 Logical_Frame 载荷无法正确解密时:

  1. 丢弃该帧
  2. 向发送方发送 DECRYPTION_FAILED (2001) 错误通知
  3. 若连续失败超过阈值,触发 CAP 重新密钥交换

DAG 环路检测

Fragment 声明的依赖关系会导致 DAG 形成环路时:

  1. 拒绝该 Fragment
  2. 返回 DAG_CYCLE_DETECTED (4001) 错误

未知约定

Fragment 引用了接收方不存在的 Agreement_ID 时:

  1. 丢弃该 Fragment
  2. 返回 AGREEMENT_NOT_FOUND (3001) 错误

密钥未就绪

尝试发送数据但 CAP 密钥交换尚未完成时:

  1. 拒绝发送
  2. 返回 KEY_NOT_READY (2002) 错误给上层调用方

缓存已满

发送方的未确认 Fragment 缓存达到容量上限时:

  1. 暂停发送新 Fragment
  2. 发送 BUFFER_FULL (6001) 通知给上层应用

旁观者越权

Observer 尝试发起请求或修改约定时:

  1. 拒绝操作
  2. 返回 OBSERVER_WRITE_DENIED (8002) 错误