温故:
在《FTP的两种登录方式》一文中已经对FTP的原理做了简单的介绍,主要讲了授权登录和匿名登录的区别,而且在文章的最后还特意对“匿名FTP”进行了拓展,有兴趣的建议看看。
知新:
今天相对FTP的其他小知识做一个补充,比如FTP 是基于客户———服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接,你知道吗?
FTP 的独特的优势是它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令和响应),这种将命令和数据分开传送的思想大大提高了 FTP 的效率,而其它客户服务器应用程序一般只有一条 TCP 连接,并且数据连接还是全双工的链路,这就意味着数据传输时可以同时进行双向的传输。命令与数据互不干涉,数据双向传输,正是具备这些优势,它才能一直屹立不倒。
既然上面提到了FTP传输数据时建立了两条连接,那么就意味着起码要有两组进程来为之服务。这两组进程分别是属于用户和服务器的控制信息进程和数据进程,两组进程形成了两条连接。控制连接不能完成传输数据的任务,只能用来传送FTP执行的内部命令以及命令的响应等控制信息;数据连接是服务器与客户端之间传输文件的连接,重点是当数据传输完成后,数据连接会撤消,再回到FTP会话状态,直到控制连接被撤消,并退出会话为止,在整个交互的 FTP 会话中,控制连接始终是处于连接状态的,数据连接则在每一次文件传送时先打开后关闭。
FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式)。
Port模式
FTP 客户端首先和服务器的TCP 21端口建立连接,用来发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。FTP server必须和客户端建立一个新的连接用来传送数据。
Passive模式
建立控制通道和Standard模式类似,但建立连接后发送Pasv命令。服务器收到Pasv命令后,打开一个临时端口(端口号大于1023小于65535)并且通知客户端在这个端口上传送数据的请求,客户端连接FTP服务器此端口,然后FTP服务器将通过这个端口传送数据。
很多防火墙在设置的时候都是不允许接受外部发起的连接的,所以许多位于防火墙后或内网的FTP服务器不支持PASV模式,因为客户端无法穿过防火墙打开FTP服务器的高端端口;而许多内网的客户端不能用PORT模式登陆FTP服务器,因为从服务器的TCP 20无法和内部网络的客户端建立一个新的连接,造成无法工作。