FTP 連接
FTP 連接有兩種:控制連接和數據連接。
- 控制連接也可以叫命令連接,是 FTP 命令用的。客戶端使用 1024 以後的端口(1025-65535,下同)與服務端 21 端口相連。
- 數據連接是數據(比如上傳的文件、列表的目錄數據等)用的,客戶端仍然使用 1024 以後的端口與服務器端相連,此時服務器端端口號就取決於主動模式還是被動模式了,並且誰先發起連接也取決於主動模式還是被動模式。
數據連接模式
數據連接模式分爲主動模式和被動模式,默認是被動模式。主動模式就是服務端主動發起連接;被動模式就是客戶端主動發起連接,服務端處於被動狀態。
主動模式(Active ['æktiv] Mode)
客戶端仍然 1024 以後的端口,服務端使用 20 端口。
Response: 200 PORT command successful.
可以看出客戶端要傳送或接收之前會發送一個 PORT 命令,表示使用主動模式,後面有逗號隔開的 6 個數字,前四個數字表示客戶端 IP,後兩個數字表示客戶端端口號(計算方法爲:19*256+89)。
服務端收到 PORT 命令後會迴應一個 200,表示主動模式 OK 了。
模式確定後,服務端就開始向客戶端發起連接。
被動模式(passive ['pæsiv] Mode)
客戶端、服務端都使用 1024 以後的端口。
Response: 227 Entering Passive Mode (61,128,128,68,128,233)
可以看出客戶端要傳送或接收之前會發送一個 PASV 命令,沒有附帶參數,表示使用被動模式。
服務端收到後會迴應一個 227,用以響應 PASV 命令,後面有逗號隔開的 6 個數字,前四個數字表示服務端 IP,後兩個數字表示服務端端口號(計算方法爲:128*256+233)。
模式確定後,客戶端就開始向服務端發起連接。
主動被動模式的優缺點
主動模式是服務端用 20 端口去連客戶端 1024 以後的端口,如果客戶端防火牆禁掉了這些高位端口,服務端是連不上去的。
被動模式是客戶端用 1024 以後的端口去連服務端 1024 以後的端口,如果服務端防火牆禁掉了這些高位端口,客戶端是連不上去的。
有人問 IIS 支持主動模式還是被動模式?
其實你用主動和被動模式都可以連接 IIS 的 FTP,問題不在於 IIS 支不支持,而在於防火牆,一般設置來說:防火牆對出去的端口不怎麼嚴,對進來的端口有嚴格控制,這就得看看使用主動還是被動了。