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