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 客户端的管理有利,但对 服务器 端的管理不利。因为客户端要与 服务器 端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被 服务器 端的防火墙阻塞掉。
(一)主动 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" />
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 端口进行连接 , 连接成功后,数据连接也建立了。
当客户端 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
个以内。之后,再在防火墙里打开这个范围的端口就可以了。
转载于:https://blog.51cto.com/walkinginthesun/339803