FTP协议的主动模式和被动模式

FTP的中文名称是“文件传输协议”,是File Transfer Protocol三个英文单词的缩写。FTP协议是TCP/IP协议组中的协议之一,其传输效率非常高,在网络上传输大的文件时,经常采用该协议。

一个完整的FTP由FTP服务器和FTP客户端组成,客户端可以将服务器上的文件通过FTP协议下载到本地,也可以将本地数据通过FTP协议上传到服务器上。

(1)服务器端需要安装FTP服务软件,常用的有FileZilla Server、IIS、Serv-U、OSSFTP等等。

不同的FTP软件对FTP协议标准支持有所差别,从我的使用经验感觉FileZilla Server是对FTP协议支持最好的软件,它具有以下几个特点:体积小(2M左右)、免费开源、操作简单、功能完善(我们所需要的有功能它基本都支持)。

IIS对FTP协议的支持也很不错。

Serv-U有几个命令支持不是很好,这个软件也是收费软件,没感觉比FileZilla Server好多少。

OSSFTP是阿里云对象存储提供的FTP Server,对FTP标准协议支持就更差了。

(2)FTP客户端软件就比较多了,常用的有FileZilla、FlashFXP、WinSCP、甚至在浏览器和windows资源管理器中输入FTP地址都可以当做FTP客户端来使用。我们的FtpCopy也属于FTP客户端。

FTP主动模式
首先,来了解下FTP的主动模式,主动模式是FTP的默认模式,也称为PORT模式。

  1. 在主动模式下,客户端会开启N和N+1两个端口,N为客户端的命令端口,N+1为客户端的数据端口。
    第一步,客户端使用端口N连接FTP服务器的命令端口21,建立控制连接并告诉服务器我这边开启了数据端口N+1。

第二步,在控制连接建立成功后,服务器会使用数据端口20,主动连接客户端的N+1端口以建立数据连接。这就是FTP主动模式的连接过程。

在数据连接建立的过程中,服务器是主动的连接客户端的,所以称这种模式为主动模式。
客户端的命令端口和数据端口实际中并不是有些文章写道的N和N+1的关系,两个端口比较接近而已。

  1. 主动模式有什么利弊呢?
    主动模式对FTP服务器的管理有利,因为FTP服务器只需要开启21端口的“准入”和20端口的“准出”即可。

但这种模式对客户端的管理不利,因为FTP服务器20端口连接客户端的数据端口时,有可能被客户端的防火墙拦截掉。

  1. 如何解决客户端防火墙拦截“数据连接”的建立呢?
    (1)如果防火墙开启了“拦截通知”,在使用FTP软件连接服务器时,防火墙会弹出下面这个提醒,只需要点击“允许访问”就可以建立连接了。
    (2)如果防火墙没有开启“拦截通知”,则需要我们的应用程序添加到防火墙的“允许的程序”列表中。允许FlashFXP.exe和WinSCP以主动模式连接FTP服务器。

FTP被动模式:
FTP主动模式,简单的理解就是服务器的数据端口20主动连接客户端的数据端口,来建立数据连接,用来传输数据,这个数据连接的建立有可能被客户端防火墙拦截掉。为了解决这个问题就衍生出另外一种连接模式—被动模式。被动模式也称为passive模式。

第一步,客户端的命令端口N主动连接服务器命令端口21,并发送PASV命令,告诉服务器用“被动模式”,控制连接建立成功后,服务器开启一个数据端口P,通过PORT命令将P端口告诉客户端。

第二步,客户端的数据端口N+1去连接服务器的数据端口P,建立数据连接。

在数据连接建立的过程中,服务器是被动的等待客户端来连接的,所以称这种模式为被动模式。

有两点需要补充

第一,客户端的命令端口和数据端口实际中并不是有些文章写道的N和N+1的关系,两个端口比较接近而已;
第二,服务器的数据端口P是随机的,这个客户端连接过来用的是6008端口,另外一个连接过来可能用的就是7009,不过P端口的范围是可以设置的。
2. 被动模式有什么利弊呢?
被动模式对FTP客户端的管理有利,因为客户端的命令端口和数据端口都是“准出”,windows防火墙对于“准出”一般是不拦截的,所以客户端不需要任何多余的配置就可以连接FTP服务器了。

但对服务器端的管理不利。因为客户端数据端口连到FTP服务器的数据端口P时,很有可能被服务器端的防火墙阻塞掉。

  1. 如何解决服务器端防火墙拦截“数据连接”的建立呢?
    为了解决P端口的“准入”不被服务器防火墙拦截,需要在服务器端设定P端口的范围,并在防火墙中开启这个范围端口的“准入”。如在FileZilla Server中指定被动模式的数据端口范围为6000-7000,然后在windows防火墙中配置6000-700端口允许“准入”

    ftpClient.enterLocalActiveMode(); //设置为主动模式 ftpClient.enterLocalPassiveMode();//设置为被动模式
### FTP 主动模式被动模式工作机制及区别 #### 文件传输协议 (FTP) 的两种主要操作模式 文件传输协议FTP)提供两种不同的工作模式来适应不同网络环境下的需求:主动模式(Active Mode)被动模式(Passive Mode),这两种模式的主要差异在于建立数据连接的方式。 #### 主动模式的工作流程 在主动模式下,客户端向服务器发送请求并监听任意可用的本地端口。当需要传送文件时,客户端通过命令通道通知服务器其正在监听哪个端口号用于接收来自服务器的数据流。随后,服务器尝试从自身的固定端口20发起到该指定客户端端口的数据连接。这种方式适用于防火墙配置较为宽松的情况,在某些特定场景可能会遇到访问受限的问题[^1]。 ```python # Python伪代码展示主动模式过程 client_socket.send("PORT " + client_ip_address + "," + str(client_port)) server_data_connection = server_socket.connect((client_ip_address, client_port)) ``` #### 被动模式的工作流程 为了克服主动模式可能遭遇的安全性连通性障碍,引入了更为灵活的被动模式。在此模式中,由客户端先发出`PASV`指令给服务器;接着,服务器会选择一个未被占用的高编号临时端口并向客户端报告此端口号;最后,客户端利用这个信息创建一个新的TCP连接至服务器所选端口完成数据交换。这种方法有效地解决了因企业内部网络安全策略而导致的标准FTP通信困难的局面[^3]。 ```python # Python伪代码展示被动模式过程 response = client_socket.send("PASV") (server_ip, server_port) = parse_pasv_response(response) data_connection = socket.create_connection((server_ip, server_port)) ``` #### 关键特性对比 | 特征 | 主动模式 | 被动模式 | |--| | 数据传输方向 | 服务器->客户端 | 客户端->服务器 | | 使用端口 | 固定端口20 | 动态分配高编号端口 | | 防火墙兼容性 | 可能受阻于严格的企业级防火墙设置 | 更好地绕过大多数类型的防火墙 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值