BLUEPRINT
第九章 错误处理
9.1 错误处理模型
DTP 的错误处理遵循"检测-通知-恢复"三阶段模型:
- 检测:识别异常情况
- 通知:向对端或上层发送错误信息
- 恢复:根据错误类型采取恢复措施
9.2 错误码体系
DTP 为每种错误类型定义唯一的错误码,按功能模块划分为八个范围:
| 错误类别 | 错误码范围 | 处理策略 |
|---|---|---|
| 帧处理错误 | 1xxx | 丢弃帧 + 通知发送方 + 记录日志 |
| 加密错误 | 2xxx | 丢弃帧 + 通知发送方 + 可能触发密钥重协商 |
| 约定错误 | 3xxx | 丢弃 Fragment + 通知发送方 + 可能触发重新协商 |
| DAG 错误 | 4xxx | 拒绝 Fragment + 通知发送方 或 缓存等待 |
| 会话错误 | 5xxx | 尝试恢复会话 + 若失败则关闭并通知上层 |
| 续传错误 | 6xxx | 暂停发送 + 通知上层应用 |
| 版本错误 | 7xxx | 发送版本不兼容通知 + 尝试降级处理 |
| 权限错误 | 8xxx | 拒绝操作 + 通知请求方 |
9.3 错误码详表
帧处理错误 (1xxx)
| 错误码 | 名称 | 说明 |
|---|---|---|
| 1001 | FRAME_DESERIALIZATION_FAILED | 帧反序列化失败 |
| 1002 | FRAME_INVALID_FORMAT | 帧格式无效 |
加密错误 (2xxx)
| 错误码 | 名称 | 说明 |
|---|---|---|
| 2001 | DECRYPTION_FAILED | 载荷解密失败 |
| 2002 | KEY_NOT_READY | 密钥未就绪(CAP 未完成) |
约定错误 (3xxx)
| 错误码 | 名称 | 说明 |
|---|---|---|
| 3001 | AGREEMENT_NOT_FOUND | 约定不存在 |
| 3002 | AGREEMENT_EXPIRED | 约定已过期 |
| 3003 | AGREEMENT_NEGOTIATION_FAILED | 约定协商失败 |
DAG 错误 (4xxx)
| 错误码 | 名称 | 说明 |
|---|---|---|
| 4001 | DAG_CYCLE_DETECTED | DAG 环路检测 |
| 4002 | DAG_DEPENDENCY_UNRESOLVED | DAG 依赖未解析 |
会话错误 (5xxx)
| 错误码 | 名称 | 说明 |
|---|---|---|
| 5001 | SESSION_NOT_FOUND | 会话不存在 |
| 5002 | SESSION_TIMEOUT | 会话超时 |
| 5003 | SESSION_RESTORE_FAILED | 会话恢复失败 |
续传错误 (6xxx)
| 错误码 | 名称 | 说明 |
|---|---|---|
| 6001 | BUFFER_FULL | 缓存已满 |
| 6002 | RETRANSMISSION_TIMEOUT | 重传超时 |
版本错误 (7xxx)
| 错误码 | 名称 | 说明 |
|---|---|---|
| 7001 | VERSION_INCOMPATIBLE | 版本不兼容 |
权限错误 (8xxx)
| 错误码 | 名称 | 说明 |
|---|---|---|
| 8001 | PERMISSION_DENIED | 权限拒绝 |
| 8002 | OBSERVER_WRITE_DENIED | 旁观者写操作拒绝 |
9.4 错误通知机制
错误通知通过控制帧(Control Frame)传递,包含以下信息:
| 字段 | 说明 |
|---|---|
| errorCode | 错误码 |
| errorMessage | 错误描述信息 |
| relatedFrameId | 触发错误的帧 ID(可选) |
| relatedAgreementId | 相关约定 ID(可选) |
| details | 附加详情(可选) |
9.5 关键错误场景
反序列化失败
接收到的 Logical_Frame 无法正确反序列化时:
- 丢弃该帧
- 向发送方发送 FRAME_DESERIALIZATION_FAILED (1001) 错误通知
解密失败
接收到的 Logical_Frame 载荷无法正确解密时:
- 丢弃该帧
- 向发送方发送 DECRYPTION_FAILED (2001) 错误通知
- 若连续失败超过阈值,触发 CAP 重新密钥交换
DAG 环路检测
Fragment 声明的依赖关系会导致 DAG 形成环路时:
- 拒绝该 Fragment
- 返回 DAG_CYCLE_DETECTED (4001) 错误
未知约定
Fragment 引用了接收方不存在的 Agreement_ID 时:
- 丢弃该 Fragment
- 返回 AGREEMENT_NOT_FOUND (3001) 错误
密钥未就绪
尝试发送数据但 CAP 密钥交换尚未完成时:
- 拒绝发送
- 返回 KEY_NOT_READY (2002) 错误给上层调用方
缓存已满
发送方的未确认 Fragment 缓存达到容量上限时:
- 暂停发送新 Fragment
- 发送 BUFFER_FULL (6001) 通知给上层应用
旁观者越权
Observer 尝试发起请求或修改约定时:
- 拒绝操作
- 返回 OBSERVER_WRITE_DENIED (8002) 错误
