FTP的主動傳輸和被動傳輸

1.什麼是FTP協議

FTP(File TransferProtocol,文件傳輸協議)是TCP/IP協議組中的協議之一。FTP協議包括兩個組成部分,其一爲FTP服務器,其二爲FTP客戶端。其中FTP服務器用來存儲文件,用戶可以使用FTP客戶端通過FTP協議訪問位於FTP服務器上的資源。

eg:在開發網站的時候,通常利用FTP協議把網頁或程序傳到Web服務器上。此外,由於FTP傳輸效率非常高,在網絡上傳輸大的文件時,一般也採用該協議。

當FTP客戶端需要登陸到FTP服務器上的時候,服務器與客戶端需要進行一系列的身份驗證過程,這個過程就叫做命令連接。如在客戶端向服務器發起連接請求的時候,客戶端會隨即的選擇某個TCP端口來跟FTP服務器的21號端口進行連接,這主要是通過TCP三次握手來實現的。當三次握手完成之後,客戶端與服務器之間便建立了命令連接通道。不過這個通道的用途是非常有限的,其主要用來傳輸FTP的相關指令。如查看文件列表、刪除文件等等,而不能夠用來在客戶端與服務端進行文件傳輸。爲此這個通道就被稱之爲命令通道。而跟數據傳輸相關的爲數據通道。

到客戶端與服務器建立了連接之後,可能客戶端暫時不需要進行數據傳輸。如只是需要查看目錄下的文件或則其他相關的動作。此時之需要命令連接通道就可以完成了。如果此時客戶端需要往FTP服務器上上傳或者下載文件的話,就需要在客戶端與服務器端再建立一條額外的數據傳輸連接。

FTP是僅基於TCP的服務,不支持UDP。默認情況下FTP協議使用TCP端口中的 20和21這兩個端口,一個數據端口和一個命令端口(也可叫做控制端口),也就是20號端口用於傳輸數據,21號端口用於傳輸控制信息。但是,是否使用20作爲傳輸數據的端口與FTP使用的傳輸模式有關,如果採用主動模式,那麼數據傳輸端口就是20;如果採用被動模式,則具體最終使用哪個端口要服務器端和客戶端協商決定。這就是主動與被動FTP的最大不同之處。

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

2.主動傳輸模式(PORT)

FTP客戶端從任意的非特殊的端口(N >1024)連入到FTP服務器的命令端口——21端口。然後客戶端在N+1端口監聽,並且通過該N+1端口發送PORT命令給FTP服務器,接着服務器會從它自己的數據端口(20)連接到客戶端指定的數據端口(N+1)。在主動傳輸模式下,FTP的數據連接和控制連接的方向是相反的,也就是說:是客戶端向服務器建立控制連接,服務器向客戶端建立數據連接,其中,客戶端的控制連接和數據連接的端口號是大於1024的兩個端口號(臨時端口),而FTP服務器的數據端口爲20,控制端口爲21

主動方式FTP的主要問題實際上在於客戶端。FTP的客戶端並沒有實際建立一個到服務器數據端口的連接,它只是簡單地告訴服務器自己監聽的端口號,服務器再回來連接客戶端這個指定的端口。對於客戶端的防火牆來說,這是從外部系統建立到內部客戶端的連接,這是通常會被阻塞的。

對於服務器端的防火牆來說,必須允許下面的通訊才能支持被動方式的FTP

①從任何大於1024的端口到服務器的21端口(客戶端的初始化連接)

②服務器的21端口到任何大於1024的端口(服務器響應到客戶端的控制端口的連接)

③從任何大於1024端口到服務器的大於1024端口(客戶端初始化數據連接到服務器指定的任意端口)

④服務器的大於1024端口到遠程的大於1024的端口(服務器發送ACK響應和數據到客戶端的數據端口)

3.被動傳輸模式(PASV)

