在主動模式下,FTP用戶端随機開啟一個大于1024的端口N向伺服器的21号端口發起連接配接,然後開放N+1号端口進行監聽,并向伺服器發出PORT N+1指令。伺服器接收到指令後,會用其本地的FTP資料端口(通常是20)來連接配接用戶端指定的端口N+1,進行資料傳輸。
在被動模式下,FTP庫戶端随機開啟一個大于1024的端口N向伺服器的21号端口發起連接配接,同時會開啟N+1号端口。然後向伺服器發送PASV指令,通知伺服器自己處于被動模式。伺服器收到指令後,會開放一個大于1024的端口P進行監聽,然後用PORT P指令通知用戶端,自己的資料端口是P。用戶端收到指令後,會通過N+1号端口連接配接伺服器的端口P,然後在兩個端口之間進行資料傳輸。
總的來說,主動模式的FTP是指伺服器主動連接配接用戶端的資料端口,被動模式的FTP是指伺服器被動地等待用戶端連接配接自己的資料端口。
被動模式的FTP通常用在處于防火牆之後的FTP客戶通路外界FTp伺服器的情況,因為在這種情況下,防火牆通常配置為不允許外界通路防火牆之後主機,而隻允許由防火牆之後的主機發起的連接配接請求通過。是以,在這種情況下不能使用主動模式的FTP傳輸,而被動模式的FTP可以良好的工作。
=========================================
FTP是僅基于TCP的服務,不支援UDP。與衆不同的是FTP使用2個端口,一個資料端口和一個指令端口(也可叫做控制端口)。通常來說這兩個端口是21(指令端口)和20(資料端口)。但FTP 工作方式的不同,資料端口并不總是20。這就是主動與被動FTP的最大不同之處。
(一)主動FTP
主動方式的FTP是這樣的:用戶端從一個任意的非特權端口N(N>1024)連接配接到FTP伺服器的指令端口,也就是21端口。然後用戶端開始監聽端口N+1,并發送FTP指令“port N+1”到FTP伺服器。接着伺服器會從它自己的資料端口(20)連接配接到用戶端指定的資料端口(N+1)。
針對FTP伺服器前面的防火牆來說,必須允許以下通訊才能支援主動方式FTP:
1. 任何大于1024的端口到FTP伺服器的21端口。(用戶端初始化的連接配接)
2. FTP伺服器的21端口到大于1024的端口。 (伺服器響應用戶端的控制端口)
3. FTP伺服器的20端口到大于1024的端口。(伺服器端初始化資料連接配接到用戶端的資料端口)
4. 大于1024端口到FTP伺服器的20端口(用戶端發送ACK響應到伺服器的資料端口)
(二)被動FTP
為了解決伺服器發起到客戶的連接配接的問題,人們開發了一種不同的FTP連接配接方式。這就是所謂的被動方式,或者叫做PASV,當用戶端通知伺服器它處于被動模式時才啟用。
在被動方式FTP中,指令連接配接和資料連接配接都由用戶端發起,這樣就可以解決從伺服器到用戶端的資料端口的入方向連接配接被防火牆過濾掉的問題。
當開啟一個 FTP連接配接時,用戶端打開兩個任意的非特權本地端口(N > 1024和N+1)。第一個端口連接配接伺服器的21端口,但與主動方式的FTP不同,用戶端不會送出PORT指令并允許伺服器來回連它的資料端口,而是送出 PASV指令。這樣做的結果是伺服器會開啟一個任意的非特權端口(P > 1024),并發送PORT P指令給用戶端。然後用戶端發起從本地端口N+1到伺服器的端口P的連接配接用來傳送資料。
對于伺服器端的防火牆來說,必須允許下面的通訊才能支援被動方式的FTP:
1. 從任何大于1024的端口到伺服器的21端口 (用戶端初始化的連接配接)
2. 伺服器的21端口到任何大于1024的端口 (伺服器響應到用戶端的控制端口的連接配接)
3. 從任何大于1024端口到伺服器的大于1024端口 (用戶端初始化資料連接配接到伺服器指定的任意端口)
4. 伺服器的大于1024端口到遠端的大于1024的端口(伺服器發送ACK響應和資料到用戶端的資料端口)
以上關于主動和被動FTP的解釋,可以簡單概括為以下兩點:
1、主動FTP:
指令連接配接:用戶端 >1024端口 -> 伺服器 21端口
資料連接配接:用戶端 >1024端口 1024端口 -> 伺服器 21端口
資料連接配接:用戶端 >1024端口 -> 伺服器 >1024端口
(三) 主動與被動FTP優缺點:
主動FTP對FTP伺服器的管理有利,但對用戶端的管理不利。因為FTP伺服器企圖與用戶端的高位随機端口建立連接配接,而這個端口很有可能被用戶端的防火牆阻塞掉。被動FTP對FTP用戶端的管理有利,但對伺服器端的管理不利。因為用戶端要與伺服器端建立兩個連接配接,其中一個連到一個高位随機端口,而這個端口很有可能被伺服器端的防火牆阻塞掉。