FTP协议是在互联网早期阶段使用的文件传输协议,现在使用逐渐减少,所以需要简单了解一下。
1 FTP(File Transfer Protocol)协议
文件传送协议FTP只提供文件传送的一些基本服务,它使用TCP可靠的传输服务。FTP主要功能是减少或消除在不同操作系统(硬、软件体系都可以不同)之间的文件传输能力。
FTP是基于客户服务器方式。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。
依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器。
连接FTP服务器,遵循FTP协议与服务器传送文件的计算机就是FTP客户端。
FTP服务器进程由两大部分组成:一个主进程,负责接收新的请求;另外有若干个从属进程,负责处理单个请求。
主进程的工作步骤如下:
(1) 打开熟知端口(端口号为21),使客户进程能够连接上。常用的熟知端口号(系统端口号)在传输层协议概述介绍过。
(2) 等待客户进程发出连接请求。
(3) 启动从属进程处理客户进程发来的请求。从属进程的请求处理完毕后即终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。
(4) 回到等待状态,继续接受其他客户进程发来的请求。主进程与从属进程的处理是并行进行的。
下图表示了FTP的工作情况,图中的圆柱表示系统中运行的进程。
在进行文件传输时,FTP的客户和服务器之间要建立两个并行的TCP连接:
(1) 控制连接:以客户服务器方式建立连接。服务器以被动方式打开熟知的端口号21,等待客户的连接。客户则以主动方式打开TCP端口21,来建立连接。控制连接在整个会话期间始终保持打开状态等待客户与服务器之间的通信。该连接用于将命令从客户传给服务器并传回服务器的应答。如用户标识、口令、改变远程目录的命令等。
(2) 数据连接:用于传输文件。服务器端控制进程在接收到FTP客户发来的文件传输请求后,就创建数据传送进程和数据连接,用于连接客户端和服务器端的数据传送进程。在传输完毕后关闭数据传送连接,并结束运行。由于FTP使用了一个分离的控制连接,因此FTP的控制信息是带外(out of band)传送的。
FTP协议使用两个独立的连接的好处是使协议更加简单和更容易实现,同时在传输文件时可以利用控制连接对文件的传输进行控制。如客户可以在文件传输的过程中发送"请求终止传输"。
2 FTP的两种工作方式
FTP支持两种工作模式:PASV(被动模式)和PORT(主动模式)
(1) PORT模式
Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
(2) PASV模式
Passive模式在建立控制通道的时候和PORT模式类似,但建立连接后发送的不是Port命令,而是Pasv命令。FTP服务器收到Pasv命令后,随机打开一个临时端口(也叫自由端口,端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口进行数据的传送,这个时候FTP server不再需要建立一个新的和客户端之间的连接。
更多的信息可以参考这篇博客:FTP文件传输协议两种模式-主动模式和被动模式。
由于FTP使用了两个不同的端口号,所以数据连接和控制连接就不会混乱。
3 FTP的命令和回答
FTP命令由4个大写字母ASCII字符组成,有些还具有可选参数,常见的命令如下(斜体为可选参数):
(1) USER username:用于向服务器传送的用户标识。
(2) PASS password:用于向服务器发送用户口令。
(3) LIST:用于请求服务器回送当前远程目录中的所有文件列表。该文件列表是经一个数据连接传送的,而不是在控制TCP连接上。
(4) RETR filename:用于从远程主机当前目录检索(即get)文件。该命令引起远程主机发起一个数据连接,并经该数据连接发送所请求的文件。
(5) SORT filename:用于在远程主机的当前目录上存放(即put)文件。
(6) PORT n1,n2,n3,n4,n5,n6:客户端的IP地址(n1.n2.n3.n4)和端口(n5×256 + n6)。
例如,PORT 140,252,13,34,4,150,其前4个数就是客户的点分十进制IP地址,即140.252.13.34。后两位指明16bit端口号,(4,150)所表示二进制为(00000100 10010110)——> 4 × 256 + 150 = 1174
贯穿控制连接,在用户发出命令和FTP发送的命令之间通常是一一对应关系。每个命令都对应一个从服务器向客户的回答。回答是一个3位数字,后跟一个可选信息。常见的回答如下:
(1) 331:Username OK,Password required(用户名OK,需要口令)。
(2) 125:Data connection already open;transfer starting(数据连接已打开,开始传送)。
(3) 425:Can't open data connection(无法打开数据连接)。
(4) 452:Error writing file(写文件差错)。
4 匿名FTP
使用FTP时必须首先登录,在远程主机上获得相应的权限以后,方可上传或下载文件。也就是说,要想同哪一台计算机传送文件,就必须具有哪一台计算机的适当授权。换言之,除非有用户ID和口令,否则便无法传送文件。这种情况违背了Internet的开放性,Internet上的FTP主机何止千万,不可能要求每个用户在每一台主机上都拥有帐号。匿名FTP就是为解决这个问题而产生的。
互联网中有很大一部分FTP服务器被称为“匿名”(Anonymous)FTP服务器。这类服务器的目的是向公众提供文件拷贝服务!
器,不要求用户事先在该服务器进行登录注册,也不用取得FTP服务器的授权。
Anonymous(匿名文件传输)能够使用户与远程主机建立连接并以匿名身份从远程主机拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“anonymous”登录FTP服务,就可以访问远程主机上公开的文件。
5 TFTP
简单文件传送协议TFTP(Trivial File Transfer Protocol),它是一个很小且很容易实现的文件传送协议。TFTP也使用客户服务器方式,但是它使用UDP数据报。
TFTP的优点:
(1) 适用于UDP环境。例如当需要将程序或文件同时向许多机器下载时就往往使用TFTP。
(2) TFTP代码所占的内存比较小。