當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > tftp文件傳輸協(xié)議詳解
tftp文件傳輸協(xié)議詳解
時間:2018-07-30 來源:未知
TFTP是一個傳輸文件的簡單協(xié)議,它基于UDP協(xié)議而實現(xiàn),但是我們也不能確定有些TFTP協(xié)議是基于其它傳輸協(xié)議完成的。
此協(xié)議設(shè)計的時候是進(jìn)行小文件傳輸?shù)摹R虼怂痪邆渫ǔ5腇TP的許多功能,它只能從文件服務(wù)器上獲得或?qū)懭胛募?/p>
不能列出目錄,不進(jìn)行認(rèn)證,它傳輸8位數(shù)據(jù)。傳輸中有三種模式:netascii,這是8位的ASCII碼形式,另一種是octet,
這是8位源數(shù)據(jù)類型;最后一種mail已經(jīng)不再支持,它將返回的數(shù)據(jù)直接返回給用戶而不是保存為文件。
任何傳輸起自一個讀取或?qū)懭胛募恼埱螅@個請求也是連接請求。如果服務(wù)器批準(zhǔn)此請求,則服務(wù)器打開連接,
數(shù)據(jù)以定長512字節(jié)傳輸。每個數(shù)據(jù)包包括一塊數(shù)據(jù),服務(wù)器發(fā)出下一個數(shù)據(jù)包以前必須得到客戶對上一個數(shù)據(jù)包的確認(rèn)。
如果一個數(shù)據(jù)包的大小小于512字節(jié),則表示傳輸結(jié)束。如果數(shù)據(jù)包在傳輸過程中丟失,
發(fā)出方會在超時后重新傳輸最后一個未被確認(rèn)的數(shù)據(jù)包。通信的雙方都是數(shù)據(jù)的發(fā)出者與接收者,一方傳輸數(shù)據(jù)接收應(yīng)答,
另一方發(fā)出應(yīng)答接收數(shù)據(jù)。大部分的錯誤會導(dǎo)致連接中斷,錯誤由一個錯誤的數(shù)據(jù)包引起。這個包不會被確認(rèn),
也不會被重新發(fā)送,因此另一方無法接收到。如果錯誤包丟失,則使用超時機制。錯誤主要是由下面三種情況引起的:
不能滿足請求,收到的數(shù)據(jù)包內(nèi)容錯誤,而這種錯誤不能由延時或重發(fā)解釋,對需要資源的訪問丟失(如硬盤滿)。
TFTP只在一種情況下不中斷連接,這種情況是源端口不正確,在這種情況下,指示錯誤的包會被發(fā)送到源機。
這個協(xié)議限制很多,這些都是為了實現(xiàn)起來比較方便而進(jìn)行的。
TFTP是一個簡單的協(xié)議,適合于只讀存儲器,僅用于無盤系統(tǒng)進(jìn)行系統(tǒng)引導(dǎo),它只使用幾種報文格式,是一種停止等待協(xié)議
特點:
1、簡單
2、占用資源小
3、適合傳遞小文件
4、適合在局域網(wǎng)進(jìn)行傳遞
5、端口號為69
6、基于UDP實現(xiàn)
缺陷:
TFTP分組中并不提供用戶名和口令。這是TFTP的一個特性(即"安全漏洞")。由于TFTP是設(shè)計用于系統(tǒng)引導(dǎo)進(jìn)程,它不可能提供用戶名和口令。
目前大多數(shù)TFTP服務(wù)器提供了一個選項來限制只能訪問特定目錄下的文件,這個目錄中只包含無盤系統(tǒng)進(jìn)行系統(tǒng)引導(dǎo)時所需的文件
當(dāng)服務(wù)器找到需要現(xiàn)在的文件后,會立刻打開文件,把文件中的數(shù)據(jù)通過TFTP協(xié)議發(fā)送給客戶端
如果文件的總大小較大(比如3M),那么服務(wù)器分多次發(fā)送,每次會從文件中讀取512個字節(jié)的數(shù)據(jù)發(fā)送過來
因為發(fā)送的次數(shù)有可能會很多,所以為了讓客戶端對接收到的數(shù)據(jù)進(jìn)行排序,所以在服務(wù)器發(fā)送那512個字節(jié)數(shù)據(jù)的時候,會多發(fā)2個字節(jié)的數(shù)據(jù),用來存放序號,并且放在512個字節(jié)數(shù)據(jù)的前面,序號是從1開始的
因為需要從服務(wù)器上下載文件時,文件可能不存在,那么此時服務(wù)器就會發(fā)送一個錯誤的信息過來,為了區(qū)分服務(wù)發(fā)送的是文件內(nèi)容還是錯誤的提示信息,所以又用了2個字節(jié) 來表示這個數(shù)據(jù)包的功能(稱為操作碼),并且在序號的前面。
為了允許多個客戶端同時進(jìn)行系統(tǒng)引導(dǎo),TFTP服務(wù)器必須提供一定形式的并發(fā)。因為UDP在一個客戶與一個服務(wù)器之間并不提供唯一連接,TFTP服務(wù)通過對每個客戶提供一個新的UDP端口來提供并發(fā)。這樣允許不同的客戶輸入數(shù)據(jù)報,然后由服務(wù)器中的UDP模塊根據(jù)目的端口號進(jìn)行區(qū)分,而不是由服務(wù)器本身來進(jìn)行區(qū)分。
因為udp的數(shù)據(jù)包不安全,即發(fā)送方發(fā)送是否成功不能確定,所以TFTP協(xié)議中規(guī)定,為了讓服務(wù)器知道客戶端已經(jīng)接收到了剛剛發(fā)送的那個數(shù)據(jù)包,所以當(dāng)客戶端接收到一個數(shù)據(jù)包的時候需要向服務(wù)器進(jìn)行發(fā)送確認(rèn)信息,即發(fā)送收到了,這樣的包成為ACK(應(yīng)答包)
為了標(biāo)記數(shù)據(jù)已經(jīng)發(fā)送完畢,所以規(guī)定,當(dāng)客戶端接收到的數(shù)據(jù)小于516(2字節(jié)操作碼+2個字節(jié)的序號+512字節(jié)數(shù)據(jù))時,就意味著服務(wù)器發(fā)送完畢了

