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) 錯誤
