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,从而进行数据的传输。
在这种模式下,文件传输连接由客户端发起。因此客户端的防火墙不会将其过滤。
【基于被动模式的文件传输】
服务端接收到客户端的命令后就进行解析。如果命令是上传或下载文件,则服务端打开一个新的端口并监听,同时把自己监听的IP地址和端口通过命令连接返回给客户端。客户端接收到后便主动发起连接,建立起文件传输连接,从而进行数据的传输。
【两种模式下的IP地址和端口的特殊格式】
举例:IP地址:192.168.1.120,端口:4500 ===》192,168,1,120,17,148
解释:前4个字段表示IP地址,即192.168.1.120;后2个字段表示端口号,即17 × 256 + 148 = 4500
四、常用的FTP命令
类别 | 命令 | 说明 |
登录 | USER 账号\r\n | 指定登录账号 |
PASS 密码\r\n | 指定登录密码 | |
QUIT\r\n | 关闭与服务器的连接 | |
建立文件传输连接 | PASV\r\n |
被动模式,让服务器在数据端口监听 服务端会回复一个IP地址和端口,然后客户再发起连接 |
PORT h1,h2,h3,h4,p1,p2\r\n |
主动模式,告诉服务器客户端监听的数据端口号 让服务器采用主动连接客户端 |
|
文件传输 | RETR 文件名\r\n | 下载文件 |
STOR 文件名\r\n | 上传文件 | |
目录操作 | CWD 目录名\r\n | 改变当前目录到指定目录 |
五、FTP响应码
FTP响应码用三位数字编码表示:
第一个数字给出了命令状态的一般性指示,如2表示服务器已经正确处理消息,5表示信息永久错误等。
第二个数字是响应类型的分类,如2表示连接状态,3表示用户认证等。
第三个数字提供了更加详细的信息。
FTP响应码 | 含义 |
150 | 文件状态良好,打开数据连接 |
200 | 命令成功 |
212 | 目录状态 |
213 | 文件状态 |
500 | 格式错误,命令不可识别 |
125 | 连接打开,准备传送 |
221 | 服务关闭控制连接,可以退出 |
202 | 命令未实现 |
225 | 数据连接打开,无传输正在进行 |
226 | 数据连接关闭,请求的文件操作成功 |
227 | 进入被动模式 |
230 | 用户登录 |
331 | 用户名正确,需要口令 |
332 | 登陆时需要账户信息 |
425 | 不能打开数据连接 |
426 | 关闭连接,中止数据传输 |
450 | 请求的文件操作未执行 |
250 | 请求的文件操作完成 |
530 | 账号或密码错误 |
550 | 未执行请求的操作 |
FTP缺点:明文登录
匿名登陆:
1、为了实现文件在互联网上传输的开放性,服务端管理员可以建立一个特殊的用户ID,
提供给互联网上的用户下载和上传文件,这就是匿名用户,它不需要密码.
2、常用的匿名登录名称:anonymous
【FTP响应码】
第一个数字的含义如下:
1 表示服务器正确接收信息,还未处理。
2 表示服务器已经正确处理信息。
3 表示服务器正确接收信息,正在处理。
4 表示信息暂时错误。
5 表示信息永久错误。
第二个数字的含义如下:
0 表示语法。
1 表示系统状态和信息。
2 表示连接状态。
3 表示与用户认证有关的信息。
4 表示未定义。
5 表示与文件系统有关的信息。