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客戶端軟體決定。

5. 補充
原文地址
FTP預設是的20和21埠,一般裝置會自動識別21並開放20。管理埠和資料埠
當你改了以後呢。。就它無法自動開放別一個埠了。

wKioL1hHZ2qQ1pmnAAHqFF6KuFw630.jpg-wh_50

完成一個FTP的傳輸過程不僅僅只需要21一個埠,而是2個埠,21埠只是一個命令埠,其實另外還有一個數據端

FTP具有兩種模式,分別是port模式(也叫主動模式)和pasv模式(也叫被動模式),怎麼來理解這兩種模式呢?我來打個比喻吧,
在主動模式下:客戶端給伺服器端的21埠發命令說,我要下載什麼什麼,並且還會說我已經打開了自己的某個埠,你就從這裡把東西給我吧,伺服器知道後就會通過另外一個數據埠把東西傳給客戶端,這就是主動模式,可以理解為服務端主動給客戶端傳輸檔案;
在被動模式下:客戶端給伺服器端的21埠發命令說,我要下載什麼什麼,伺服器端知道後,就開啟一個埠,然後告訴客戶端,我已經打開了某某埠,你自己進去拿吧,於是客戶端就從那個埠進去拿檔案了,這就是被動模式,可以理解為服務端被客戶端拿走了東西

在主動模式中,FTP的兩個埠是相對固定的,如果命令埠是x的話,那資料埠就是x-1,也就是說預設情況下,命令埠是21,資料埠就是20;你把命令埠改成了123,那麼資料埠就是122。這樣使用防火牆就很方便了,只要開通這兩個埠就可以了,但是如果客戶端是共享上網的話那豈不是不能正常使用FTP了,這樣還是不行,一定需要被動模式。

被動模式中就麻煩了些,預設情況下命令埠是21,但是資料埠是隨機的,這個需要在裝置裡設定一下被動埠。

設定完後,需要在做對映的時候,也開些這些埠.
在這裡插入圖片描述