FTP文件传输协议

来源:互联网 发布:php 日期格式 编辑:程序博客网 时间:2024/06/05 00:28

此文主要是从他人博文等官方网站抄录,夹杂很少的个人见解。

只当FTP备忘录。


FTP协议与操作系统无关,在任何系统上的程序只要符合FTP协议,就可以相互传输数据。


FTP协议中将命令与数据分开传送,提高效率。

FTP服务器使用2个端口,一般21命令端口,20数据端口。


控制socket用来传送命令,数据socket用来传送数据。

每一个FTP命令客户端发送之后,FTP服务器会返回一个字符串(响应代码和说明命令),判断命令是否执行。


命令端口:客户端有一个socket连接服务器的命令端口,客户端的这个socket负责FTP命令的发送和接受返回的响应信息。


数据端口:数据传输主要在于,下载文件、上传文件和目录显示等。这就需要客户端方面的另一个socket完成这些。

关于数据传输的主动和被动一说:

主动与被动是针对服务器讲的!

主动模式:客户端随机打开一个大于1024的端口N(用于命令发送)向服务器的命令端口21发起连接,同时开放N+1端口监听,并且N向服务器发出“Port N+1”命令,

服务器收到命令后,从它自己的数据端口20主动连接到客户端指定的这个端口。

被动模式:客服端打开两个任意的本地端口(N>1024和N+1)N端口连接服务器的21端口,提交PASV命令。服务器开启任意端口(P>1024),返回给客户端(h1,h2,h3,h4,p1,p2),ip地址为h1.h2.h3.h4 端口为p1*256+p2。客户端收到命令取得端口号,通过N+1端口连接到服务器的P端口。


FTP命令由3到4个字母组成,命令后面跟参数,用空格分开。每个命令以“\r\n”结束。

主要命令 USER PASS SIZE REST CWD RETR PASV PORT QUIT


例如下载一个文件,控制连接建立后,客户端发出"USER REGULUS\r\n" 紧跟着是"PASS PASSWD/r/n"

每次收到客户端发出的命令,服务器就会返回响应码和信息


响应码用三位数字编码表示:

第一个数字给出了命令状态的一般性指示,比如响应成功、失败或不完整。

第二个数字是响应类型的分类,如 2 代表跟连接有关的响应,3 代表用户认证。

第三个数字提供了更加详细的信息。

第一个数字的含义如下:

1 表示服务器正确接收信息,还未处理。

2 表示服务器已经正确处理信息。

3 表示服务器正确接收信息,正在处理。

4 表示信息暂时错误。

5 表示信息永久错误。

第二个数字的含义如下:

0 表示语法。

1 表示系统状态和信息。

2 表示连接状态。

3 表示与用户认证有关的信息。

4 表示未定义。

5 表示与文件系统有关的信息。





0 0