簡介
連線埠號為69。
簡單檔案傳輸協定,它基於UDP協定而實現。它不具備通常的FTP的許多功能,它只能從檔案伺服器上獲得或寫入檔案,不能列出目錄,不進行認證,它傳輸8位數據。傳輸中有三種模式:netascii,這是8位的ASCII碼形式,另一種是octet,這是8位源數據類型;最後一種mail已經不再支持,它將返回的數據直接返回給用戶而不是保存為檔案。
概況
任何傳輸起自一個讀取或寫入檔案的請求,這個請求也是連線請求。如果伺服器批准此請求,則伺服器打開連線,數據以定長512位元組傳輸。每個數據包包括一塊數據,伺服器發出下一個數據包以前必須得到客戶對上一個數據包的確認。如果一個數據包的大小小於512位元組,則表示傳輸結束。如果數據包在傳輸過程中丟失,發出方會在逾時後重新傳輸最後一個未被確認的數據包。通信的雙方都是數據的發出者與接收者,一方傳輸數據接收應答,另一方發出應答接收數據。大部分的錯誤會導致連線中斷,錯誤由一個錯誤的數據包引起。這個包不會被確認,也不會被重新傳送,因此另一方無法接收到。如果錯誤包丟失,則使用逾時機制。錯誤主要是由下面三種情況引起的:不能滿足請求,收到的數據包內容錯誤,而這種錯誤不能由延時或重發解釋,對需要資源的訪問丟失(如硬碟滿)。TFTP只在一種情況下不中斷連線,這種情況是源連線埠不正確,在這種情況下,指示錯誤的包會被傳送到源機。這個協定限制很多,這些都是為了實現起來比較方便而進行的。
特點
因為TFTP使用UDP,而UDP使用IP,IP可以還使用其它本地通信方法。因此一個TFTP包中會有以下幾段:本地媒介頭,IP頭,數據報頭,TFTP頭,剩下的就是TFTP數據了。TFTP在IP頭中不指定任何數據,但是它使用UDP中的源和目標連線埠以及包長度域。由TFTP使用的包標記(TID)在這裡被用做連線埠,因此TID必須介於0到65,535之間。對它的初始化我們在後面討論。TFTP頭中包括兩個位元組的操作碼,這個碼指出了包的類型,下面是TFTP包格式
---------------------------------------------------
| Local Medium | Internet | Datagram | TFTP |
---------------------------------------------------
連線
初始連線
初始連線時候需要發出WRQ(請求寫入遠程系統)或RRQ(請求讀取遠程系統),收到一個確定應答,一個確定可以寫出的包或應該讀取的第一塊數據。通常確認包包括要確認的包的包號,每個數據包都與一個塊號相對應,塊號從1開始而且是連續的。因此對於寫入請求的確定是一個比較特殊的情況,因此它的包的包號是0。如果收到的包是一個錯誤的包,則這個請求被拒絕。創建連線時,通信雙方隨機選擇一個TID,因為是隨機選擇的,因此兩次選擇同一個ID的可能性就很小了。每個包包括兩個TID,傳送者ID和接收者ID。這些ID用於在UDP通信時選擇連線埠,請求主機選擇ID的方法上面已經說過了,在第一次請求的時候它會將請求發到TID 69,也就是伺服器的69連線埠上。應答時,伺服器使用一個選擇好的TID作為源TID,並用上一個包中的TID作為目的ID進行傳送。這兩個被選擇的ID在隨後的通信中會被一直使用。下例是一個寫入的例子,其中WRQ,ACK和DATA代表寫入請求,確認和數據。
正常終止
傳輸的結束由DATA數據標記,其包括0-511個字元。這個包可以被其它數據包確認。接收方在發出對最後數據包的確認後可以下線,當然,適當的等待是比較好的,如果最後的確定包丟失可以再次傳輸。如果發出確認後仍然收到最後數據包,可以確定最後的確認丟失。傳送最後一個DATA包的主機必須等待對此包的確認或逾時。如果回響是ACK,傳輸完成。如果傳送方逾時並不準備重新傳送並且接收方有問題或網路有問題時,傳送也正常結束。當然實現時也可以是非正常結束,但無論如何連線都將被關閉。
早終結
如果請求不能被滿足,或者在傳輸中發生錯誤,需要傳送ERROR包。這僅是一種傳輸友好的方式,這種包不會被確認也不會被重新傳輸,因此這種包可能永遠不會被接收到。因此需要用逾時來偵測錯誤。
FTP協定的區別
優勢
儘管與FTP相比TFTP的功能要弱得多,但是TFTP具有兩個優點:
1)TFTP能夠用於那些有UDP而無TCP的環境;
2)TFTP代碼所占的記憶體要比FTP小。
儘管這兩個優點對於普通計算機來說並不重要,但是對於那些不具備磁碟來存儲系統軟體的自舉硬體設備來說TFTP特別有用。
相同點
TFTP協定的作用和我們經常使用的FTP大致相同,都是用於檔案傳輸,可以實現網路中兩台計算機之間的檔案上傳與下載。可以將TFTP協定看作是FTP協定的簡化版本。
不同點
1)TFTP協定不需要驗證客戶端的許可權,FTP需要進行客戶端驗證;
2)TFTP協定一般多用於區域網路以及遠程UNIX計算機中,而常見的FTP協定則多用於網際網路中;
3)FTP客戶與伺服器間的通信使用TCP,而TFTP客戶與伺服器間的通信使用的是UDP;
4)TFTP只支持檔案傳輸。也就是說,TFTP不支持互動,而且沒有一個龐大的命令集。最為重要的是,TFTP不允許用戶列出目錄內容或者與伺服器協商來決定哪些是可得到的檔案。