爲了解決服務器發起到客戶的連接的問題,人們開發了一種不同的FTP連接方式。這就是所謂的被動方式,或者叫做PASV,當客戶端通知服務器它處於被動模式時才啓用。在被動方式FTP中,命令連接和數據連接都由客戶端發起,只要求服務器端產生一個監聽相應端口的進程,這樣就可以解決從服務器到客戶端的數據端口的入方向連接被防火牆過濾掉的問題。

當開啓一個FTP連接時,客戶端隨機打開一個大於1024的本地端口N向服務器的21號端口發起連接,同時會開啓N+1號端口。然後向服務器提交 PASV命令,通知服務器自己處於被動模式。那麼服務器收到命令後就會開啓一個任意的非特權端口(P > 1024)監聽,併發送PORT P命令給客戶端通知自己的數據端口是P。然後客戶端通過本地端口N+1連接到服務器的端口P的連接用來傳送數據。在被動模式下,FTP的數據連接和控制連接的方向都是一致的,也就是說:是客戶端向服務器發起一個用於數據傳輸的連接,客戶端的連接端口是發起這個數據連接請求時使用的端口。客戶端的控制連接和數據連接的端口號是大於1024的兩個端口號(臨時端口),而服務器端的數據端口是臨時端口,而不一定是常規的20

 

從上面可以看出,兩種方式的命令鏈路連接方法是一樣的,而數據鏈路的建立方法就完全不同。而FTP的複雜性就在於此。

 

有個總結很方便記憶:

--------------------------------------------------------------------------------

主動模式:服務器向客戶端敲門,然後客戶端開門

被動模式:客戶端向服務器敲門,然後服務器開門

所以,如果你是如果通過代理上網的話,就不能用主動模式,因爲服務器敲的是上網代理服務器的門,而不是敲客戶端的門。而且有時候,客戶端也不是輕易就開門的,因爲有防火牆阻擋,除非客戶端開放大於1024的高端端口。

--------------------------------------------------------------------------------

4.主動與被動FTP優缺點

主動FTP對FTP服務器的管理有利,但對客戶端的管理不利。因爲FTP服務器企圖與客戶端的高位隨機端口建立連接,而這個端口很有可能被客戶端的防火牆阻塞掉。還有一點在於,主動模式是由客戶端指定端口,服務器主動去連接,其對於服務器的要求較高,若客戶端一方在防火牆後,從外向內的主動連接通常易被阻擋。如進行內外機器映射,則須同時映射控制端口和數據傳輸端口,但由於數據端口是由客戶端隨機指定的並不固定,這也加大建立連接的難度。

被動模式則一定程度上減輕了服務端的壓力,由服務器指定端口,並等待客戶端發起連接。但被動FTP對FTP客戶端的管理有利,但對服務器端的管理不利。因爲客戶端要與服務器端建立兩個連接,其中一個連到一個高位隨機端口,而這個端口很有可能被服務器端的防火牆阻塞掉。

幸運的是,有折衷的辦法。既然FTP服務器的管理員需要他們的服務器有最多的客戶連接,那麼必須得支持被動FTP。我們可以通過爲FTP服務器指定一個有限的端口範圍來減小服務器高位端口的暴露。這樣,不在這個範圍的任何端口會被服務器的防火牆阻塞。雖然這沒有消除所有針對服務器的危險,但它大大減少了危險。

5.兩種方式該如何選擇

