簡介
TFTP協議全稱為簡單文件傳輸協議,是以UDP為基礎的應用層協議,主要用於不同設備之間的文件傳輸。具有協議簡單,易於實現的特點,常用於嵌入式設備開發中。
傳輸模式
數據的存儲有不同的格式,磁盤中相同的一塊數據,通過不同的存儲協議解析,得到的內容是完全不同的,如:磁盤中的一個字節0x65,按照ASCII解析就是字母A,按照數據本身解析就是0x65這個數,兩種解析的方式顯示的內容完全不同。因此文件在傳輸的過程中也需要指明數據的表示方式,即傳輸模式。TFTP協議的傳輸模式如下所示:
模式名稱 | 模式含義 | 說明 |
netascii | 文本傳輸模式,按照一個字節8位解析 | 文本模式 |
octet | 二進制模式,數據無需解析 | 二進制模式 |
已過時,不使用 | 已過時 |
協議格式
TFTP共定義了五種類型的包格式,格式的區分由包數據前兩個字節的Opcode字段區分,分別是:
- 讀文件請求包:Read request,簡寫為RRQ,對應Opcode字段值為1
- 寫文件請求包:Write requst,簡寫為WRQ,對應Opcode字段值為2
- 文件數據包:Data,簡寫為DATA,對應Opcode字段值為3
- 回應包:Acknowledgement,簡寫為ACK,對應Opcode字段值為4
- 錯誤信息包:Error,簡寫為ERROR,對應Opcode字段值為5
讀寫文件請求包格式
2字節 | 字符串 | 1字節 | 字符串 | 1字節 |
Opcode | Filename | 0 | Mode | 0 |
Opcode 操作碼 1 / 2
Filename 文件名
Mode 傳輸模式
數據包格式
2字節 | 2字節 | n字節 |
Opcode | Block | data |
Opcode 操作碼 3
Block 包序號,從1開始,除了最后一包,每一包的長度都是512字節,最后一包的長度小於512字節
data 具體急需要傳輸的數據
ACK包格式
用於回復對端,確認數據的處理情況
2字節 | 2字節 |
Opcode | Block |
Opcode 操作碼 4
Block 收到的包序號
錯誤包格式
2字節 | 2字節 | 字符串 | 1字節 |
Opcode | ErrorCode | ErrMsg | 0 |
用於在失敗的情況下回復對端
Opcode 操作碼 5
ErrorCode 錯誤碼,每一種錯誤碼對應一種錯誤場景
ErrMsg 錯誤的描述信息
錯誤碼
錯誤碼 表示意思
0 未定義Not defined, see error message (if any).
1 文件找不到File not found.
2 拒絕訪問Access violation.
3 磁盤滿了或者超出了可分配空間Disk full or allocation exceeded.
4 非法TFTP操作Illegal TFTP operation.
5 傳輸ID未知Unknown transfer ID.
6 文件不存在File already exists.
7 沒有該用戶No such user.
TFTP協議的缺陷
- 傳輸效率低
- 對於超時機制沒有明確說明
- 每包長度固定為512字節,不靈活