1. 程式人生 > >重溫FTP的主動模式和被動模式

重溫FTP的主動模式和被動模式

    最近做一個專案用到FTP和其它系統進行檔案傳輸,結果在FTP網路連線的問題上花了很多時間,由於太久沒搞多FTP,忘記了FTP不單單開放21埠,客戶端採用不同連線模式對網路有不同。在此重溫一下FTP的主動模式和被動模式的相關知識。

    在使用FTP時,如果客戶端機器和FTP伺服器雙方之間的所有埠都是開放的,那連線不存在問題。如果客戶端與伺服器之間有防火牆,如果沒配置好防火策略和採用合適的連線模式,會導致登入成功,但無法List列表的問題。要避免出現這樣的問題,首先要了解FTP的工作模式。

    1.FTP的PORT(主動模式)和PASV(被動模式)

    (1) PORT(主動模式)

    PORT中文稱為主動模式,工作的原理: FTP客戶端連線到FTP伺服器的21埠,傳送使用者名稱和密碼登入,登入成功後要list列表或者讀取資料時,客戶端隨機開放一個埠(1024以上),傳送 PORT命令到FTP伺服器,告訴伺服器客戶端採用主動模式並開放埠;FTP伺服器收到PORT主動模式命令和埠號後,通過伺服器的20埠和客戶端開放的埠連線,傳送資料,原理如下圖:

    (2) PASV(被動模式)

    PASV是Passive的縮寫,中文成為被動模式,工作原理:FTP客戶端連線到FTP伺服器的21埠,傳送使用者名稱和密碼登入,登入成功後要list列表或者讀取資料時,傳送PASV命令到FTP伺服器, 伺服器在本地隨機開放一個埠(1024以上),然後把開放的埠告訴客戶端, 客戶端再連線到伺服器開放的埠進行資料傳輸,原理如下圖:

 

    2.兩種模式的比較

     從上面的執行原來看到,主動模式和被動模式的不同簡單概述為: 主動模式傳送資料時是“伺服器”連線到“客戶端”的埠;被動模式傳送資料是“客戶端”連線到“伺服器”的埠。

    主動模式需要客戶端必須開放埠給伺服器,很多客戶端都是在防火牆內,開放埠給FTP伺服器訪問比較困難。

    被動模式只需要伺服器端開放埠給客戶端連線就行了。

    3.不同工作模式的網路設定

我在實際專案中碰到的問題是,FTP的客戶端和伺服器分別在不同網路,兩個網路之間有至少4層的防火牆,伺服器端只開放了21埠, 客戶端機器沒開放任何埠。FTP客戶端連線採用的被動模式,結果客戶端能登入成功,但是無法LIST列表和讀取資料。很明顯,是因為伺服器端沒開放被動模式下的隨機埠導致。

    由於被動模式下,伺服器端開放的埠隨機,但是防火牆要不能全部開放,解決的方案是,在ftp伺服器配置被動模式下開放隨機埠在 50000-60000之間(範圍在ftp伺服器軟體設定,可以設定任意1024上的埠段),然後在防火牆設定規則,開放伺服器端50000-60000之間的埠端。

    主動模式下,客戶端的FTP軟體設定主動模式開放的埠段,在客戶端的防火牆開放對應的埠段。

    4.如何設定 工作模式?

哈哈,有人可能會問FTP伺服器如何設定工作模式?實時上FTP伺服器一般都支援主動和被動模式,連線採用何種模式是有FTP客戶端軟體決定。