欢迎进入windows社区论坛,与200万技术人员互动交流 >>进入
  上次我们主要介绍了http协议,在这篇文章里,我们介绍一个同样有名的网络协议ftp(文件传送协议)。
  
  ftp文件传送协议(file transfer protocol,简称ftp),是一个用于从一台主机到另送文件的协议。该协议的历史可追溯到1971年(当时因特网尚处于实验之中),不过至今仍然极为流行。ftp在rfc 959中具体说明。下图是它提供的服务的概貌。
   
  图1 ftp在本地和远程文件系统之间传输文件
  
  在一个典型的ftp会话中,用户坐在本地主机前,想把文件传送到一台远程主机或把它们从一台远程主机传送来。该用户必须提供一个用户名―口令对才能访问远程账号。给出这些身份认证信息后,它就可以在本地文件系统和远程文件系统之间传送文件了。如图中所示,用户通过一个ftp用户代理与ftp交互。他首先提供一个远程主机的主机名,这使得本地主机中的ftp客户进程建立一个与远程主机中的ftp服务器进程之间的连接。用户接着提供用户名和口令,这些信息将作为ftp命令参数经由tcp连接传送到服务器。服务器批准之后,该用户就在本地文件系统和远程文件系统之间拷贝文件。
  
  http和ftp都是文件传送协议,它们有许多共同的特征,譬如说都运行在tcp之上。不过这两个应用层协议之间存在重要的差别。最重要的差别是ftp使用两个并行的tcp连接来传送文下一节件,一个是控制连接,一个是数据连接。控制连接用于在客户主机和服务器主机之间发送控制信息,例如用户名和口令、改变远程目录的命令、取来或放回文件的命令。数据连接用于真正发送文件。既然tcp使用一个独立的控制连接,我们说ftp在带外(out-of-band)发送控制信息的。另外,用于控制音频和视频等持续媒体数据之传送的rtsp协议也是在带外发送控制信息的。http中,同一个tcp连接既用于承载请求和响应头部,也用于承裁所传送的文件,因此我们说http在带内(in-band)发送控制信息。下一篇文章将讨论的用于电子邮件的主要协议smtp也在带内发送控制信息。图2展示了ftp的控制连接和数据连接。
   
  图2
  
  当用户启动与远程主机间的一个ftp会话时,ftp客户首先发起建立一个与ftp服务器端口号21之间的控制tcp连接,然后经由该控制连接把用户名和口令发送给服务器。客户还经由该控制连接把本地临时分配的数据端口告知服务器,以便服务器发起建立一个从服务器端口号20到客户指定端口之间的数据tcp连接;为便于绕过防火墙,较新的ftp版本允许客户告知服务器改由客户来发起建立到服务器端口号20的数据tcp连接。用户执行的一些命令也由客户经由控制连接发送给服务器,例如改变远程目录的命令。当用户每次请求传送文件时(不论哪个方向),ftp将在服务器端口号20上打开一个数据tcp连接(其发起端既可能是服务器,也可能是客户)。在数据连接上传送完本次请求需传送的文件之后,有可能关闭数据连接,到再有文件传送请求时重新打开。因此在ftp中,控制连接在整个用户会话期间一直打开着,而数据连接则有可能为每次文件传送请求重新打开一次(即数据连接是非持久的)。
  
  在整个会话期间,ftp服务器必须维护关于用户的状态。具体地说,服务器必须把控制连接与特定的用户关联起来,必须随用户在远程目录树中的游动跟踪其当前目录。为每个活跃的用户会话保持这些状态信息极大地限制了ftp能够同时维护的会话数。无状态的http却不必维护任何用户状态信息。
  
  ftp命令和应答
  
  现在讨论几个较为常用的ftp命令。从客户到服务器的命令和从服务器到客户的应答都是以7位ascii码格式经由控制连接传送的,因此跟http请求消息一样.ftp命令也是直观可读的。用于分割相继的命令或应答的是一个回车符和一个换行符。每个命令由4个大写的ascb字符构成,有些命令带有可选的参数。下面给出的是一些较为常见的命令;●user username:用于向服务器发送用户名。
  
  ●pass passwod:用于服务器发送口令。
  
  ●list:用于请求服务器发回当前远程目录下所有文件的一个清单。该清单是通过数据连接而不是控制连接发送过来的。
  
  ●retr filename:用于获取远程主机当前目录下的一个文件,与用户代理中的get命令相对应。
  
  ●stor filename:用于存放远程主机当前目录下的一个文件,与用户代理中的put命令相对应。
  
  从客户经由控制连接发送到服务器的ftp命令和用户向用户代理发出的命令之间一般存在一一对应关系。每个命令之后跟随的是从服务器发送到客户的应答。ftp应答是一个3位数值,可能后跟一个可选的消息。这与http响应消息中的状态码和原因短语在结构上是类似的;http的发明者们有意在http响应消息中引入了这个类似性。下面列出了一些典型的应答以及可能后跟的消息。
  
  ●331 username ok,password required
  
  ●125 data connection already open,tranfer starting
  
  ●425 car't open data connection
  
  ●452 error writing
  
  有兴趣更多地了解fd命令和应答的读者可以阅读rfc 959。
  
  下面是采用leapftp客户端登录一个ftp服务器的对话实录,从中可以看到ftp客户端和服务器端的会话过程。
  
  connecting to xxx.xxx.xxx.xxx, port 21 (#1)
  connected. waiting for response.
  220 microsoft ftp service
  user username
  331 password required for username.
  pass xxxxxx
  230 user 9878cn logged in.
  syst
  215 windows_nt
  pwd
  257 "/mydir" is current directory.
  type a
  200 type set to a.
  port 192,168,xxx,xx,9,198
  200 port command successful.
  list
  150 opening ascii mode data connection for /bin/ls.
  226 transfer complete.
  transfer done: 125 bytes in 0.016 secs (7.81 k/sec)
  quit
posted on 2010-01-05 00:53  康的瑞  阅读(449)  评论(0编辑  收藏  举报