第九章 錯誤處理

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