文件传输协议(英文:File Transfer Protocol,简称为FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络传输协议的应用层。
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处理,就像MIME或Unicode一样。但是,FTP有着极高的延时,这意味着,从开始请求到第一次接收需求数据之间的时间,会非常长;并且不时的必须执行一些冗长的登陆进程。
概述
FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲状态。而当控制流,空闲很长时间后,客户端的防火墙,会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误。
FTP实现的目标:
- 促进文件的共享(计算机程序或数据)
- 鼓励间接或者隐式的使用远程计算机
- 向用户屏蔽不同主机中各种文件存储系统(File system)的细节
- 可靠和高效的传输数据
缺点:
- 密码和文件内容都使用明文传输,可能产生不希望发生的窃听。
- 因为必须开放一个随机的端口以创建连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量。这个问题,通过使用被动模式的FTP,得到了很大解决。
- 服务器可能会被告知连接一个第三方计算机的保留端口。
- 此方式在需要传输文件数量很多的小文件时,性能不好
FTP虽然可以被终端用户直接使用,但是它是设计成被FTP客户端程序所控制。
运行FTP服务的许多站点都开放匿名服务,在这种设置下,用户不需要帐号就可以登录服务器,默认情况下,匿名用户的用户名是:"anonymous"。这个帐号不需要密码,虽然通常要求输入用户的邮件地址作为认证密码,但这只是一些细节或者此邮件地址根本不被确定,而是依赖于FTP服务器的配置情况。
FTP具有很强的兼容性,可以在不同的操作系统之间通信,可以使用不同的字符集、不同的文件结构以及不同的文件格式。
FTP使用三种传输方式:
流方式:数据作为连续的字节流从FTP交付给TCP
块方式:数据按块从FTP交付给TCP
压缩方式:将数据压缩后进行传送
主动和被动模式
FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。
一个主动模式的FTP连接创建要遵循以下步骤:
- 客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口。
- 客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
- 服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1)。
- 客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。
FTP和网页浏览器
大多数最新的网页浏览器和文件管理器都能和FTP服务器创建连接。这使得在FTP上通过一个接口就可以操控远程文件,如同操控本地文件一样。这个功能通过给定一个FTP的URL实现,形如ftp://<服务器地址>(例如,ftp://ftp.gimp.org )。是否提供密码是可选择的,如果有密码,则形如ftp://<login>:<password>@<ftpserveraddress>。大部分网页浏览器要求使用被动FTP模式,然而并不是所有的FTP服务器都支持被动模式。
架设FTP服务器
一、Windows Server 2008 R2
Windows Server 2008 R2 中自带了FTP Server 7.5,可单独下载安装。
FTP 7.5 for IIS 7.x (x86)
FTP 7.5 for IIS 7.x (x64)
FTP 7.5 新特性:原文地址
与IIS 7.x集成(IIS 7.0、IIS 7.5):FTP 7.5已经作为IIS 7.x的一部分被安装,便于集中管理、维护。
对互联网标准更好、更安全的支持:支持SSL上的FTP、IPv6、UTF8。
共享宿主改进:可以将FTP架设在已经存在的站点,多个FTP使用同一IP。
改进的日志与功能性支持:提供更加详细的日志记录。
可扩展性增强:可以编写自定义的用户验证机制。
下面在VirtualBox虚拟机中架设FTP服务器。宿主机IP:192.168.0.100,虚拟机IP:192.168.0.101,虚拟网卡采用桥连模式。
1.1、打开Server Manager,在角色中点击【添加角色】:
1.2、选中【Web Server(IIS)】,点击【下一步】:
1.3、点击【下一步】:
1.4、在开发服务器上,建议全部选中,在生产服务器上,则酌情选择,点击【下一步】:
1.5、点击【安装】:
1.6、安装成功后关闭向导:
1.7、开始à运行,输入:inetmgr,打开IIS 管理器:
1.8、可以看到FTP 7.5包含的选项:
1.9、新建一个FTP站点:
1.10、输入名称和物理路径,点击【下一步】:
1.11、IP不限制,默认端口21,不需要SSL证书,点击【下一步】:
1.12、设置权限,点击【完成】:
1.13、在浏览器中输入FTP服务器地址,若无法访问请检查宿主机与虚拟机的防火墙设置:
1.14、使用命令行访问FTP
最常用的命令有:
ls 列出远程机的当前目录
cd 在远程机上改变工作目录
lcd 在本地机上改变工作目录
ascii 设置文件传输方式为ASCII模式
binary 设置文件传输方式为二进制模式
close 终止当前的ftp会话
hash 每次传输完数据缓冲区中的数据后就显示一个#号
get(mget) 从远程机传送指定文件到本地机
put(mput) 从本地机传送指定文件到远程机
open 连接远程ftp站点
quit 断开与远程机的连接并退出ftp
? 显示本地帮助信息
输入ftp 主机名/IP登录:
由于设置为允许匿名访问,故可以用匿名账户登录(用户名:anonymous,密码任意):
查看所有目录和文件:
下载一个文件到本地:
输入bye退出登录:
1.15、使用FTP客户端连接FTP服务器
我使用的FileZilla:
可以在WireShark中抓到数据包:
二、Ubuntu 11.04
Linux下有很多FTP软件,这里以Ubuntu下面的Pure-FTPd为例来搭建一下Linux中的FTP Server。
Pure-FTPd是一个基于BSD协议授权的开源FTP Server,官方主页:http://www.pureftpd.org,功能全面,具体功能可以查看文档。
安装Pure-FTPd
由于Ubuntu源里的包太老了,故我选择直接下载源代码编译安装。在http://download.pureftpd.org/pub/pure-ftpd/releases/下载最新稳定版,我下载的是pure-ftpd-1.0.32.tar.gz。
解压缩:tar zxvf pure-ftpd-1.0.32.tar.gz
cd 压缩后的目录
./configure
make
sudo make install
启动FTP Server:
sudo /usr/local/sbin/pure-ftpd &
连接测试:
ftp localhost
查看当前目录下的目录和文件:
在Windows中用命令行连接:
Pure-FTPd有很多命令及参数配置,具体用法请参阅官方文档。
小结:
FTP作为十分常用的文件传输协议,在企业中有着广泛的引用,各平台下也提供了大量的Server、Client。在使用中除了关注传输速度之外,传输安全性也是必须考虑的。
以下引用维基百科中的常用FTP Server、Client,根据需要选用:
FTP服务器列表
维基百科,自由的百科全书
以下是FTP服务器的列表。
[编辑]图形界面
- Bullet Proof FTP Server [1]
- CesarFTP [2]
- Cerberus FTP Server [3]
- Gene6 FTP Server [4]
- GuildFTPd [5]
- PureFTPd [6]
- RaidenFTPD [7]
- Serv-U FTP Server [8]
- War FTP Daemon [9]
[编辑]文字界面
- AnomicFTPD [10]
- BSD ftpd
- glFTPd [11]
- ProFTPd
- vsftpd [12]
- wu-ftpd [13]
FTP客户端列表
维基百科,自由的百科全书
以下是FTP客户端的列表。
[编辑]图形界面
- AnyClient [1]
- Core FTP [2]
- CrossFTP [3]
- CuteFTP
- DeluxeFTP
- FileZilla
- FlashFXP
- FTP Surfer [4]
- FTPRush [5]
- gFTP
- OneButton FTP [6]
- SmartFTP [7]
- Total Commander
- WISE-FTP
- WS FTP [8]
- 8uftp [9]
[编辑]文字界面
- lftp
- NcFTP
- tnftp [10]
- Wget(只能下传)
[编辑]只支持SFTP/SCP
- Sftp for win32 [11]
- WinSCP [12]