FTP协议详解

FTP协议详解

简介

FTP(File Transfer Protocol)是应用层的一个文件传输协议。其主要做用是在服务器和客户端之间实现文件的传输和共享。FTP协议运行在TCP链接上,保证了文件传输的可靠性(运行在UDP协议上的是TFTP协议)安全

与Http协议区别

Http和FTP都是文件传输协议,都是运行在tcp上面,可是他们也有一些重要的区别,FTP使用了两个并行的tcp来传输文件:一个是控制链接(port:21),一个是数据链接(port:20),控制链接用于在两个主机之间传输控制信息,如口令,用户标识,存放、获取文件等命令。数据链接用于实际发送一个文件,发送完文件以后数据链接后会关闭。由于ftp协议使用一个独立的控制链接,因此,也称ftp的控制信息是带外(out-of-band)传送的。而Http协议是在传输文件的同一个tcp链接中发送请求和相应首部行的。所以,Http也能够说是带内(in-band)发送控制信息。服务器

FTP的两种传输方式

FTP支持两种方式的传输:文本(ASCII)方式和二进制(Binary)方式。一般文本文件的传输采用ASCII方式,而图象、声音文件、加密和压缩文件等非文本文件采用二进制方式传输,若是为了从一个系统上传输文件而使用了与本地系统不一样的计算机字节位数,那么就必须使用Tenex模式。FTP以ASCII方式做为默认的文件传输方式。网络

FTP的两种传输模式

FTP有两种传输模式:主动(FTP Port)模式和被动(FTP Passive)模式。因为主动模式存在着安全问题,最近几年,大部分的TFP客户端开始默认使用被动模式。tcp

主动模式(Port)

主动模式的核心是TFP客户端告诉服务端本身开发那个端口做为数据端口,而后让服务端来链接本身。
主动模式的链接创建通常是经过一些几个步骤:性能

  1. 客户端随机打开一个本地大于1024的端口P1
  2. 客户端经过端口P1向服务器控制端口(端口21)发起链接请求
  3. 服务器进行认证成功,请求创建
  4. 客户端对本地端口P2进行监听并向服务器发送“Port P1+1”告诉服务器,客户端的数据监听端口。
  5. 服务器收到端口后,从本身的数据端口(端口20)发起链接,链接到客户端指定的数据端口P1+1.

被动方式(Passive)

因为主动方式中,服务端须要主动连客户端,对于客户端的防火墙来讲,属于外部链接内部,会出现被阻塞的状况。被动方式解决了这个问题。被动链接的核心是控制链接请求和数据链接请求都是由客户端发起。被动方式的步骤以下:ui

  1. 客户端任意打开大约1024的两个本地端口(P1和P1+1)
  2. P1端口发送请求链接服务器的21端口(控制链接端口)同时提交PASV命令。
  3. 服务器收到请求后,会开启任意一个大约1024的端口P2,而后返回以下格式内容:
    227 entering passive mode(h1,h2,h3,h4,p1,p2)
  4. 客户端收到服务端返回的内容后,计算出服务端开放的数据链接端口
  5. 客户端经过P1+1端口向服务端的发送链接请求。进行数据传输。

关于服务端返回的报文格式(h1,h2,h3,h4,p1,p2)具体含义以下:加密

  • h1,h2,h3,h4表明服务器的ip地址;
  • p1,p2表明服务器监听的数据链接端口地址。计算方法为P1*256+P2

FTP的限制

对于FTP服务器来说,他必须在整个会话期间保持用户的状态(state),特别是,服务器必须把特定的用户帐户与控制联系起来,用户在远程目录树上不断跳转时,服务器必须追踪到用户在远程树上的当前位置,换句话说,当客户端用户数量不断增多,FTP服务器所要维持的会话总数,也会迅速增加。着会大大限制FTP服务器的性能。计算机网络

FTP中的命令与应答

命令

FTP协议的命令是承认读的,每一个命令由4个大写的ASCII字符组成,有些还可带一些可选参数,命令后面跟回车符换行。
一下问几个经常使用的命令:ip

命令 解释
USER username 用于向服务器传输用户标识
PASS password 用于向服务器发送用户口令
LIST 请求服务器全部文件列表,文件列表是在(新建且非持续链接)数据链接上传递
RETR filename 用于从远程主机当前目录检索(get)文件。该命令引发远程主机发起一个数据链接,并经数据链接发送所请求的文件。
STOR filename 用于在远程主机的当前目录上存放(put)文件

应答

FTP客户端每一个发出的命令都会对应一个FTP服务器发出的应答。应带是一个3为的数字,后跟一个可选信息。他与http响应报文的状态码和状态信息的结构相同,比较常见的几个应带能够参考以下:开发

应答 解释
331 Username OK, Password required 用户名OK,请输入密码
125 Data connection already open;transfer starting 数据链接已经打开,开始传送
425 Can't open data connection 没法打开数据链接
452 Error writing file 文件写入出错

以上的FTP命令和应答比较简单,若是想详细了解相关的命令和应答,能够查阅RFC959 相关文档

参考资料: 《计算机网络自顶向下方法》 《TCP/IP协议详解》

相关文章
相关标签/搜索