FTP協議及工作原理詳解


1. FTP協議 

什么是FTP呢?FTP 是 TCP/IP 協議組中的協議之一,是英文File Transfer Protocol的縮寫。

該協議是Internet文件傳送的基礎,它由一系列規格說明文檔組成,目標是提高文件的共享性,提供非直接使用遠程計算機,使存儲介質對用戶透明和可靠高效地傳送數據。簡單的說,FTP就是完成兩台計算機之間的拷貝,從遠程計算機拷貝文件至自己的計算機上,稱之為“下載 (download)”文件。若將文件從自己計算機中拷貝至遠程計算機上,則稱之為“上載(upload)”文件。在TCP/IP協議中,FTP標准命令TCP端口號為21,Port方式數據端口為20。

2. FTP服務器和客戶端

同大多數Internet服務一樣,FTP也是一個客戶/服務器系統。用戶通過一個客戶機程序連接至在遠程計算機上運行的服務器程序。依照 FTP 協議提供服務,進行文件傳送的計算機就是 FTP 服務器,而連接FTP服務器,遵循FTP協議與服務器傳送文件的電腦就是FTP客戶端。用戶要連上 FTP 服務器,就要用到 FPT 的客戶端軟件,通常 Windows自帶“ftp”命令,這是一個命令行的 FTP 客戶程序,另外常用的 FTP 客戶程序還有 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-貓眼等。

3. FTP用戶授權

(1)用戶授權

要連上 FTP 服務器(即“登陸”),必須要有該 FTP 服務器授權的帳號,也就是說你只有在有了一個用戶標識和一個口令后才能登陸FTP服務器,享受FTP服務器提供的服務。

(2)FTP地址格式

FTP地址如下: ftp://用戶名:密碼@FTP服務器IP或域名:FTP命令端口/路徑/文件名

上面的參數除FTP服務器IP或域名為必要項外,其他都不是必須的。如以下地址都是有效FTP地址:

ftp://foolish.6600.org

ftp://list:list@foolish.6600.org

ftp://list:list@foolish.6600.org:2003

ftp://list:list@foolish.6600.org:2003/soft/list.txt

(3)匿名FTP

互連網中有很大一部分 FTP 服務器被稱為“匿名”(Anonymous)FTP 服務器。這類服務器的目的是向公眾提供文件拷貝服務,不要求用戶事先在該服務器進行登記注冊,也不用取得FTP服務器的授權。Anonymous(匿名文件傳輸)能夠使用戶與遠程主機建立連接並以匿名身份從遠程主機上拷貝文件,而不必是該遠程主機的注冊用戶。用戶使用特殊的用戶名“anonymous”登陸FTP服務,就可訪問遠程主機上公開的文件。許多系統要求用戶將Emai1地址作為口令,以便更好地對訪問進行跟綜。匿名FTP一直是Internet上獲取信息資源的最主要方式,在Internet成千上萬的匿名FTP主機中存儲着無以計數的文件,這些文件包含了各種各樣的信息,數據和軟件。人們只要知道特定信息資源的主機地址,就可以用匿名FTP登錄獲取所需的信息資料。雖然目前使用WWW環境已取代匿名FTP成為最主要的信息查詢方式,但是匿名FTP仍是 Internet上傳輸分發軟件的一種基本方法。如red hat 、autodesk等公司的匿名站點。

4. FTP的傳輸模式

FTP協議的任務是從一台計算機將文件傳送到另一台計算機,它與這兩台計算機所處的位置、聯接的方式、甚至是是否使用相同的操作系統無關。假設兩台計算機通過ftp協議對話,並且能訪問Internet,你可以用ftp命令來傳輸文件。每種操作系統使用上有某一些細微差別,但是每種協議基本的命令結構是相同的。

FTP的傳輸有兩種方式:ASCII傳輸模式和二進制數據傳輸模式。

1.ASCII傳輸方式:假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便於把文件解釋成另外那台計算機存儲文本文件的格式。但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序,數據庫,字處理文件或者壓縮文件(盡管字處理文件包含的大部分是文本,其中也包含有指示頁尺寸,字庫等信息的非打印符)。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝,不要對這些文件進行處理,這也是下面要講的二進制傳輸。

2.二進制傳輸模式:在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。如果你在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會使傳輸稍微變慢 ,也會損壞數據,使文件變得不能用。(在大多數計算機上,ASCII方式一般假設每一字符的第一有效位無意義,因為ASCII字符組合不使用它。如果你傳輸二進制文件,所有的位都是重要的。)如果你知道這兩台機器是同樣的,則二進制方式對文本文件和數據文件都是有效的。

5. FTP的工作方式

FTP支持兩種模式,一種方式叫做Standard (也就是 PORT方式,主動方式),一種是 Passive (也就是PASV,被動方式)。 Standard模式 FTP的客戶端發送 PORT 命令到FTP服務器。Passive模式FTP的客戶端發送 PASV命令到 FTP Server。

下面介紹一個這兩種方式的工作原理:

Port模式FTP 客戶端首先和FTP服務器的TCP 21端口建立連接,通過這個通道發送命令,客戶端需要接收數據的時候在這個通道上發送PORT命令。 PORT命令包含了客戶端用什么端口接收數據。在傳送數據的時候,服務器端通過自己的TCP 20端口連接至客戶端的指定端口發送數據。 FTP server必須和客戶端建立一個新的連接用來傳送數據。

