用实例讲解 FTP 主动和被动模式

作者:vkvi 来源:ITPOW(原创) 日期:2009-7-2

FTP 连接

FTP 连接有两种:控制连接和数据连接。

  • 控制连接也可以叫命令连接,是 FTP 命令用的。客户端使用 1024 以后的端口(1025-65535,下同)与服务端 21 端口相连。
  • 数据连接是数据(比如上传的文件、列表的目录数据等)用的,客户端仍然使用 1024 以后的端口与服务器端相连,此时服务器端端口号就取决于主动模式还是被动模式了,并且谁先发起连接也取决于主动模式还是被动模式。

数据连接模式

数据连接模式分为主动模式和被动模式,默认是被动模式。主动模式就是服务端主动发起连接;被动模式就是客户端主动发起连接,服务端处于被动状态。

主动模式(Active ['æktiv] Mode)

客户端仍然 1024 以后的端口,服务端使用 20 端口。

Command: PORT 192,168,1,5,19,89
Response: 200 PORT command successful.

可以看出客户端要传送或接收之前会发送一个 PORT 命令,表示使用主动模式,后面有逗号隔开的 6 个数字,前四个数字表示客户端 IP,后两个数字表示客户端端口号(计算方法为:19*256+89)。

服务端收到 PORT 命令后会回应一个 200,表示主动模式 OK 了。

模式确定后,服务端就开始向客户端发起连接。

被动模式(passive ['pæsiv] Mode)

客户端、服务端都使用 1024 以后的端口。

Command: PASV
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 支不支持,而在于防火墙,一般设置来说:防火墙对出去的端口不怎么严,对进来的端口有严格控制,这就得看看使用主动还是被动了。

相关文章