文件传输协议(FTP,File Transfer Protocol)是Internet上使用最广泛的文件传送协议。FTP提供交互式的访问,允许客户指明文件的类型与格式,并允许文件具有存取权限。它屏蔽了各计算机系统的细节,因而能适合于在异构网络中任意计算机之间传送文件。
FTP采用C/S工作模式,一个FTP服务器进程(由一个负责接收新请求的主进程和若干个负责处理单个请求的从属进程组成)可以同时为多个客户进程提供服务。
FTP使用了两个并行的TCP连接来传输文件:
控制连接(control connection)用于在两主机之间传输控制信息,如用户标识、口令、改变远程目录以及存放文件(put)、获取文件(get)的命令。因为FTP协议使用一个独立的控制连接,所以我们也称FTP的控制信息是带外(out-of-band)传送的,HTTP则是带内(in-band)发送控制信息的。
数据连接(data connection)用于实际发送一个文件。HTTP协议是在传输文件的同一个TCP连接中发送请求和响应首部行的。
当用户主机与远程主机开始一个FTP会话时
(1)FTP的客户端首先向服务器端的默认21端口发起控制连接并发送登录账户、密码。服务器启动从属进程(与主进程并发执行,对客户进程的请求处理完毕后即终止)来处理客户进程发送来的请求。
(2)服务器返回登录成功信息后,客户端打开一个随机端口,并将该端口号发送给服务器。
(3)当FTP的服务器端从控制连接上收到一个文件传输的命令后(无论是发往还是来自远程主机),就用默认20端口发起一个到客户端的随机打开的端口的TCP数据连接。
(4)FTP在该数据连接上准确地传送一个文件,然后关闭该连接。
在同一个会话期间,如果用户还需要传输另一个文件,FTP则打开另一个数据连接。
因而对FTP传输而言,控制连接贯穿了整个用户会话期间,但是对会话中的每一次文件传输都需要建立一个新的数据连接(即数据连接是非持续的)。
FTP服务器必须在整个会话期间保留用户的状态,特别是必须把用户账户与控制连接联系起来,服务器必须追踪用户在远程目录树上的当前位置,对每个进行中的用户会话的状态信息进行追踪,这大大限制了FTP同时维持的会话总数。
从客户到服务器的命令和从服务器到客户的回答,都是以7比特ASCII格式在控制连接上传送的,每个命令由4个大写字母ASCII字符组成,有些还具有可选参数:
(1)USER usemame: 用于向服务器传送用户标识。匿名FTP访问通常使用anonymous作为用户名。
(2)PASS password : 用于向服务器发送用户口令。
(3)LIST: 用于请求服务器回送当前远程目录中的所有文件列表。该文件列表不在控制连接上传送,而是经一个新建的非持续数据连接传送。
(4)RETR filename: 用于从远程主机的当前目录get文件。远程主机发起一个数据连接,并经该数据连接发送所请求的文件。
(5)STOR filename : 用于在远程主机的当前目录上put文件。
回答是一个3位的数字,后跟一个可选信息:
331 Usemame OK, Password required
125 Data connection already open; transfer starting
425 Can't open data connection
452 Error writing file