FTP(File Transfer Protocol)是应用层的一个文件传输协议。其主要做用是在服务器和客户端之间实现文件的传输和共享。FTP协议运行在TCP链接上,保证了文件传输的可靠性(运行在UDP协议上的是TFTP协议)安全
Http和FTP都是文件传输协议,都是运行在tcp上面,可是他们也有一些重要的区别,FTP使用了两个并行的tcp来传输文件:一个是控制链接(port:21),一个是数据链接(port:20),控制链接用于在两个主机之间传输控制信息,如口令,用户标识,存放、获取文件等命令。数据链接用于实际发送一个文件,发送完文件以后数据链接后会关闭。由于ftp协议使用一个独立的控制链接,因此,也称ftp的控制信息是带外(out-of-band)传送的。而Http协议是在传输文件的同一个tcp链接中发送请求和相应首部行的。所以,Http也能够说是带内(in-band)发送控制信息。服务器
FTP支持两种方式的传输:文本(ASCII)方式和二进制(Binary)方式。一般文本文件的传输采用ASCII方式,而图象、声音文件、加密和压缩文件等非文本文件采用二进制方式传输,若是为了从一个系统上传输文件而使用了与本地系统不一样的计算机字节位数,那么就必须使用Tenex模式。FTP以ASCII方式做为默认的文件传输方式。网络
FTP有两种传输模式:主动(FTP Port)模式和被动(FTP Passive)模式。因为主动模式存在着安全问题,最近几年,大部分的TFP客户端开始默认使用被动模式。tcp
主动模式的核心是TFP客户端告诉服务端本身开发那个端口做为数据端口,而后让服务端来链接本身。
主动模式的链接创建通常是经过一些几个步骤:性能
因为主动方式中,服务端须要主动连客户端,对于客户端的防火墙来讲,属于外部链接内部,会出现被阻塞的状况。被动方式解决了这个问题。被动链接的核心是控制链接请求和数据链接请求都是由客户端发起。被动方式的步骤以下:ui
关于服务端返回的报文格式(h1,h2,h3,h4,p1,p2)具体含义以下:加密
对于FTP服务器来说,他必须在整个会话期间保持用户的状态(state),特别是,服务器必须把特定的用户帐户与控制联系起来,用户在远程目录树上不断跳转时,服务器必须追踪到用户在远程树上的当前位置,换句话说,当客户端用户数量不断增多,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协议详解》