(1)ASCII传输方式,即假定用户正在拷贝的文件包含简单的ASCII码文本,通常传输时会自动调整格式
(2)二进制传输模式,即逐位传输FTP 的工作模式有两种:
(1)PORT主动模式,意为服务端主动从20端口连接客户端告知的端口
(2)PASV被动模式,意为服务端 告知 客户端 地址和端口后,等待客户端连接
(3)对比:主动模式需要客户端必须开放端口给服务器,服务器要可以连上客户端,这就要求客户端为公网 IP(经过 NAT 后地址就变化了)且防火墙打开。而实际情况下,公网 IP 比较少而且很多客户端都是在防火墙内,由路由器交换机进行着 NAT,还要协调开放端口。被动模式只需要服务器端开放端口给客户端连接就行了,而服务器为了便于访问,一般会放在公网,所以被动模式使用较多。主动被动模式选择权在客户端,此处比较奇怪,为什么服务器会告知客户端地址,直接让客户端使用访问服务器时的地址不可以吗?我的思考是,机器一般无法取得自己外网的地址,而且 FTP 协议中确有要求,要传输地址:,,(图为 FileZilla 中被动模式传输文件),这里可能就会好奇了,前面的地址好理解,后面的两个数字是什么意思。通过这篇文章得知,端口号为
数字1 * 256 + 数字2
,Wireshark 中的截图也印证了这一点:,,(图为 Wireshark 中捕获的传输接口),我们使用的 Docker 镜像为 fauria/vsftpd。,-v 意为将容器中的路径映射到本地文件系统(“冒号”前为 本地文件系统路径,“冒号”后为 容器中的文件系统路径)。-p 意为将容器的端口号映射到本地,可以看到映射了一个范围的地址,这些端口是被动模式下开放给客户端的,要与后面的 PASV_MIN_PORT (被动模式最小端口) 和 PASV_MAX_PORT (被动模式最大端口) 相对应。
–name 用于指定容器名称。
–restart 意为当 Docker 进程重启时,立刻启动该容器。,我们自己部署服务器时,应当尽量避免使用默认端口,以减少被黑客攻击的风险。故此处使用 60020 和 60021,以及 61100 至 61105 端口,此外需要注意的是,PASV_ADDRESS 需要配置为服务器对应的外网地址。否则无法连接:,,(图为 质感文件 中连接时的情况),然鹅在 FileZilla 客户端测试中发现,即使 配置为 127.0.0.1,某些客户端亦可以正常连接,猜测是因为客户端中存在类似的设置:,,(图为 FileZilla 客户端的设置),由于 FTP 中的文件较为隐私,在这里就不展示配置成功后的效果了,实际使用起来还是很方便滴。,再次推荐下 质感文件 这个 APP 吧,界面 Material Design 风格,好看好用。支持 FTP 服务器,SFTP 服务器, SMB 服务器,还可作为 FTP 服务器使用。,fauria/vsftpd,227 Entering Passive Mode 含义