FTP简介
- FTP:(File Transfer Protocol ),全称文件传输协议,早期的三大应用级协议之一
- 他也基于TCP协议来工作,属于应用层协议
- 文件传输协议的原始规范于1971年4月16日发布为RFC 114
- 直到1980年,FTP运行在TCP/ IP的前身NCP上
- 该协议后来被TCP / IP版本,RFC 765(1980年6月)和RFC 959(1985年10月)(当前规范)所取代
- RFC 959提出了若干标准修改,例如RFC 1579(1994年2月)启用防火墙FTP(被动模式),RFC 2228(1997年6月)提出安全扩展,RFC 2428(1998年9月)增加了对IPv6的支持,并定义了一种新型的被动模式
- FTP服务一般运行在20和21两个端口
- 端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口
- 当数据通过数据流传输时,控制流处于空闲状态
- 而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当大量数据通过防火墙时,会产生一些问题
- 此时,虽然文件可以成功的传输,但因为控制会话,会被防火墙断开;传输会产生一些错误
FTP服务
- FTP有两种使用模式:主动和被动
- 主动模式要求客户端和服务器端同时打开并且监听一个端口以创建连接。在这种情况下,客户端由于安装了防火墙会产生一些问题
- 所以,创立了被动模式,被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题
- 一个主动模式的FTP连接创建要遵循以下步骤:
- 客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口,此时该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口
- 客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据,这个端口就是我们所知的数据端口
- 服务器打开20号源端口并且创建和客户端数据端口的连接、此时,来源地的端口为20,远程数据(目的地)端口为(x+1)
- 客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接
- 双通道协议:数据和命令连接
- 数据传输格式:二进制(默认)和文本
- 两种模式:服务器角度
- 主动 (PORT style) :服务器主动连接
- 命令(控制):客户端:随机 port ---> 服务器: tcp21
- 数据:客户端:随机 port+1 <--- 服务器: tcp20
- 被动 (PASV style) :客户端主动连接
- 命令(控制):客户端:随机 port ---> 服务器: tcp21
- 数据:客户端:随机 port+1 --->服务器:随机 port
- 服务器被动模式数据端口示例:
- 227 Entering Passive Mode (192,168,175,138,224,59)
- 服务器数据端口为: 224*256+59
- FTP优点
- 促进文件的共享(计算机程序或数据)
- 鼓励间接或者隐式的使用远程计算机
- 向用户屏蔽不同主机中各种文件存储系统(File system)的细节
- 可靠和高效的传输数据
- FTP缺点
- 密码和文件内容都使用明文传输,可能发生窃听。
- 因为必须开放一个随机的端口以创建连接,当防火墙存在时,客户端很难过滤处于主动模式下的FTP流量,这个问题,通过使用被动模式的FTP,得到了很大解决。
- 服务器可能会被告知连接一个第三方计算机的保留端口。
- 此方式在需要传输文件数量很多的小文件时,性能不好
- 状态码:
- 1XX :信息 125 :数据连接打开
- 2XX :成功类状态 200 :命令 OK 230 :登录成功
- 3XX :补充类 331 :用户名 OK
- 4XX :客户端错误 425 :不能打开数据连接
- 5XX :服务器错误 530 :不能登录
FTP 软件介绍
- FTP 服务器软件:
- Wu-ftpd , Proftpd , Pureftpd , ServU , IIS
- vsftpd:Very Secure FTP Daemon , CentOS 默认 FTP 服务器
- 高速,稳定,下载速度是 WU-FTP 的两倍
- ftp,redhat.com 数据 : 单机最多可支持 15000 个并发
- FTP 客户端软件:
- ftp , lftp , lftpget , wget , curl
- ftp -A ftpserver port -A 主动模式 –p 被动模式
- lftp –u username ftpserver
- lftp username@ftpserver
- lftpget ftp://ftpserver/pub/file
- gftp: GUI centos5 最新版 2.0.19 (11/30/2008)
- filezilla , CuteFtp , FlashFXP , LeapFtp ,等等FTP客户端软件