TFTP

shenxm發表於2018-03-15

TFTP

1.tftp服務介紹
    1)TFTP(Trivial File Transfer Protocol,簡單檔案傳輸協議)是TCP/IP協議族中的一個用來在客戶機與伺服器之間進行簡單檔案傳輸的協議,提供不復雜、開銷不大的檔案傳輸服務。
    2)tftp服務的埠號為69。
    3)TFTP是一個傳輸檔案的簡單協議,它基於UDP協議而實現,但是我們也不能確定有些TFTP協議是基於其它傳輸協議完成的。
    4)此協議設計的時候是進行小檔案傳輸的。因此它不具備通常的FTP的許多功能,它只能從檔案伺服器上獲得或寫入檔案,不能列出目錄,不進行認證,它傳輸8位資料。
    5)傳輸中有三種模式:
        1》netascii,這是8位的ASCII碼形式;
        2》另一種是octet,這是8位源資料型別;
        3》最後一種mail已經不再支援,它將返回的資料直接返回給使用者而不是儲存為檔案。
    
2.tftp傳輸過程
    1)任何傳輸起自一個讀取或寫入檔案的請求,這個請求也是連線請求。
    2)如果伺服器批准此請求,則伺服器開啟連線,資料以定長512位元組傳輸。
    3)每個資料包包括一塊資料,伺服器發出下一個資料包以前必須得到客戶對上一個資料包的確認。
    4)如果一個資料包的大小小於512位元組,則表示傳輸結束。如果資料包在傳輸過程中丟失,發出方會在超時後重新傳輸最後一個未被確認的資料包。
    5)通訊的雙方都是資料的發出者與接收者,一方傳輸資料接收應答,另一方發出應答接收資料。
    6)大部分的錯誤會導致連線中斷,錯誤由一個錯誤的資料包引起。這個包不會被確認,也不會被重新傳送,因此另一方無法接收到。如果錯誤包丟失,則使用超時機制。
    7)錯誤主要是由三種情況引起的:
        1》不能滿足請求。
        2》收到的資料包內容錯誤,而這種錯誤不能由延時或重發解釋。
        3》對需要資源的訪問丟失(如硬碟滿)。
    8)TFTP只在一種情況下不中斷連線,這種情況是源埠不正確,在這種情況下,指示錯誤的包會被髮送到源機。

3.tftp特點
    1)由於TFTP使用UDP,而UDP使用IP,IP可以還使用其它本地通訊方法。因此一個TFTP包中會有以下幾段:本地媒介頭,IP頭,資料包頭,TFTP頭,剩下的就是TFTP資料了。
    2)TFTP在IP頭中不指定任何資料,但是它使用UDP中的源和目標埠以及包長度域。
    3)由於TFTP使用的包標記(TID)在這裡被用做埠,因此TID必須介於0到65,535之間。
    4)TFTP頭中包括兩個位元組的操作碼,這個碼指出了包的型別,大體上的TFTP包格式為:| Local Medium | Internet | Datagram | TFTP |
    
4.tftp優點
    1)TFTP可用於UDP環境;比如當需要將程式或者檔案同時向許多機器下載時就往往需要使用到TFTP協議。
    2)TFTP程式碼所佔的記憶體較小,這對於較小的計算機或者某些特殊用途的裝置來說是很重要的,這些裝置不需要硬碟,只需要固化了TFTP、UDP和IP的小容量只讀儲存器即可。當電源接通後,裝置執行只讀儲存器中的程式碼,在網路上廣播一個TFTP請求。網路上的TFTP伺服器就傳送響應,其中包括可執行二進位制程式。裝置收到此檔案後將其放入記憶體,然後開始執行程式。這種方式增加了靈活性,也減少了開銷。
    
