一、什么是FTP
FTP(File Transfer Protocol)是一个非常古老并且应用十分广泛的文件传输协议,FTP协议是现今使用最为广泛的网络文件共享协议之一,我们现在也一直有在用着FTP协议来进行各种文件的传输,FTP为我们提供了一种可靠的方式在网络上进行文件的共享。
二、FTP原理
FTP是C/S架构的服务,拥有一个服务器端和一个客户端,FTP底层通过TCP协议来作为传输协议,所以FTP协议是一种可靠的文件传输方式,FTP提供了两个端口号,20和21号端口,20号是数据接口,提供数据之间的传输,21号是命令接口,提供命令之间的传输。
FTP服务端与客户端连接一般有两种模式:主动模式(Active Mode)和被动模式(Passive Mode)
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送FTP用户名和密码,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令,告诉服务端客户端采用主动模式并开放了端口。FTP服务器接收到PORT命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。如图:
(主动模式)
在被动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送用户名和密码进行登陆,同时会开启N+1端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P(端口P的范围是可以设置的,后面会说到这个是很重要的)进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。如图:
(被动模式)
三、FTP状态码
1xx – 肯定的初步答复
这些状态代码指示一项操作已经成功开始,但客户端希望在继续操作新命令前得到另一个答复。
- 110 重新启动标记答复。
- 120 服务已就绪,在 nnn 分钟后开始。
- 125 数据连接已打开,正在开始传输。
- 150 文件状态正常,准备打开数据连接。
2xx – 肯定的完成答复
一项操作已经成功完成。客户端可以执行新命令。
- 200 命令确定。
- 202 未执行命令,站点上的命令过多。
- 211 系统状态,或系统帮助答复。
- 212 目录状态。
- 213 文件状态。
- 214 帮助消息。
- 215 NAME 系统类型,其中,NAME 是 Assigned Numbers 文档中所列的正式系统名称。
- 220 服务就绪,可以执行新用户的请求。
- 221 服务关闭控制连接。如果适当,请注销。
- 225 数据连接打开,没有进行中的传输。
- 226 关闭数据连接。请求的文件操作已成功(例如,传输文件或放弃文件)。
- 227 进入被动模式 (h1,h2,h3,h4,p1,p2)。
- 230 用户已登录,继续进行。
- 250 请求的文件操作正确,已完成。
- 257 已创建“PATHNAME”。
3xx – 肯定的中间答复
该命令已成功,但服务器需要更多来自客户端的信息以完成对请求的处理。
- 331 用户名正确,需要密码。
- 332 需要登录帐户。
- 350 请求的文件操作正在等待进一步的信息。
4xx – 瞬态否定的完成答复
该命令不成功,但错误是暂时的。如果客户端重试命令,可能会执行成功。
- 421 服务不可用,正在关闭控制连接。如果服务确定它必须关闭,将向任何命令发送这一应答。
- 425 无法打开数据连接。
- 426 Connection closed; transfer aborted.
- 450 未执行请求的文件操作。文件不可用(例如,文件繁忙)。
- 451 请求的操作异常终止:正在处理本地错误。
- 452 未执行请求的操作。系统存储空间不够。
5xx – 永久性否定的完成答复
该命令不成功,错误是永久性的。如果客户端重试命令,将再次出现同样的错误。
- 500 语法错误,命令无法识别。这可能包括诸如命令行太长之类的错误。
- 501 在参数中有语法错误。
- 502 未执行命令。
- 503 错误的命令序列。
- 504 未执行该参数的命令。
- 530 未登录。
- 532 存储文件需要帐户。
- 550 未执行请求的操作。文件不可用(例如,未找到文件,没有访问权限)。
- 551 请求的操作异常终止:未知的页面类型。
- 552 请求的文件操作异常终止:超出存储分配(对于当前目录或数据集)。
- 553 未执行请求的操作。不允许的文件名。
常见的 FTP 状态代码及其原因
- 150 – FTP 使用两个端口:21 用于发送命令,20 用于发送数据。状态代码 150 表示服务器准备在端口 20 上打开新连接,发送一些数据。
- 226 – 命令在端口 20 上打开数据连接以执行操作,如传输文件。该操作成功完成,数据连接已关闭。
- 230 – 客户端发送正确的密码后,显示该状态代码。它表示用户已成功登录。
- 331 – 客户端发送用户名后,显示该状态代码。无论所提供的用户名是否为系统中的有效帐户,都将显示该状态代码。
- 426 – 命令打开数据连接以执行操作,但该操作已被取消,数据连接已关闭。
- 530 – 该状态代码表示用户无法登录,因为用户名和密码组合无效。如果使用某个用户帐户登录,可能键入错误的用户名或密码,也可能选择只允许匿名访问。如果使用匿名帐户登录,IIS 的配置可能拒绝匿名访问。
- 550 – 命令未被执行,因为指定的文件不可用。例如,要 GET 的文件并不存在,或试图将文件 PUT 到您没有写入权限的目录。
四、FTP客户端
ftp命令程序:是最简单的FTP客户端工具,Windows和Linux都拥有ftp命令程序,可以连接到FTP服务器进行交互式的上传、下载通信。
图形化FTP客户端工具:Windows中较常用的包括CuteFTP、FlashFXP、LeapFTP、Filezilla等,在图形化的客户端程序中,用户通过鼠标和菜单即可访问、管理FTP资源,而不需要掌握FTP交互命令,更易于使用。
下载工具:FlashGet、Wget等,包括大多数网页浏览器程序,都支持通过FTP协议下载文件,但因不具备FTP上传管理功能,通常不称为FTP客户端工具。
本案例采用的FTP客户端工具:Filezilla、LFTP(yum安装)。
官方网站:https://filezilla-project.org/download.php?show_all=1