TFTP ...
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