FTP(文件传输协议)入门

  1、FTP服务器(vsftpd - Very Secure FTP Daemon

  1)安装:sudo apt-get install vsftpd(Ubuntu)。

  2)运行:安装完成后该服务会在后台运行。vsftpd在启动时读取配置文件/etc/vsftpd.conf(默认)。以下是vsftpd.conf的一些常用选项,更多说明可参考其man page:

# 该服务以独立进程方式运行(YES),还是由“超级服务器”(inetd或xinetd)启动
listen=YES
# 是否允许匿名FTP。匿名FTP的用户名为anonymous或ftp,密码为空
anonymous_enable=NO
# 是否允许本地用户登录
enable=YES

  3)FTP应答:

  应答的3位码中每一位数字都有不同的含义,如2yz表示“肯定完成应答。一个新命令可以发送”、x0z表示“语法错误”等。具体可参照《TCP/IP详解 卷1:协议》图27-3。以下是一些常用的应答和一个示例:

  125:数据连接已经打开,传输开始;200:就绪命令;331:用户名就绪,要求输入密码;425:不能打开数据连接;500:语法错误(未认可的命令);501:语法错误(无效参数)。

  

 

  2、FTP客户端

  1)启动:ftp host [port],并输入用户名和密码。

  2)常用选项:-4:只使用IPv4;-6:只使用IPv6;-e:关闭命令编辑和历史功能;-v:输出详尽信息;-d:开启调试功能。

  3)常用的用户命令:除了和Linux类似的ls、pwd、cd、chmod、rename等命令外,还支持以下常用命令:

  open host [port]:在未连接状态下,建立一个到指定FTP服务器的连接。

  get remote-file [local-file]:获取(下载)远程主机的remote-file,将它存储在本地。

  put local-file [remote-file]:将本地的local-file上传到远程主机(需要在vsftpd.conf中设置write_enable=YES)

  close:关闭与远程服务器的FTP会话。此时还会显示"ftp>"提示符,但状态是未连接的。

  mode [mode-name]:设置传输方式为mode-name,默认值是stream(只支持stream)。文件以字节流的形式传输。对于文件结构,发方在文件尾提示关闭数据连接。

  type [type-name]:设置文件类型为type-name,默认值是network ASCII(只支持ascii、binary)。对于ASCII码文件类型,文本文件以NVT ASCII码形式在数据连接中传输。其中,用NVT ASCII码传输的每行都带有一个回车,而后是一个换行。这意味着收方必须扫描每个字节,查找CR、LF对;对于二进制文件类型(也称为图像文件类型),数据发送呈现为一个连续的比特流。

  form [format]:设置格式控制选项,默认值是non-print(只支持non-print)。non-print格式:文件中不含有垂直格式信息。

  struct [struct-name]:设置结构为struct-name,默认值是file(只支持file)。file结构:文件被认为是一个连续的字节流。不存在内部的文件结构。

  status:显示FTP的状态(Mode、Type、Form、Structure等)。

  size file-name:返回远程主机上file-name的大小。

  4)FTP命令(一个用户命令会被解析成一个或多个FTP命令)。它们都是3或4个字节的大写ASCII码字符,其中一些带选项参数。如:

  LIST filelist:列表显示文件或目录;PASS password:服务器上的密码;PORT n1, n2, n3, n4, n5, n6:客户端IP地址(n1.n2.n3.n4)和端口(n5 * 256 + n6);RETR filename:检索(取)一个文件;STOR filename:存储(放)一个文件;TYPE type:说明文件类型。A表示ASCII码,I表示二进制;USER username:服务器上的用户名。

 

  3、FTP客户端与服务器之间的连接管理

  1)FTP使用两个TCP连接来传输一个文件。

  (1)控制连接:服务器以被动方式打开21端口,等待客户的连接。控制连接始终等待客户与服务器之间的通信。FTP命令和应答在控制连接上以NVT ASCII码的形式传送,即每行(每个命令或应答)结尾都返回CR、LF对。

  以下为用户输入pwd命令时,FTP命令和应答对应的数据包:

  

  IP对控制连接的服务类型:最大限度地减小时延。

  (2)数据连接:用于在客户与服务器之间传输文件等。服务器的数据连接端使用端口20。

  IP对数据连接的服务类型:最大限度提高吞吐量。

  2)数据连接的三大用途:

  (1)从客户向服务器发送一个文件。

  (2)从服务器向客户发送一个文件。

  (3)从服务器向客户发送文件或目录列表。

  在stream传输方式下,因为文件结尾是以关闭数据连接为标志,所以对每一个文件传输或目录列表来说都要建立一个全新的数据连接。过程一般如下:

  客户发出命令要求建立数据连接 -> 客户端为所在数据连接端选择一个临时端口号,并从该端口发布一个被动打开 -> 客户使用PORT命令从控制连接上把临时端口号发给服务器 -> 服务器收到客户端端口号后,向该端口发布一个主动打开(通常它也负责主动关闭)。

 

  参考资料:

  《TCP/IP详解 卷1:协议》

 

 

 

 

 

 

不断学习中。。。

posted on 2015-04-07 15:03  han'er  阅读(3217)  评论(0编辑  收藏  举报

导航