2014年11月2日 星期日

tftp

沿革
參考自 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

參考來源
  1. http://en.wikipedia.org/wiki/Trivial_File_Transfer_Protocol
  2. http://tools.ietf.org/html/rfc1350
  3. busybox tftp.c

沒有留言:

張貼留言

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...