FTP主动模式和被动模式

基于Centos7、vsftpd3.0.2

0、前导:

  • ftp通信中存在两种连接:
    • 控制连接:用于传递控制命令及其他小数据量通信。
    • 数据连接:用于传输文件数据流。
  • 根据数据连接的建立方式分为主动模式(active mode)和被动模式(passive mode),主动和被动都是以ftp服务端为中心来说的。
    • 主动模式:顾名思义,主动模式就是ftp-erver主动发起通向ftp-client的数据连接
    • 被动模式:同理,被动模式就是ftp-erver不发起连接,而是被动接受ftp-client发起的数据连接
  • ftp仍然属于tcp连接,故需三次握手。

一、主动模式:

vim /etc/vsftpd/vsftpd.conf
pasv_enable=NO  #1.关闭passive模式
port_enable=YES  #2.启用active模式
connect_from_port_20=YES  #3.允许从20端口连接,主动模式使用20端口进行数据传输

pasv_min_port=3000  #active模式下属无效配置
pasv_max_port=4000  #active模式下属无效配置
systemctl restart vsftpd  #重启ftp服务
ftp -A 192.168.50.87  #以active模式连接ftp-server,一定要加参数【-A】

连接过程:

  1. client用大于1024的任意端口(如1025)连接server的21端口,建立控制连接(controll-connection),用于控制通信。
  2. client另起一个大于1024的端口(如1026),并通过控制连接将此端口告诉server,server使用其20端口主动与此端口建立数据连接(data-connection)。

二、被动模式:

vim /etc/vsftpd/vsftpd.conf
pasv_enable=YES  #1.开启被动模式,如果不配置pasv_enable=NO,默认是passive模式

#默认值为0,表示取任意(1024 – 65535端口),把端口范围设在比较高的一段范围内,比如3000-4000
pasv_min_port=3000  #2.指定数据连接端口下界
pasv_max_port=4000  #3.指定数据连接端口上界
systemctl restart vsftpd  #重启ftp服务
ftp -p 192.168.50.87  #以passive模式连接ftp-server,【-p】为可选参数

连接过程:

  1. client用大于1024的任意端口(如1025)连接server的21端口,建立控制连接(controll-connection),用于控制通信。

  2. client告诉server要发起数据通信,此时server就从指定的端口范围内选择一个端口(如3001),并对其监听,而后将此端口告诉client。client另起一个大于1024的端口(如1026),主动去连接server的3001端口,server被动接受并建立数据连接。

三、区别:

  1. 若ftp服务器只在局域网内使用,任选一种模式都没问题。
  2. 若ftp要通过互联网提供服务,由于边界路由器、NAT、防火墙等机制的存在,主动模式下server会误认为边界路由器就是client,所以会试图与边界路由器的20端口建立数据连接,而不能抵达真实client,造成能连上server但是却不能上传、下载、新建目录的问题。
  3. 若使用被动模式则不存在这样的问题,因为数据连接由client主动发起,能准确连接上server监听的数据端口。

相关推荐