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