1、什么是FTP协议?

FTP 是File Transfer Protocol(文件传输协议)。用于ftp客户端和ftp服务器之间进行文本、文件传输的协议。与http的短连接不同,FTP协议是一种基于socket的长连接。

2、FTP协议的原理

FTP协议实际上是工作在TCP/IP协议族的应用层,其传输层协议是TCP协议。可以知道,他的文件传输是可靠的。

FTP的工作流程大致分为四步:

  1. 启动FTP。ftp的客户端启动一个socket连接到服务器。
  2. 建立控制连接。客户端和服务器通过三次握手过程(21端口),建立连接,用于传输ftp协议的命令。
  3. 建立数据连接。客户端和服务器建立数据连接(分为主动模式和被动模式),用户文件的传输。
  4. 关闭FTP。ftp客户端清空数据流,并且关闭Socket。

3、FTP协议的工作详解。

1、FTP协议的工作流程中为什么有控制连接和数据连接?

FTP协议的控制链接是用于客户端向服务器发送ftp的命令用的,只要不想关闭FTP客户端,就会一直保持该连接,用户之后的命令交互。而数据连接,则是区别于控制链接之外的,用户传输文件用的socket连接,当传输文件结束时,就关闭连接。

2、数据连接的主动模式和被动模式?

FTP的数据连接过程中的主动模式和被动模式,是相对于FTP服务器来说都。

主动模式:FTP客户端在客户端建立一个socket,端口为B,并通过FTP控制连接的通道发送PORT命令,告诉FTP服务器:“客户端已经对B端口进行了监听”;然后FTP服务器主动与FTP客户端的B端口建立连接。

网络协议之FTP协议_协议

被动模式:FTP客户端通过FTP的控制连接的通道,发送PASV命令,告诉FTP服务器:“我要建立数据连接”;然后FTP服务器会随机启动一个端口X的监听,并在返回信息中告诉FTP客户端:“可以与X端口建立连接”;最后,FTP客户端主动与FTP服务器的X端口建立连接。

网络协议之FTP协议_数据连接_02

4、FTP协议的命令大全

FTP COMMANDS

         The following are the FTP commands:

            USER <SP> <username> <CRLF>       登录的用户名
            PASS <SP> <password> <CRLF>       密码
            ACCT <SP> <account-information> <CRLF>
            CWD  <SP> <pathname> <CRLF>       改变当前目录
            CDUP <CRLF>                       返回上级目录
            SMNT <SP> <pathname> <CRLF>
            QUIT <CRLF>                       退出
            REIN <CRLF>                       重新登录
            PORT <SP> <host-port> <CRLF>
            PASV <CRLF>                       获取数据传输端口
            TYPE <SP> <type-code> <CRLF>      设置数据交换的类型{A(SCII),E(BCDIC),I(mage),L(ocal byte size)}
            STRU <SP> <structure-code> <CRLF>
            MODE <SP> <mode-code> <CRLF>
            RETR <SP> <pathname> <CRLF>
            STOR <SP> <pathname> <CRLF>       用覆盖方式上传一个文件到服务器
            STOU <CRLF>
            APPE <SP> <pathname> <CRLF>       用追加方式上传一个文件到服务器
            ALLO <SP> <decimal-integer>
                [<SP> R <SP> <decimal-integer>] <CRLF>
            REST <SP> <marker> <CRLF>         指定重新下在的字节数
            RNFR <SP> <pathname> <CRLF>       指定需要改名的原文件
            RNTO <SP> <pathname> <CRLF>       指定需要改名的新文件名
            ABOR <CRLF>                       取消前一指令
            DELE <SP> <pathname> <CRLF>       在服务器上删除指定文件
            RMD  <SP> <pathname> <CRLF>       在服务器上删除指定目录
            MKD  <SP> <pathname> <CRLF>       在服务器上创建目录       
            PWD  <CRLF>                       显示当前目录
            LIST [<SP> <pathname>] <CRLF>     列出当前目录下所有文件和子目录
            NLST [<SP> <pathname>] <CRLF>     列出当前目录下所有文件和子目录的名字
            SITE <SP> <string> <CRLF>
            SYST <CRLF>
            STAT [<SP> <pathname>] <CRLF>
            HELP [<SP> <string>] <CRLF>       获取帮助
            NOOP <CRLF>

FTP Security commands and arguments

      AUTH <SP> <mechanism-name> <CRLF>
      ADAT <SP> <base64data> <CRLF>
      PROT <SP> <prot-code> <CRLF>
      PBSZ <SP> <decimal-integer> <CRLF>
      MIC <SP> <base64data> <CRLF>
      CONF <SP> <base64data> <CRLF>
      ENC <SP> <base64data> <CRLF>

1.访问命令:

USER <username>    用于指定登录的用户名,以便服务器进行身份验证。USER命令通常是控制连接建立后发出的第一个命令。
PASS <password>    用于指定用户密码,该命令用于登录用户命令之后。
REIN    重新初始化用户信息,该命令会终止当前 USER的传输,也会终止正在传输的数据,然后重置所有参数,并打开控制连接,以便客户端再次发出USER命令。
QUIT    关闭与服务器之间的连接。

2.模式设置命令

PASV    告诉服务器,让FTP服务器在指定的数据端口进行监听,被动接受客户端的请求。是默认模式。
PORT <address>    告诉FTP服务器,客户端监听的端口号是address,FTP服务器采用主动模式连接客户端。
TYPE <data type>    指定要传输的数据类型,有ASCLL和二进制。
MODE <mode>    指定传输模式,S(流),B(块),C(压缩)。

3.文件管理命令

CWD <directory>    用户可以在不同的目录或数据集下工作而不改变登录信息,directory一般是用户名与系统相关的文件集合。
PWD    返回当前工作目录。
MKD <directory>>    在指定目录下创建新目录,directory表示指定目录的字符串。
CDUP    回到上层目录。
RMD <directory>    删除指定目录。
LIST <name>    返回指定路径下的子目录及文件列表,name为路径,若省略,返回当前路径下的文件列表。
NLIST <directory>    返回指定路径下的目录列表,省略路径时,返回当前目录。
RNFR <old path>    重新命名文件,该命令的下一条命令用RNTO指定新的文件名。
RNTO <new path>    和RNFR命令共同完成对文件的重命名。
DELE <filename>    删除指定路径下的文件。

4.文件传输命令

RETR <filename>    下载指定路径的文件。
STOR <filename>    上传一个指定的文件,并将其存储在指定的位置,如果文件已经存在,原文件被覆盖,如果文件不存在,则创建新文件。

 

更多内容请关注微信公众号“外里科技

官方公众号

外里科技

运营公众号

英雄赚





开源代码

https://gitee.com/B_T/beimi

网络协议之FTP协议_协议_03