本文参考了维基百科中ftp的条目。
FTP server
早期的FTP server都是命令行形式的。后来发展出了图形化ftp工具。常用的有CuteFTP, Filezilla等。
很多linux,solaris都自带ftp工具。
FTP的两个连接
FTP(file transfer protocol) 位于OSI模型的应用程序层,用于传输文件,它是基于TCP/TP的。
因此,一个FTP server必须持续运行,并等待来着客户端的请求。建立连接后,客户端可以通过21端口和服务器通信。这个连接被称为“控制连接”(controller connection),该端口在整个会话过程中保持打开。第二个连接,被称为“数据连接”(data connection), 可以是服务器主动打开的20端口(active mode),也可以是一个随机的端口(passive mode)。该连接用于传输数据。
控制连接用于管理会话,例如各种命令,身份验证以及密码在服务器和客户端之间的交换(且基于一种类似telnet的协议)。由于这种双端口的结构,ftp被认为是out-of-band 协议,与http这样的in-band 协议相反。
FTP的两中工作模式
ftp有两种模式,分别为active模式和passive模式。这两种模式都是由ftp client初始化的(决定的),之后由ftp server将使用它们。
主动模式
在主动模式中,data connection永远使用20端口。一般ftp的默认工作方式就是主动模式。
被动模式
在被动模式中,ftp客户端会使用一个Ephemeral Port,
此时,客户端会侦听它的ephemeral port + 1,同时通过21端口将port + 1发送给ftp服务器。
例如,如果当前正在使用的ephemeral port是1026, 客户端开始侦听1027端口。一旦完成,ftp server就会建立一个到ftp client 1027端口的连接。
passive模式的意义就在于数据传输使用的端口一直在变化,这样可以绕开一些防火墙。例如防火墙仅放开了21,8080等几个端口(没有打开20端口),被动模式就可以自动找到可用端口并使用。
另外提一点,所谓的Out-of-band就是说控制数据和真正的数据传输是分离的。ftp这样的协议就是使用的out-of-band控制。
匿名连接
很多ftp server都提供匿名连接,用户可以直接使用匿名方式连接上ftp server,当然权限有限。很多时候这种功能是为了软件自动更新。
安全ftp协议
如果我没有记错,ftp传输是明文的。
因此出于安装因素,衍生出了多种安全的ftp协议。主要有:FTPS,SFTP, FTP over SSH 三种。大家自己看wiki吧。
浏览器支持
常用浏览器都支持ftp协议,我们可以使用浏览器查看ftp server上的文件,但一般不支持其他功能如,上传,删除等。对于firefox来说,提供了一个插件fireftp,可以让firefox和ftp客户端一样支持多种操作。
同时浏览器未必支持扩展的ftp协议如ftps等。也就是说如果ftp站点使用的是ftps协议的话,你的浏览器也许就无法访问ftp站点了。