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

