ftp协议分析

FTP 协议

相比其他协议,如 HTTP 协议,FTP 协议要复杂一些。与一般的 C/S 应用不同点在于一般的C/S 应用程序一般只会建立一个 Socket 连接,这个连接同时处理服务器端和客户端的连接命令和数据传输。而FTP协议中将命令与数据分开传送的方法提高了效率。

FTP 使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21 (命令端口)和 20 (数据端口)。控制 Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了。

命令端口

一般来说,客户端有一个 Socket 用来连接 FTP 服务器的相关端口,它负责 FTP 命令的发送和接收返回的响应信息。一些操作如“登录”、“改变目录”、“删除文件”,依靠这个连接发送命令就可完成。

数据端口

对于有数据传输的操作,主要是显示目录列表,上传、下载文件,我们需要依靠另一个 Socket来完成。

如果使用被动模式,通常服务器端会返回一个端口号。客户端需要用另开一个 Socket 来连接这个端口,然后我们可根据操作来发送命令,数据会通过新开的一个端口传输。
客户端:随机端口 -> 服务器:返回端口号
一般协议流程如下

> telnet xxx 21
....  USER PASS登录
> PASV
< 227 entering passive mode (127,0,0,1,4,18)
< 客户端用N+1端口(如客户端连接21端口是3325,那么使用3326)连接上述服务器端口

如果使用主动模式,通常客户端会发送一个端口号给服务器端,并在这个端口监听。服务器需要连接到客户端开启的这个数据端口,并进行数据的传输。
服务器:随机端口 -> 客户端:发送端口号
一般协议流程如下

> telnet xxx 21
.... USER PASS登录
> port  N+1       (如客户端连接21端口是3325,那么port就是3326,满足>1024,random)
< 服务器用20端口连接客户端上述端口

下面对 FTP 的主动模式和被动模式做一个简单的介绍。

FTPS 协议

由于FTP协议命令是明文传输的,容易被第三者捕获,因此需要加密保证安全。

但它和FTP一样仍需要另外的端口进行DATA传输,默认端口也是21。

加密用到SSL/TLS协议(在传输层(TCP/IP)上),很多协议加了S的版本几底层基本就是使用了这层协议。

SFTP 协议

sftp是Secure File Transfer Protocol的缩写,安全文件传送协议。

它是SSH的其中一部分,与 ftp 有着几乎一样的语法和功能,命令和DATA传输都是通过默认22端口进行的,对防火墙更友好。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注