FTP主动模式(Port)和被动模式(Passive)的区别

由于项目需求,需要接受一些数据,由于双方都是内网,对方提出建立一个ftp服务器,我去连接下载文件,然后在入库。

搭完ftp客户端之后一切正常,部署在内网服务器也一切正常,过了一段时间,由于内网服务器损坏,又重新申请了一个一模一样的服务器,ftp客户端部署完之后 ftp连接正常,但是不能下载文件。一开始以为是端口问题(某个端口忘记开了),但是换成已经开放的端口还是不行。突然想起ftp有主动模式和被动模式,主动模式是客户端开放端口。而被动模式是服务端开放端口。之前部署的时候用的是主动模式,一直没有问题。这次把主动模式换成了被动模式,重新部署之后,下载文件恢复正常。

下面介绍一下主动模式和被动模式的区别:

 

1、FTP的PORT(主动模式):

 PORT中文称为主动模式,工作的原理: FTP客户端(1024以上端口)连接到FTP服务器的21端口,发送用户名和密码登录,

登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;

FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

 

2、PASV(被动模式):

 PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端(1024以上端口)连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,

发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

两种模式的比较:

     从上面的运行原来看到,主动模式与被动模式,建立连接的过程是一样的,差别在于数据传输。

    主动模式传送数据时是“服务器(20端口)连接到客户端的端口;

 被动模式传送数据是客户端连接到服务器的端口(1024以上端口)。

    主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。被动模式只需要服务器端开放端口给客户端连接就行了。

### 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、付费专栏及课程。

余额充值