1. 项目介绍

一、FTP协议

FTP协议是一种应用层协议,其采用服务端与客户端进行通信的方式来共享文件。它作为网络共享文件的传输协议,在网络应用软件中具有广泛的应用。它的目标是提高文件的共享性和可靠高效地传送数据。

在传输文件时,FTP 客户先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。

一般的 C/S 应用程序一般只建立一个 socket 连接,这个连接同时处理服务器端和客户端的连接命令数据传输。而FTP协议则将命令与数据分开传送,这提高了效率。

FTP传输分为命令传输和数据传输,它们各使用一个独立的socket通信。

二、命令端口和数据端口

FTP协议使用 2 个端口,分别为命令端口数据端口,它们在服务器端的端口号分别为21和20。

【命令端口】

用于传送命令的那个连接,该连接主要负责 FTP 命令的发送和接收返回的响应信息。依靠这个连接发送FTP命令即可完成诸如“登录”、“改变目录”、“删除文件”等操作。

每一个 FTP 命令(命令都是字符串)发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码(用于判断命令是否成功执行)和一些说明信息。

【数据端口】

用于数据传输的那个连接,该连接主要负责上传/下载文件、显示目录列表。

三、主动模式和被动模式(建立文件传输连接的两种方式)

【主动模式(PORT)】

客户端随机打开一个端口N(大于1024)作为己方的命令端口,向服务器的命令端口(21)发起连接,同时开放端口N+1作为己方的数据端口,并在这个端口监听,然后向服务器发出“port N+1”命令。

服务器需从它自己的数据端口(20)主动连接到客户端指定的数据端口(N+1),从而进行数据的传输。

在这种模式下,文件传输连接由服务器发起。对于客户端的防火墙来说,这是从外部到内部的连接,可能会将其过滤。

【被动模式(PASS)】

当开启一个 FTP 连接时,客户端打开两个端口N(大于1024)和N+1。端口N连接服务器的命令端口(21),然后发出“PASV”命令。

服务器收到“PASV”命令后会打开一个端口P(大于1024),返回一个包含IP地址及端口号(特殊格式)的字符串,如“227 entering passive mode (127,0,0,1,4,18)”。它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256 再加上最后一个数字,这就是 FTP 服务器新打开的(用来进行数据传输的)端口P。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。

客户端收到回复后,将取得服务器用于数据传输的端口P,然后通过端口N+1主动连接到服务器的端口P,从而进行数据的传输。

在这种模式下,文件传输连接由客户端发起。因此客户端的防火墙不会将其过滤。

四、

当服务端接收到客户端的 命令后 解析 如果命令是上传或下载文件 则服务端打开一个新的socket 并监听 同时把自己监听的ip 端口通过命令socket 发给客户端 客户端接收到后

    1.  新建一个socket 去链接这个ip 端口链接到 服务端的数据socket 接收或发送数据  
    2. 注意命令socket一直是保持链接的 数据socket 另外开
    3. 还有就是 ftp协议的数据传输分为主动和被动两种模式  其区别就是 一个是由服务端打开数据socket等待客户端来链接 另一个是 客户端打开socket 等待服务端来链接

猜你喜欢

转载自www.cnblogs.com/xzxl/p/9589159.html