FTP即File Transfer Protocol文件传输协议
客户端与服务端建立会话,双方启动控制进程,用到TCP的21端口
利用此端口控制文件是上传还是下载,删除或是复制等操作命令。
真正的数据传输走的是另外的端口。

主动模式
当会话建立完成后,客户端就开启某个端口比如6666,然后告诉服务器自己用的是6666端口侦听,FTP服务器会主动访问客户端6666端口,服务器这边的端口为20。

被动模式
当会话建立完成后,服务器告诉客户端自己打开了某个端口,比如8888这样一个端口来侦听,然后等待客户端访问,这就是被动模式。
(注意:使用主动模式,防火墙需要打开21和20端口。如果只打开21和20端口,被动模式不能下载数据,访问ftp不成功很大可能就是模式不对)

下面,我将在自己的Win10上安装与配置ftp服务器
1.win+R输入:appwiz.cpl


java ftps被动模式连接ftp服务器_计算机网络

java ftps被动模式连接ftp服务器_服务器_02

java ftps被动模式连接ftp服务器_安装配置ftp服务器_03

4.稍等一会

java ftps被动模式连接ftp服务器_ftp协议_04


java ftps被动模式连接ftp服务器_安装配置ftp服务器_05

5.在window管理工具下找到iis并点击进入

java ftps被动模式连接ftp服务器_ftp协议_06

6.单击网站添加站点

java ftps被动模式连接ftp服务器_ftp协议_07

7.站点名字随意,物理路径填找个文件夹路径填就可以了。

java ftps被动模式连接ftp服务器_客户端_08

8.选择自己的ip地址


java ftps被动模式连接ftp服务器_安装配置ftp服务器_09

java ftps被动模式连接ftp服务器_ftp协议_10

10.在同一局域网虚拟机上即可访问,资源管理器和浏览器中都可访问


java ftps被动模式连接ftp服务器_ftp协议_11

java ftps被动模式连接ftp服务器_客户端_12

那么如何知道ftp服务器使用的是被动模式还是主动模式呢?
我准备个大的文件,往共享的文件夹里上传文件,再查看会话进程就可以看见了。注意文件要大,不然等还没查看到,会话就结束了。

查看会话的命令:netstat -n

此时我的虚拟机中没有会话

java ftps被动模式连接ftp服务器_计算机网络_13


当会话开始后注意看,10.168.10.249为ftp服务器的ip,后面跟的端口号不是20,显然是被动模式的传输。

java ftps被动模式连接ftp服务器_ftp协议_14

那我硬要改为主动模式的传输呢?

首先点击工具选项卡找到Internet选项

java ftps被动模式连接ftp服务器_安装配置ftp服务器_15

点击高级,取消勾

java ftps被动模式连接ftp服务器_计算机网络_16

再次上传文件,执行netstat -n命令

注意看,端口号变成20了,说明用的是主动模式传输。

java ftps被动模式连接ftp服务器_安装配置ftp服务器_17