第二章应用层
2.3文件传输协议:FTP
HTTP和FTP都是文件传输协议,并且有很多共同点。例如,它们都运行在TCP上。它们的区别是。最显著的是FTP使用两个并行的TCP连接来传送文件,一个是控制连接(controlconnection),一个是数据连接(dataconnection)。控制连接用于在两个主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及‘put’和‘get’文件的命令。数据连接用于实际传输一个文件。
因为FTP协议使用一个分离的控制连接,所以我们也称FTP的控制信息是带外(out-of-band)传送的。HTTP协议是在传输文件的TCP连接中发送请求和响应首部行的。因此,HTTP也可以说是带内(in-band)发送控制信息的。
当用户主机与远程主机开始一个FTP会话前,FTP的客户机首先在21号端口上发起一个用于控制的与服务器的TCP连接。FTP的客户机通过该控制连接发送用户的标识和口令,也发送改变远程目录的命令。当FTP的服务器端从该连接上收到一个文件传输的命令后,就发起一个到客户机的数据连接。FTP在该数据连接上准确地发送一个文件并关闭该连接。如果在同一个会话期间,用户还需要传输另一个文件,FTP则打开另一个数据连接。因而对FTP传输而言,控制连接贯穿了整个用户会话期间,但是针对会话中的每一次文件传输都需要建立一个新的数据连接。
FTP服务器必须在整个会话期间保留用户的状态信息。特别是,服务器必须把特定的用户账户与控制连接联系起来,随着用户在远程目录树上移动,服务器必须追踪用户在远程目录树上的当前位置。对每个活动着的用户会话的状态进行追踪,可以对FTP会话总数进行限制。而HTTP是无状态的,即不对任何用户状态进行追踪。
几个常见的FTP命令和回答:
USERusername:用于向服务器传送用户标识。
PASSpassword:用于向服务器传送用户口令。
LIST:用于请求服务器返回远程主机当前目录的所有文件列表。文件列表是在数据连接上传送的,而不是在控制TCP连接上传送。
RETRfilename:用于从远程主机的当前目录检索(即get)文件。该命令触发远程主机发起一个数据连接,并在该数据连接上发送所请求的文件。
STOPfilename:用于向远程主机的当前目录存放(即put)文件。
在用户发出的命令和FTP协议在控制连接上发送的命令之间,一般有一一对应关系。每个命令都对应着一个从服务器返回到客户机的回答。回答是一个3位数字,后跟一个可选信息。这与HTTP响应报文状态行的状态码和状态信息的结构相同。一些典型的回答以及它们可能的报文如下:
331UsernameOK,Passwordrequired
125Dataconnectionalreadyopen;transferstarting
425Can’topendataconnection
452Errorwritingfile
|
|