`
猫太的鱼
  • 浏览: 239320 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

FTP的工作方式:Active FTP 及 Passive FTP

ftp 
阅读更多
為何常常連上 FTP 站台後,進去後就停留且無法列表?

防火牆有很多種,其中有一些會禁止那些不是從內部網路IP發出的連接請求。而FTP協議是個很老的東東,沒有考慮這個問題。可以這樣簡單描述一般FTP的工作原理:Client對Server發出請求:「嗨,我的xx Port正等著你傳送資料呢,Sever聽到這個請求,就會建立一個連接,指向這個Port,並且開始傳送資料。這就回到了我們的問題,如果發出請求的Client在防火牆的後面,而這個防火牆禁止外部IP建立連接,那麼當然Server(在外部)不能建立與Client的連接。

所以,過了幾年,人們修改了FTP協議以應付這種情況。這就是Passive Mode,工作原理如下:Client向Server發出Passive命令,Server回答說:「資料在xx Port等你,自己來拿。」而這回則由Client建立指向Server的連接,從而取得資料。這就避免了防火牆的限制。

FTP是一種文件傳輸協議,它支持兩種模式,一種方式叫做Standard(也就是Active,主動方式),一種是Passive(也就是PASV,被動方式)。Standard模式FTP的客戶端發送PORT命令到FTP Server。Passive模式FTP的客戶端發送PASV命令到FTP Server。

而在大部份的防火牆設定中,使用 FTP 傳輸檔案時經常會遇到需要設定使用 Passive Mode 的 FTP,但大部份的 FTP client 軟體,default 大都是 Active Mode FTP,這二種 FTP 模式在傳輸上有何不同?先了解 FTP 的工作方式,有助於了解 active FTP 及 passive FTP 的不同。

一般的 FTP 使用 TCP port 20 及 21 二個 port,正常來說, port 20 是傳輸資料用,而 port 21 傳輸命令,但事實上並不是一直使用 port 20 來傳輸資料。

Active Mode FTP (主動模式 FTP)
在 Active 模式的 FTP client 一開始時會先使用一個大於 1024(N) 的 TCP port 連結至 FTP server 的port 21,然後 FTP client 會打開該 port 的下一個數字的 port (N+1) 並送至 FTPserver 說期望下次的溝通可以經由新的 port (N+1),這樣比較不會占用到 FTP server 的 port 21 而影響別的 FTP sessions,同時 FTP server 會使用 port 20 連結至 FTP client 新送過來的 port 號來傳資料。
所以在防火牆上需要打開:

FTP server port 21 from anywhere # 給 FTP client 開始連接
FTP server port 21 to port > 1024 # 給 FTP server 回應 client 命令
FTP server port 20 to port > 1024 # 給 FTP server 開始資料傳輸
FTP server port 20 from port > 1024 # 給 FTP cleint 傳送 data ACK 給 server

所以連接順序為:
1. FTP client use TCP port 1026 for command to FTP server command port 21
2. FTP server use TCP port 21 responed to FTP client command port 1026
3. FTP server use TCP port 20 for sending data to FTP client data port 1027 (1026 + 1)
4. FTP client use TCP port 1027 ( 1026 + 1) for data ACK to FTP server port 20

問題在於使用 Active Mode FTP 時主控權在 FTP client,FTP client 並不是真正的連至 FTP server 的data port (TCP port 20),它只是告訴 FTP server 它準備在那個 port 接收資料及port+1 傳送 ACK,並期望 FTP server 可以主動連接至 FTP client 所期望的 port,這在使用防火牆的環境中就會造成問題。

Passive Mode FTP (被動模式 FTP)
解決主動模式在防火牆外面時所發生無法連接的問題,可以用被動模式 FTP,在Passive Mode FTP 下,FTP client一開始和 Active Mode FTP 一樣,打開二個 port (N > 1024 及 N+1),使用第一個port 連接至 FTP server的 port 21,並送出命令 PORT 讓 server 連至 N port 再送出 PASV 命令給 server,這樣會造成 server使用 一個大於 1024 的 port 連接至 client 並送出命令 PORT N ( N >1024 ) 給client,這樣 client 就會使用 N + 1 並開始傳輸資料。

這樣子在防火牆上需要設定:

FTP server TCP port 21 from anywhere # FTP client 開始連接至 FTP server
FTP server TCP port 21 to port > 1024 # FTP server 回應 client 控制
FTP server TCP port > 1024 from anywhere # FTP client 資料傳輸
FTP server TCP port > 1024 to client port > 1024 # FTP server 回應資料 ACK至 client data port

連接順序為:
1. FTP client use TCP port 1026 to FTP server command port 21 via command PASV
2. FTP server use TCP port 21 to FTP client 1026 command port for reply data port 2024
3. FTP client use TCP port 1027 (N+1) to FTP server 2024 for data transmit and ACK
4. FTP server use TCP port 2024 to FTP client for data transmit and ACK

因為 Passive Mode FTP 是由 FTP server 發起一個大於 1024 的 port 至 client,在防火牆上的設定就相對簡單,而可以傳輸資料而不會被防火牆 block。因為FTP Server會開放一個隨機的高Port,儘管在IIS4和IIS5裡面Port的範圍是1024-5000,但是許多FTP Server的Port範圍卻可達到了1024-65535,這個時候在這個主動開放的隨機Port上是有完全的訪問權限喔,如果IIS也要設置成開放的Port為1024-65535,設置方法如下:

1. regedt32
2. 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3. 編輯→新增→數值→ValueName:MaxUserPortDataType:REG_DWORDValue:65534

現在的FTP軟體裡面包括在IE5以上的版本裡面,也已經支持這兩種模式了。一般一些FTP客戶端的軟體就比較好設置了,一般都有一個PASV的選項,比如CuteFTP,傳輸的方式都有Standard和PASV的選項,可以自己進行選擇;另外在IE裡面如果要設置成PASV模式的話,可以在工具→網際網路選項→進階→使用被動式FTP(啟用),否則就採用Standard模式。

所以如果遇到了有防火牆或者怕配置麻煩的話,還是採用PASV模式比較好些,但是如果真的對安全的需求很高的話,建議採用Standard模式。如何設置Standard模式?首先要建立一條規則就是允許內部的IP連接外部的IP的21 Port;第二條就是禁止外部IP的TCP 20 Port連接內部IP小於1024的Port,這條是為了防止外部連接內部的一般Port;第三條驗證ACK是否等於1,這個的原理就要參見TCP建立連接的三方交握了。

在 Windows 下原來的 ftp client 並沒有 passive 這個指令,但可以利用 literal 指今來下給 FTP server FTP session 為 Passive Mode。方法如下:

C:\>ftp 10.10.100.121
Connected to 10.10.100.121.
220 (vsFTPd 2.0.1)
User (10.10.100.121:(none)): ftp
331 Please specify the password.
Password:
230 Login successful.
ftp> literal pasv
227 Entering Passive Mode (10,10,100,121,242,172)
ftp>

可以看到進入 Passive Mode 了.使用的 port 號碼是 (242*256)+172= 62124

若是 UNIX,但 FTP client 不支援 Passive Mode 指令,可以用 quote pasv。
Linux 作業系統的話,則可以利用 Passive 指令來切換。
分享到:
评论

相关推荐

    ftp_Solaris ftp passive mode

    FTP有两种工作模式:主动模式(Active Mode)和被动模式(Passive Mode)。主动模式下,FTP客户端打开一个随机端口(通常是1024到5000之间的端口)与FTP服务器的21号控制端口通信,并告诉服务器它使用的端口。然后,...

    FTP文件传输源代码

    2. FTP工作模式: - 主动模式(Active Mode):服务器主动连接客户端的数据端口来传输数据。 - 被动模式(Passive Mode):客户端发起数据连接请求,适用于防火墙和NAT环境,解决端口访问问题。 3. FTP命令与响应...

    ftp服务器FtpServer

    4. **传输模式**:FTP有两种传输模式,主动(Active)和被动(Passive)。主动模式中,客户端打开一个端口向服务器发送数据;被动模式下,服务器打开一个端口等待客户端连接,用于解决防火墙和NAT设备下的连接问题。...

    ftp搭建(文件上传、下载文件)

    FTP有两种连接模式:主动(Active)和被动(Passive)。主动模式中,客户端打开一个随机端口并告诉服务器,然后服务器连接到这个端口。被动模式下,服务器打开一个端口并告诉客户端,客户端连接到这个端口。被动模式...

    Apache FTPServer的配置使用

    FTP 协议有两种工作模式:主动模式和被动模式。 主动模式(Active Mode):客户端打开一个随机端口,连接到服务器的 21 号端口,然后服务器连接到客户端的随机端口,传输文件。 被动模式(Passive Mode):客户端...

    ftp.rar_ftp 上传

    FTP有两种工作模式:主动(Active)模式和被动(Passive)模式。主动模式中,客户端打开一个随机端口请求数据连接,服务器则连接到这个端口进行数据传输。而在被动模式下,服务器开启一个随机端口等待客户端建立数据...

    ftp文件传输源代码资料

    FTP协议基于TCP/IP协议族,分为两种工作模式:主动模式(Active Mode)和被动模式(Passive Mode)。主动模式中,客户端首先建立一个控制连接到服务器的端口,然后服务器通过这个控制连接回传一个数据连接的端口号,...

    Delphi7实现FTP

    FTP有两种模式,被动模式(Passive Mode)和主动模式(Active Mode)。被动模式通常用于防火墙后的服务器或客户端,可以通过设置TIdFTP的Passive属性为True来启用。 8. **保持连接**: 如果需要频繁进行FTP操作,...

    FTP.zip_FTP 下载_ftp下载

    1. **FTP工作模式**:FTP有两种工作模式,分别是主动模式(Active Mode)和被动模式(Passive Mode)。主动模式下,客户端打开一个数据连接端口并告知服务器,服务器则通过这个端口发送数据。而在被动模式中,服务器...

    Quick Easy FTP Server 4.0.0

    此外,了解被动模式(Passive Mode)和主动模式(Active Mode)的区别对于克服防火墙或NAT设备带来的连接问题至关重要。 总的来说,Quick Easy FTP Server 4.0.0是一款适合初学者和小型团队的FTP服务器解决方案,它...

    Ftp-Sever.rar_ftp_ftp sever_ftp 服务器_ftp-sev_ftp-sever

    5. ** passive模式与active模式**:FTP有两种工作模式,Passive(被动)模式和Active(主动)模式。Passive模式适用于防火墙或NAT环境,服务器会打开一个随机端口等待客户端连接,以避免被防火墙阻断。Active模式则...

    FTPjava.rar_ftp_ftpjava_ftpjava 客户端_site:www.pudn.com

    2. **设置工作模式**:FTP有两种工作模式,主动(Active)和被动(Passive)。在被动模式下,`FTPClient.enterLocalPassiveMode()`会启动一个监听端口等待服务器连接,适合防火墙后的环境。 3. **文件上传**:使用`...

    ftp.rar_ftp_ftp.rar_ftp上传_uploader_上传ftp

    此外,FTP还支持 passive模式和active模式,解决防火墙或NAT设备可能导致的连接问题。Passive模式常用于防火墙后的客户端,服务器会主动发起数据连接,而active模式则是客户端向服务器请求数据连接。 FTP上传的步骤...

    简单ftp上传文件客户端源码

    3. **设置工作模式**:FTP有两种工作模式:主动(Active)和被动(Passive)。在主动模式下,客户端告诉服务器哪个端口可以用来接收数据;在被动模式下,服务器告诉客户端一个可用于数据传输的端口。被动模式常用于...

    FTP下载_reachwi1_C#_简单ftp_

    - `PASV`(Passive Mode)或`PORT`(Active Mode):设置FTP工作模式。 - `LIST`:获取目录列表,以确认文件是否存在。 - `RETR`(Retrieve):从服务器下载文件。 - `QUIT`:关闭连接。 5. 文件下载流程: ...

    FTP代理流程图

    数据传输通常通过两种模式进行:主动模式(Active Mode)和被动模式(Passive Mode)。在主动模式下,FTP客户端打开一个端口并等待来自FTP服务器的数据连接。而在被动模式下,FTP服务器打开一个端口并等待来自FTP...

    FTP.rar_FTP JAVA 客户端_ftp_ftp java_ftp java_java ftp

    2. **工作模式**:FTP有两种主要的工作模式,主动(Active)和被动(Passive)。主动模式中,服务器打开一个数据连接到客户端;而在被动模式下,客户端打开连接到服务器的数据端口。 3. **命令交互**:FTP使用一...

    linux-FTP客户端(纯C代码)

    3. **FTP数据连接**:FTP有两种模式,主动(Active)和被动(Passive)。在主动模式下,客户端打开一个数据连接到服务器;在被动模式下,服务器打开一个端口,客户端连接到这个端口。由于防火墙和NAT配置,被动模式...

    FTP.rar_ftp VC++_ftp VC++_ftp vc_ftp 源码_vc ftp

    4. **数据传输模式**:FTP有两种传输模式,主动(Active)和被动(Passive)。主动模式中,服务器主动连接到客户端的数据端口;被动模式中,客户端建立一个新的连接到服务器的数据端口。考虑到防火墙和NAT设备的问题...

    FTP上传与下载程序PB

    它提供了两种工作模式:主动模式(Active Mode)和被动模式(Passive Mode),以适应不同网络环境下的连接需求。 在PowerBuilder中,我们可以使用FTP对象或FTP控件来实现FTP功能。FTP对象是PowerScript中的一个类,...

Global site tag (gtag.js) - Google Analytics