參考自 EFTP
1980 TFTP
1981 TFTP v2 (RFC 783)
1992 RFC 1350
Option Extension 1995 RFC 1782, 1998 RFC 2347
Blocksize Option
tftp 使用 UDP,預設傳送的資料大小是 512 octets。server listen UDP 69,client 首先發出讀或寫的請求 (WRQ 或 RRQ),server 自己選定一個 port 回覆資料或 ACK,接著 client 回覆 ACK 或資料,重複資料及 ACK 直到最後一筆資料大小小於選定的傳送資料大小。如有一端沒收到,則再重送。由於每送一筆資料後需要等候 ACK 後才能送下一筆資料,所以傳輸速度較慢。
沒有 list, delete, rename, directory, authentication 等進階功能
封包格式:
opcode + filename + mode
opcode + block # + data
opcode + block #
opcode + error code + error message
busybox tftp client
- create_pkt:建立 WRQ/RRQ/ACK/DATA 封包
- DATA 封包可能檔案讀取錯誤,送 error 後結束
- 可能是要送最後 DATA 封包
- send_pkt:初次送的 timeout 時間及嘗試次數初始化
- send_again:送封包
- 如果是送最後的 ACK,結束
- recv_again:poll with timeout
- ???,結束
- timeout,如已達嘗試次數,結束;否則調整 timeout 時間再次 send_again
- socket 讀取錯誤,送 error 後結束
- 收到封包太短,recv_again
- 收到 error,結束
- get 收到 DATA 序號正確,檔案寫入錯誤的話送 error 後結束。可能是最後 DATA 封包。create_pkt
- put 收到 ACK 序號正確,如果是收到最後的 ACK,結束;否則 create_pkt
- 其它 recv_again
參考來源
沒有留言:
張貼留言