Passive模式在建立控制通道的時候和Standard模式類似,但建立連接后發送的不是Port命令,而是Pasv命令。FTP服務器收到Pasv命令后,隨機打開一個高端端口(端口號大於1024)並且通知客戶端在這個端口上傳送數據的請求,客戶端連接FTP服務器此端口,然后FTP服務器將通過這個端口進行數據的傳送,這個時候FTP server不再需要建立一個新的和客戶端之間的連接。

很多防火牆在設置的時候都是不允許接受外部發起的連接的,所以許多位於防火牆后或內網的FTP服務器不支持PASV模式,因為客戶端無法穿過防火牆打開FTP服務器的高端端口;而許多內網的客戶端不能用PORT模式登陸FTP服務器,因為從服務器的TCP 20無法和內部網絡的客戶端建立一個新的連接,造成無法工作。

6.FXP

FXP說簡單點就是一個FTP客戶端控制兩個FTP服務器,在兩個FTP服務器之間傳送文件。FXP的全稱為File Exchange Protocol――文件交換協議,可以認為FXP本身其實就是FTP的一個子集,因為FXP方式實際上就是利用了FTP服務器的Proxy命令,不過它的前提條件是FTP服務器要支持PASV,且支持FXP方式。FXP傳送時,文件並不下載至本地,本地只是發送控制命令,故FXP傳送時的速度只與兩個FTP服務器之間的網絡速度有關,而與本地速度無關。因FXP方式本地只發送命令,故在開始傳送后,只要本地不發送停止的命令,就算是本地關機了,FXP仍在傳送,直至一個文件傳送完成或文件傳送出錯后,FTP服務器等待本地發送命令時,才會因不能接收到命令而終止FXP傳送。

因為上述的原因,FXP傳送出錯時,本地的用戶進程還留在FTP服務器中,並沒有退出,如此時再次連接FTP服務器,可能會因用戶線程超過允許,FTP服務器提示客戶已登陸並拒絕客戶端的連接,直至服務器中的傀儡進程因超時或其他原因被FTP服務器殺死后,才能再次連接FTP服務器。

成功FXP有兩個必要條件:①兩個FTP服務器均支持FXP;②兩個FTP服務器均支持PASV方式。但並不是說滿足這兩個條件的FTP服務器均經本地操作成功FXP,這還與本地與FTP服務器的網絡狀況有關。故有時會出現同樣兩個FTP,別人可以FXP,而你不可以的情況。 

7. TFTP

TFTP(Trivial File Transfer Protocol)小文件傳輸協議

它是一個網絡應用程序,它比FTP簡單也比FTP功能少。它在不需要用戶權限或目錄可見的情況下使用,它使用UDP協議而不是TCP協議。

TFTP是一個傳輸文件的簡單協議,它基於UDP協議而實現,但是我們也不能確定有些TFTP協議是基於其它傳輸協議完成的。此協議設計的時候是進行小文件傳輸的,因此它不具備通常的FTP的許多功能,它只能從文件服務器上獲得或寫入文件,不能列出目錄,不進行認證,它傳輸8位數據。傳輸中有三種模式:netascii,這是8位的ASCII碼形式,另一種是octet,這是8位源數據類型;最后一種mail已經不再支持,它將返回的數據直接返回給用戶而不是保存為文件。   

任何傳輸起自一個讀取或寫入文件的請求,這個請求也是連接請求。如果服務器批准此請求,則服務器打開連接,數據以定長512字節傳輸。每個數據包包括一塊數據,服務器發出下一個數據包以前必須得到客戶對上一個數據包的確認。如果一個數據包的大小小於512字節,則表示傳輸結構。如果數據包在傳輸過程中丟失,發出方會在超時后重新傳輸最后一個未被確認的數據包。通信的雙方都是數據的發出者與接收者,一方傳輸數據接收應答,另一方發出應答接收數據。大部分的錯誤會導致連接中斷,錯誤由一個錯誤的數據包引起。這個包不會被確認,也不會被重新發送,因此另一方無法接收到。如果錯誤包丟失,則使用超時機制。錯誤主要是由下面三種情況引起的:不能滿足請求,收到的數據包內容錯誤,而這種錯誤不能由延時或重發解釋,對需要資源的訪問丟失(如硬盤滿)。TFTP只在一種情況下不中斷連接,這種情況是源端口不正確,在這種情況下,指示錯誤的包會被發送到源機。這個協議限制很多,這是都是為了實現起來比較方便而進行的。   

初始連接時候需要發出WRQ(請求寫入遠程系統)或RRQ(請求讀取遠程系統),收到一個確定應答,一個確定可以寫出的包或應該讀取的第一塊數據。通常確認包包括要確認的包的包號,每個數據包都與一個塊號相對應,塊號從1開始而且是連續的。因此對於寫入請求的確定是一個比較特殊的情況,因此它的包的包號是0。如果收到的包是一個錯誤的包,則這個請求被拒絕。創建連接時,通信雙方隨機選擇一個TID,因此是隨機選擇的,因此兩次選擇同一個ID的可能性就很小了。每個包包括兩個TID,發送者ID和接收者ID。這些ID用於在UDP通信時選擇端口,請求主機選擇ID的方法上面已經說過了,在第一次請求的時候它會將請求發到TID 69,也就是服務器的69端口上。應答時,服務器使用一個選擇好的TID作為源TID,並用上一個包中的TID作為目的ID進行發送。這兩個被選擇的ID在隨后的通信中會被一直使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM