网站首页 > 文章精选 正文
FTP(File Transfer Protocol/文件传输协议),是提供上传及下载文件的服务。
FTP是基于TCP协议的服务,而在FTP服务器和客户端建立连接时,有两种模式主动模式(Active)和被动模式(Passive)。
FTP工作原理
FTP服务使用两个端口在服务器和客户端之间进行通信。 一个是控制端口(也叫命令端口),用来传输指令和命令,命令端口通常是21。另一个是数据端口,用来传输实际的数据。
主动模式与被动模式的区别,主要在数据端口上。
FTP主动模式
主动模式建立连接的过程如下:
1. 客户端打开一个随机的端口N(端口号大于1024),连接至FTP服务器的21号命令端口。 客户端开始监听端口N+1,并通知FTP服务器客户端正在监听的端口号并且已准备好从此端口接收数据。 2. FTP服务器打开20号端口并且建立和客户端数据端口的连接。 3. 客户端向FTP服务器发送一个应答,告诉FTP服务器它已经建立好了一个连接。
主动模式下的工作方式:
命令连接:客户端 ( >1024端口) -> FTP服务器 (21端口) 数据连接:客户端( >1024端口)总结一下,主动模式下数据连接是由FTP服务器端发起。
使用主动模式的情况下,在防火墙或NAT环境下,容易产生一些问题,导致无法连接。比如:FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。所以产生了从客户端发起连接的被动模式。
FTP被动模式
被动模式建立连接的过程如下:
1. 客户端打开一个随机的端口N(端口号大于1024),连接至FTP服务器的21号命令端口。 客户端打开一个随机的端口N+1,并向FTP服务器发送PASV命令。 2. FTP服务器打开一个任意的非特权端口P(端口号大于1024)并将端口号通知客户端。 3. 客户端发起从本地端口N+1到FTP服务器的端口P的连接用来传送数据。被动模式下的工作方式:
命令连接:客户端 ( >1024端口) -> FTP服务器 (21端口) 数据连接:客户端( >1024端口) -> FTP服务器 (>1024端口)被动模式下,命令连接和数据连接都由客户端发起。
这样就可以解决主动模式下从FTP服务器发起的数据连接的端口被防火墙阻塞掉的问题。
解决通过防火墙连接FTP的问题
在FTP服务器端开启被动模式需要进行如下的设置(以vsftpd为例):
pasv_enable=YES #FTP服务器使用被动模式 pasv_min_port=60000 #定义数据连接端口号开始范围 pasv_max_port=60100 #定义数据连接端口号结束范围在防火墙上要添加允许从60000到60100端口的入站规则。
解决关于NAT的问题
有两种方法:
- 在防火墙上启用FTP的ALG功能
- 在FTP服务器端指定地址进行地址转换
以vsftpd为例,配置FTP服务器端指定地址进行地址转换。
pasv_addr_resolve=YES #启用地址转换 pasv_address=xx.xx.xx.xx #FTP服务器公网地址
猜你喜欢
- 2025-08-06 谁来教我渗透测试——黑客应该掌握的Windows基础
- 2025-08-06 centos7 部署SFTP
- 2025-08-06 面试干货:TCP/IP 协议的经典面试知识点总结
- 2025-08-06 《TCP/IP协议栈最全对比!一文搞懂TCP/UDP/IP/ICMP/ARP》
- 2025-08-06 网络应用服务器(三)
- 2025-08-06 网络工程师必备的《网络端口大全》,收藏起来这一份就够了
- 2025-08-06 VPN技术(IPsec/L2TP/SSLVPN/PPTP)学习笔记
- 2025-08-06 什么是FTP?怎么连接FTP
- 2025-08-06 做黑客具有网络端口知识
- 2025-08-06 网络、IP、端口、TCP、socket
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)