最近在项目中需要测试FTP功能的连接,大概了解了下什么是FTP
FTP
FTP
File Transfer Protocol,文件传输协议,用于在网络上进行文件传输的协议,它工作在应用层,使用TCP传输而不是UDP
为什么使用TCP而不是UDP?通过TCP的可靠性连接,为数据传输提供可靠保证
FTP协议的通信双方,一方称为FTP Client,另一方为FTP Server,它们在传输文件前,首先要建立连接,建立连接就必须要知道IP地址和端口号。与一般的C/S应用有所不同,一般的C/S只会使用一个端口号建立socket连接,这个socket连接既要处理客户端和服务器的命令信息,又要处理数据信息。而FTP协议中是把命令和数据分开传送,提高效率
既然FTP要把命令和数据分开传送,就需要两条连路,客户端和服务器各自需要两个socket,各自需要两个端口
FTP需要两个端口,一个用来发送命令,一个用来传输数据
命令端口
负责发送FTP命令和接收响应信息,FTP命令有“登录”、“改变目录”、“删除文件”等
数据端口
负责数据传输,比如显示目录、上传、下载文件等
FTP有两种工作模式,一种主动模式,一种被动模式
主动模式
Standard,又称为PORT模式,是由服务器主动发起数据传输通道的连接请求
Client和Server使用主动模式时
- Server端创建两个socket监听在端口20和21上,20是数据端口,21是命令端口
- Client端创建socket监听在一个随机端口N上(N > 1024),N是一个命令端口,用这个socket发起连接,连接Server的命令端口21,同时Client创建另一个socket监听在端口N+1,这是一个数据端口
- Client命令通道的连接建立后,会告知Server端Client的数据端口是N+1
- Server端会通过数据端口20主动连接Client的数据端口N+1
被动模式
Passive,又称为PASV模式,是由客户端主动发起数据传输通道的连接请求
Client和Server使用被动模式时
- Client端创建两个socket监听在两个随机端口N和N+1(N > 1024),N是命令端口,N+1是数据端口
- Client端通过命令端口连接Server的命令端口21,提交PASV命令给Server
- Server收到命令后,创建一个socket并监听在数据端口P(P > 1024),同时通过命令通道告知Client端Server的数据端口是P
- Client收到后,通过数据端口N+1主动连接Server的数据端口P
总结
- 客户端和服务器要么同时使用主动模式,要么同时使用被动模式
- 主动模式和被动模式的判断是基于服务器是否发起数据端口连接请求
- 主动模式与被动模式的区别:
工具
不管是FTP Server还是FTP Client,都有很多现成的工具,省去了自己编写脚本的烦恼
WinSCP
Windows系统下的FTP Client工具,支持被动模式
如何设置
注意
-
连接FTP前,需要确保双方能ping通
-
不论是命令端口的连接还是数据端口的连接,它们都是TCP连接,有的FTP Client主机或者Server主机的防火墙不允许外部的TCP连接请求(拒收SYN包),所以如果FTP不能连接成功,需要检查双方的防火墙