TFTP(Trivial File Transfer Protocol,簡單文件傳輸協議)是TCP/IP協議族中的一個用來在客戶機與服務器之間進行簡單文件傳輸的協議,端口號為69,是一種高效的文件傳輸方式。
其目標是在UDP之上建立一個類似于FTP的但僅支持文件上傳和下載功能的傳輸協議,所以它是基于FTP協議或其它協議而實現,使用UDP數據包,但是需要自己的差錯改正措施。TFTP只支持文件傳輸而不支持交互,只能簡單的進行小型文件的傳輸,從服務器上獲得或者說是下載文件,但它不包含FTP協議中的目錄操作和用戶權限等內容。
因為TFTP是設計在UDP上層的協議,并且報文是基于網絡協議,屬于數據包將擁有一個網絡包頭,報文頭,和TFTP頭,另外數據包有可能還有其他的頭(例如LNI,ARPA頭等等)來允許他們通過本地的傳輸媒體。TFTP不需要制定任何的網絡頭的值。另外報文頭數據源和目標端口字段用于TFTP,長度字段但應tftp包的大小。用于TFTP的傳輸id(tid)會傳到報文層當作端口使用,因此必須是0~65535(16位,2個字節)
TFTP沒有龐大的指令集,無法列目錄和獲得用戶身份鑒別,與FTP相似,TFTP傳輸過程中也有傳輸模式之分,模式的意思是如何解釋數據包里的內容,比如是字符串還是二進制等。目前有三種模式:
(1) netascii型:一種修改的8bit ascii碼
(2) octet型:即binary普通的二進制型
(3) mail型:過時,不再使用
另外,通訊雙方也可以自定義所需的傳輸模式。
通信流程為:
1、由客戶端發起讀文件/寫文件的請求,同時可以進行請求連接
2、服務器監聽到請求,打開連接,并向客戶端發送文件,以每個定長為512字節的塊進行發送。每個數據包包含一個數據塊,在發送下一個包的時候必須被客戶端確認回應一個回應包。
3、當發現某個數據包小于512個字節,說明傳輸終止。
4、如果出現網絡丟包,收件方(客戶端)會超時,并且重傳最后的接收包(可以是數據包或者回應包),因此這將可以讓發送者重新發送丟失包。當之前的包已經接受成功之后,發送者只需要保持一個重傳包。
注意:
發送者要做的:發送數據->接受->回應包;
接受者要做的:發送回應包->接受數據。
一旦發送請求(寫文件請求或者讀文件請求),傳輸就已經建立,并且收到寫的回應包,或讀取第一個數據的肯定答復;為了建立連接,連接的每一段都會為自己在傳輸期間選則傳輸id(tid)。
TFTP總結:
整體上來說,TFTP的一個重要特點就是簡單及易于實現,這也是設計TFTP協議的一個初衷。
優點是:
(1)每個數據包大小固定,這樣在內存分配處理的時候比較直接
(2)實現簡單
(3)每個數據包都有確認機制,可以實現一定程度的可靠性
缺點:
(1)傳輸效率不高
(2)滑動窗口機制太簡單,并且該窗口僅有一個包的大小
(3)超時處理機制并不完善