5.初始連結
    1)初始連線時候需要發出WRQ(請求寫入遠端系統)或RRQ(請求讀取遠端系統),收到一個確定應答,一個確定可以寫出的包或應該讀取的第一塊資料。
    2)通常確認包包括要確認的包的包號,每個資料包都與一個塊號相對應,塊號從1開始而且是連續的。因此對於寫入請求的確定是一個比較特殊的情況,因此它的包的包號是0。
    3)如果收到的包是一個錯誤的包,則這個請求被拒絕。
    4)建立連線時,通訊雙方隨機選擇一個TID,因為是隨機選擇的,因此兩次選擇同一個ID的可能性就很小了。
    5)每個包包括兩個TID,傳送者ID和接收者ID。這些ID用於在UDP通訊時選擇埠,請求主機選擇ID的方法上面已經說過了,在第一次請求的時候它會將請求發到TID 69,也就是伺服器的69埠上。應答時,伺服器使用一個選擇好的TID作為源TID,並用上一個包中的TID作為目的ID進行傳送。這兩個被選擇的ID在隨後的通訊中會被一直使用。
    6)下例是一個寫入的例子,其中WRQ,ACK和DATA代表寫入請求,確認和資料。
        1》主機A向主機B發出WRQ,其中埠為69。
        2》B機向A機發出ACK,塊號為0,包括B和A的TID
            此時連線建立,第一個資料包以序列號1從主機開始發出。以後兩臺主機要保證以開始時確定的TID進行通訊。
            如果源ID與原來確定的ID不一樣,這個包會被認識為傳送到了錯誤的地址而被拋棄。錯誤的包是被髮送到正確埠的,但是包本身有錯誤。
            設想傳送方發出一個請求,這個請求在網路的那個裝置中被複製成兩個包,接收方先後接收到兩個包。接收方會認為為這是兩個獨立的請求,會返回兩個應答。
            當這兩個應答其中之一被接收到時,連線已經建立。第二個應答再到達時,這個包會被拋棄,而不會因為接收到第二個應答包而導致第一個建立的連線失敗。
6.正常終止
    1)傳輸的結束由DATA資料標記,其包括0-511個字元。這個包可以被其它資料包確認。
    2)接收方在發出對最後資料包的確認後可以斷開連線,當然,適當的等待是比較好的,如果最後的確定包丟失可以再次傳輸。
    3)如果發出確認後仍然收到最後資料包,可以確定最後的確認丟失。傳送最後一個DATA包的主機必須等待對此包的確認或超時。
    4)如果響應是ACK,傳輸完成。如果傳送方超時並不準備重新傳送並且接收方有問題或網路有問題時,傳送也正常結束。當然實現時也可以是非正常結束,但無論如何連線都將被關閉。
    
7.早終結
    如果請求不能被滿足,或者在傳輸中發生錯誤,需要傳送ERROR包。這僅是一種傳輸友好的方式,這種包不會被確認也不會被重新傳輸,因此這種包可能永遠不會被接收到。因此需要用超時來偵測錯誤。

8.TFTP資料包
    TFTP支援五種型別的包,已經說明這五種型別的包:
    包頭中包括了這個包所指定的操作碼。
        opcode operation
        1.Read request (RRQ)
        2.Write request (WRQ)
        3.Data (DATA)
        4.Acknowledgment (ACK)
        5.Error (ERROR)

9.tftp命令
    man tftp
    tftp - Trivial File Transfer Protocol client
    tftp是一個客戶端,是一個不重要輕量級的檔案傳輸協議,用於傳輸檔案到遠端主機上或從遠端機器上下載資料。
    tftp [-4][-6][-v][-l][-m mode] [host [port]] [-c command]

10.in.tftpd命令
    man in.tftpd
    tftpd - Trivial File Transfer Protocol server
    in.tftpd [options...]  directory...
    
11.tftp實現
    tftp包有:tftp,tftp-server
    rpm -ql tftp
        /usr/bin/tftp
        /usr/share/doc/tftp-0.49
        /usr/share/doc/tftp-0.49/CHANGES
        /usr/share/doc/tftp-0.49/README
        /usr/share/doc/tftp-0.49/README.security
        /usr/share/doc/tftp-0.49/README.security.tftpboot
        /usr/share/man/man1/tftp.1.gz
    rpm -ql tftp-server
        /etc/xinetd.d/tftp
        /usr/sbin/in.tftpd
        /var/lib/tftpboot(庫)
        /usr/share/doc/tftp-server-0.49
        /usr/share/doc/tftp-server-0.49/CHANGES
        /usr/share/doc/tftp-server-0.49/README
        /usr/share/doc/tftp-server-0.49/README.security
        /usr/share/doc/tftp-server-0.49/README.security.tftpboot
        /usr/share/man/man8/in.tftpd.8.gz
        /usr/share/man/man8/tftpd.8.gz

相關文章