當企業的網絡環境不同,兩個操作模式的應用效果是不同的。這主要是主動操作模式與被動操作模式在數據的傳輸通道建立上有一定的差異。從以上的分析中我們可以看出,在主動操作模式下,FTP服務器的20號端口是主動同客戶端聯繫,建立數據傳輸通道的。而在被動操作模式下,則FTP服務器是被動的等待,等待客戶端與其20號端口建立連接。不要小看這個細小的差異,這個差異卻決定了兩者應用環境的不同。一般來說,如果這個FTP服務器只對企業的內部局域網客戶提供文件傳輸的服務,那麼基本上兩者的應用效果沒有很大的差異。但是如果企業網絡外部的用戶也需要通過互聯網與FTP服務器進行文件傳輸的話,就會有很大的不同。這主要是因爲,在數據通道建立的過程中,客戶端會在另一個端口上監聽等待連接,並利用命令連接通道告訴服務器其監聽的端口號。然後企業的邊界路由器會將FTP的IP地址轉換爲合法的公網IP地址(假設企業由於公網IP地址有限,在邊界路由器上通過NAT服務向外部用戶提供FTP連接)。如果此時採用的是自動操作模式的話,則在連接這個數據通道的過程中FTP服務器會主動跟邊界路由器的端口進行通信(因爲FTP服務器認爲這臺邊界路由器,其實就是NAT服務器,就是FTP客戶段)。但是實際上不是,而且也有可能沒有啓用這個端口。爲此客戶端與FTP服務器之間的連接最終沒有建立起來。所以說,如果採用主動操作模式的話,當FTP服務器部署在NAT等服務器後面的時候,則FTP服務器與客戶端之間只能夠建立命令連接通道,而無法建立起數據傳輸通道。如果FTP服務器與客戶端之間還有防火牆的話,在連接的過程中也會出現以上類似的情況。

而如果是採用被動操作模式的話,是客戶端主動跟服務器的20號端口進行連接的。爲此在數據傳輸通道建立的過程中,即使中間有NAT服務器或者防火牆,也會準確無誤的連接到FTP服務器的數據傳輸接口。所以說,如果在客戶端與FTP服務器之間存在防火牆或者NAT服務器等類似設備的話,那麼在FTP服務器部署的時候,最好採用被動操作模式。否則的話,很可能只能夠建立命令連接通道,而無法進行數據傳輸。在FTP服務器部署的時候,其默認採用的是主動操作模式。如果企業FTP服務器的用戶都是在內部網絡中的,即不用像外部網絡的用戶提供FTP連接的需求,那麼採用這個默認操作方式就可以了。但是如果一些出差在外的員工或者員工在家庭辦公時也需要訪問企業內部的FTP服務器,而此時出於安全的考慮或者公網IP地址數量的限制,企業往往會把FTP服務器部署在防火牆或者NAT服務器的後面,此時這個主動操作模式就不行了。如果企業中通過互聯網來訪問企業內部FTP服務器的員工比較多的時候,那麼最好能夠一勞永逸的解決這個問題,即在FTP服務器上進行設置,強制客戶端在連接的時候採用被動操作模式。相反如果用戶比較少的話,而且用戶又具有一定的計算機知識,那麼可以不在服務器上進行設置。而是在連接的過程中,通過FTP客戶端來設置。如在某些FTP客戶端上,會有一個Passive Transfers等類似的選項。選中這個選項就表示以被動操作方式進行傳輸。而沒有選中這個選項的客戶端則仍然採用主動操作模式來進行連接。

總之,在FTP服務器部署的時候考慮是要採用主動操作模式還是被動操作模式,只需要記住一個原則,即如果把FTP服務器部署在防火牆或者NAT服務器的背後,則採用主動操作模式的客戶端只能夠建立命令連接而無法進行文件傳輸。如果部署完FTP服務器後,系統管理員發現用戶可以連接上FTP服務器,可以查看目錄下的文件,但是卻無法下載或者上傳文件,如果排除權限方面的限制外,那麼很有可能就是這個操作模式選擇錯誤。系統管理員告訴用戶選擇合適的操作模式,基本上就可以解決文件傳輸的問題了。

 

 

 

參考來源:

http://www.tuicool.com/articles/vMze6nj

http://blog.csdn.net/basycia/article/details/52039501

http://blog.csdn.net/u010154760/article/details/45458219

http://www.cnblogs.com/xiaohh/p/4789813.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章