前言
由於TFTP協議過於簡單,且沒有重傳機制;FTP協議很好,但是不能完美的嵌入到已有的代碼中,從零開發有一定難度,因此定義了一種基於UDP協議,簡單,有確認和重傳機制的文件傳輸協議。
該種協議只有一對Socket套接字,沒有控制命令,直接就是文件數據的傳輸,所以很容易以函數級別嵌入到已有代碼中,且對性能的影響非常小,由於協議是在UDP協議的基礎上定義的,因此需要有確認機制。通信的兩端沒有服務端和客戶端之分,兩端都可以發起。唯一的條件是:兩端的UDP通信的Socket已經建立成功,且通信正常。
協議格式
發起端:
總包數(4)、本包序號(4),本包長度(4),本包校驗碼(2)、本包數據(N)
說明:
文件總包數:文件包總數。
本包序號:包序號,從1開始計。
本包長度:后續“本包數據”字段的長度,如果通訊層包最大32K,該值建議不超過16K。
本包數據校驗碼:根據CRC計算校驗碼(只計算”本包數據”字段的內容)。
本包數據:具體需要傳輸的數據。
接收端:
本包序號(4)、當前狀態(2)、重傳包序號(4)、保留(2)
說明:
本包序號:當前包的報序號
當前狀態:不同的情況對應不同的狀態,且數據接收失敗,一律丟棄。
- 0x0000:本包數據接收成功,可以接收下一包數據;
- 0x0001:全部數據接收成功;
- 0x0002:本包數據接收失敗,長度不符或校驗碼錯,可以重新接收本包數據;
- 0x0003:本包數據接收失敗,序號錯,需要重新接收“重傳包序號(4)”的包;
- 0x0004:本包數據接收失敗,單板出現數據存儲出錯,無法繼續接收;
- 0x0005:內存申請失敗,無法繼續接受;
- 0xFFFF:未知錯誤,無法繼續接收;
- 其他錯誤碼保留,待以后擴展使用
重傳包序號:如果需要重傳,該字段填寫需要重傳的包序號
保留:擴展協議使用
擴展
該協議有確認和重傳機制,但是沒有超時機制,可以添加確認超時機制,保證數據的傳輸更加穩定!