java網路程式設計之TFTP(一)
**
TFTP簡單檔案傳輸協議
**
TFTP使用了UDP套接字,效率比較高,但是也要求TFTP為資料傳輸的不可靠負責。
TFTP伺服器在69埠上監聽到來的資料包,客戶端使用一個隨機的埠號
TFTP作用:許多無盤工作站使用TFTP來載入它們需要的來自伺服器的檔案。
每個資料報有一個操作碼opcode(16 bits),表示包的型別,有五種:
1——RRQ——-請求讀
2——WRQ——-請求寫
3——DAT——-檔案資料
4——ACK——-確認,繼續進行傳輸
5——ERR——–發生錯誤
請求讀或寫資料報包包括操作碼(opcode)、檔名(由0位元組終止)和模式串(由0位元組終止)
文字檔案的模式是netascii ,二進位制檔案的模式是8位的二進位制組(octet)
檔案資料報文包括操作碼、塊編號、資料(0–512位元組)
ACK資料報包括操作碼、塊編號
ERR資料報包括操作碼、差錯碼、差錯資訊(由0位元組終止),用於伺服器不能處理讀請求或寫請求
的情況。在檔案傳輸的過程中的讀和寫也會導致傳送這種報文,接著停止傳輸。
TFTP的工作過程
TFTP的工作過程很像停止等待協議,傳送完一個檔案塊後就等待對方的確認,確認時應指明所確認的塊號。傳送完資料後在規定時間內收不到確認,就要重發資料PDU,傳送確認PDU的一方若在規定時間內收不到下一個檔案塊,也要重發確認PDU。這樣保證檔案的傳送不致因某一個數據報的丟失而告失敗。
客戶端需要執行的任務步驟:
1、傳送RRQ或WRQ請求到伺服器的69埠
2、等待一個數據包或者是ACK包。這個包將包含一個69以外的新埠號。
3、接收到資料包,就以ACK包響應,接收到ACK包,就傳送下一個資料包。
4、準備處理超時錯誤或者是ERR包
伺服器端需要執行的任務步驟:
1、監聽69埠上的RRQ或者WRQ請求。
2、對每一個合法請求,建立一個套接字(也可能是一個新執行緒)。對RRQ請求,以初始的資料包響應,對WRQ請求,發出對第0塊的確認。
3、接收到ACK包,以下一個資料包來響應,接收到資料包,以ACK包來響應。
4、準備處理超時錯誤或者ERR包。