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 的端口。( 服务器 端初始化数据连接到客户端的数据端口)( FTP 主动发起连接)
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 优缺点:

主动 FTP FTP服务器 的管理有利,但对客户端的管理不利。因为 FTP服务器 企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动 FTP FTP 客户端的管理有利,但对 服务器 端的管理不利。因为客户端要与 服务器 端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被 服务器 端的防火墙阻塞掉。
 
先假设客户端为 C, 服务端为 S.
Port 模式 :
当客户端 C 向服务端 S 连接后,使用的是 Port 模式 , 那么客户端 C 会发送一条命令告诉服务端 S( 客户端 C 在本地打开了一个端口 N 在等着你进行数据连接 ), 当服务端 S 收到这个 Port 命令后 就会向客户端打开的那个端口 N 进行连接,这种数据连接就生成了。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Pasv 模式 :
当客户端 C 向服务端 S 连接后,服务端 S 会发信息给客户端 C, 这个信息是 ( 服务端 S 在本地打开了一个端口 M, 你现在去连接我吧 ), 当客户端 C 收到这个信息后,就可以向服务端 S M 端口进行连接 , 连接成功后,数据连接也建立了。

从上面的解释中,大家可以看到两种模式主要的不同是数据连接建立的不同,对于 Port 模式,是客户端 C 在本地打开一个端口等服务端 S 去连接建立数据连接;而 Pasv 模式就是服务端 S 打开一个端口等待客户端 C 去建立一个数据连接。

 

FTP 需要 2 个端口,一个端口是作为控制连接端口 , 也就是 21 这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口 , 端口号为 20 (仅 PORT 模式),是用来建立数据传输通道的,主要有 3 个作用

从客户向服务器发送一个文件。

从服务器向客户发送一个文件。

从服务器向客户发送文件或目录列表。

 

如果要在 ie 里启用 PASV 方式,请打开 ie ,在菜单里选择:工具 -> Internet 选项 -> 高级,在 使用被动 ftp” 前面打上钩(需要 IE6.0 以上才支持)。

 

如果要在 ie 里不启用 PASV 方式, ie-->tools-->internet options-->advanced-->"use passive ftp" 这个选项修改一下,去掉勾。

 

所有 FTP 服务器软件都支持 PORT 方式。大部分 FTP 服务器软件 PORT 方式和 PASV 方式都支持。 Serv-U 默认配置下两种方式都支持。如果要关闭 PASV 方式,请打开 Serv-U ,进入 Domains -> user.dns0755.net -> Settings -> Advanced -> “Allow passive mode data transfers” 前面的钩去掉。

Serv-U Local Server -> Settings -> Advanced -> PASV port range 里,填入给 PASV 模式使用的本地端口范围,如 60000-60020 。请把端口范围限制在 20 个以内。之后,再在防火墙里打开这个范围的端口就可以了。