当前位置:网站首页>FTP的两种模式详解
FTP的两种模式详解
2022-07-29 05:25:00 【hljqfl】
在使用FTP时,如果客户端机器和FTP服务器双方之间的所有端口都是开放的,那连接不存在问题。如果客户端与服务器之间有防火墙,如果没配置好防火策略和采用合适的连接模式,会导致登录成功,但无法List列表的问题。要避免出现这样的问题,首先要了解FTP的工作模式。
1. FTP的PORT(主动模式)和PASV(被动模式)
(1) PORT(主动模式)
PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:
(2) PASV(被动模式)
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

2. 两种模式的比较
从上面的运行原来看到,主动模式和被动模式的不同简单概述为: 主动模式传送数据时是“服务器”连接到“客户端”的端口;被动模式传送数据是“客户端”连接到“服务器”的端口。
主动模式需要客户端必须开放端口给服务器,很多客户端都是在防火墙内,开放端口给FTP服务器访问比较困难。
被动模式只需要服务器端开放端口给客户端连接就行了。
3. 不同工作模式的网络设置
我在实际项目中碰到的问题是,FTP的客户端和服务器分别在不同网络,两个网络之间有至少4层的防火墙,服务器端只开放了21端口, 客户端机器没开放任何端口。FTP客户端连接采用的被动模式,结果客户端能登录成功,但是无法LIST列表和读取数据。很明显,是因为服务器端没开放被动模式下的随机端口导致。
由于被动模式下,服务器端开放的端口随机,但是防火墙要不能全部开放,解决的方案是,在ftp服务器配置被动模式下开放随机端口在 50000-60000之间(范围在ftp服务器软件设置,可以设置任意1024上的端口段),然后在防火墙设置规则,开放服务器端50000-60000之间的端口端。
主动模式下,客户端的FTP软件设置主动模式开放的端口段,在客户端的防火墙开放对应的端口段。
4. 如何设置 工作模式?
哈哈,有人可能会问FTP服务器如何设置工作模式?实时上FTP服务器一般都支持主动和被动模式,连接采用何种模式是有FTP客户端软件决定。
5. 补充
原文地址
FTP默认是的20和21端口,一般设备会自动识别21并开放20。管理端口和数据端口
当你改了以后呢。。就它无法自动开放别一个端口了。

完成一个FTP的传输过程不仅仅只需要21一个端口,而是2个端口,21端口只是一个命令端口,其实另外还有一个数据端
FTP具有两种模式,分别是port模式(也叫主动模式)和pasv模式(也叫被动模式),怎么来理解这两种模式呢?我来打个比喻吧,
在主动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会通过另外一个数据端口把东西传给客户端,这就是主动模式,可以理解为服务端主动给客户端传输文件;
在被动模式下:客户端给服务器端的21端口发命令说,我要下载什么什么,服务器端知道后,就打开一个端口,然后告诉客户端,我已经打开了某某端口,你自己进去拿吧,于是客户端就从那个端口进去拿文件了,这就是被动模式,可以理解为服务端被客户端拿走了东西
在主动模式中,FTP的两个端口是相对固定的,如果命令端口是x的话,那数据端口就是x-1,也就是说默认情况下,命令端口是21,数据端口就是20;你把命令端口改成了123,那么数据端口就是122。这样使用防火墙就很方便了,只要开通这两个端口就可以了,但是如果客户端是共享上网的话那岂不是不能正常使用FTP了,这样还是不行,一定需要被动模式。
被动模式中就麻烦了些,默认情况下命令端口是21,但是数据端口是随机的,这个需要在设备里设置一下被动端口。
设置完后,需要在做映射的时候,也开些这些端口.
边栏推荐
- UE4 天光和反射球的原理和区别
- Leetcode 557. reverse word III in string
- FPGA based: moving target detection (schematic + source code + hardware selection, available)
- LeetCode #876.链表的中间结点
- Abstract encapsulation inheritance polymorphism
- Operating system interview questions
- LeetCode #167.两数之和 II - 输入有序数组
- Jingwei Qili: OLED character display based on hmep060 (and Fuxi project establishment demonstration)
- LeetCode #83. 删除排序链表中的重复元素
- 简洁代码实现pdf转word文档
猜你喜欢

多线程和并发

Leetcode 14. longest public prefix

FPGA based: moving target detection (supplementary simulation results, available)

UE4 高光官方参考值

Open source based on STM32: MHD Bluetooth speaker (including source code +pcb)

Leetcode 283. move zero

计算机大厂面试题

LeetCode #189.轮转数组

官方教程 Redshift 02 4中GI引擎概述及总结
![[beauty of software engineering - column notes] 16 | how to write project documents?](/img/52/70d66230679abae6ce26d3477a22f6.png)
[beauty of software engineering - column notes] 16 | how to write project documents?
随机推荐
clickhouse 导入CSV失败 不报错但是无数据
leetcode刷题笔记 763.划分字母区间(中等)
Mathematical modeling experience
Dynamic planning summary
Leetcode 283. move zero
Leetcode 344. reverse string
Redshift 2.6.41 for maya2018 水印去除
Learning notes of bit operation
爬取表情包
SQLyog 安装和配置教程
[beauty of software engineering - column notes] 19 | as a programmer, you should have product awareness
[beauty of software engineering - column notes] 16 | how to write project documents?
Simple code to realize PDF to word document
唯美girls
LeetCode #3.无重复字符的最长子串
shell工具finalShell
#6898 变幻的矩阵 题解
2022暑初二信息竞赛学习成果分享1
Redshift还原SP效果 - SP贴图导出设置及贴图导入配置
Leetcode 3. longest substring without repeated characters