一、网络拓扑
服务端位于172.16.12.0网段,客户端位于192.168.68.0网段,通过中间的路由器做NAT完成通信。
二、协议简介
FTP 英文全称 File Transfer Protocol,中文全称 文件传输协议。提供交互式访问,基于TCP完成数据的传输。
三、协议原理
FTP采用C/S模型完成服务,一个FTP服务器可以为多个客户端提供服务。工作步骤如下:
1、服务器启动,等待接收客户端的请求,一般默认端口为tcp的21;
2、客户端与服务器建立控制tcp连接,该tcp连接用于后续交互ftp相关信息;
3、服务器与客户端建立连接,处理相应请求。
3.1 主动模式(PORT)
3.1.1 什么是主动模式
主动模式,英文单词positive的简写,即服务器主动和客户端建立数据tcp连接。
3.1.2 主动模式的交互流程3.1.2.1 建立tcp连接
3.1.2.2 服务器(21)向客户端(55140)发送服务器准备就绪消息,告知客户端可以来连接了
3.1.2.3 客户端向服务端发送request报文,arg字段为用户名
3.1.2.4 服务端回复response,表示用户名没问题,需要密码
3.1.2.5 客户端发送request报文,回复密码
3.1.2.6 服务器回复response报文,表示已经登录,请继续操作
3.1.2.7 客户端发送request报文,表示需要知道服务器使用的操作系统类型
3.1.2.8 服务器回复response报文,表明自己的操作系统类型
3.1.2.9 客户端发送request报文,表示需要自己当前的路径
3.1.2.10 服务端返回当前工作路径
3.1.2.11 客户单发送request报文,表示请求已ascii传输
3.1.2.12 服务器表示同意用ascii
3.1.2.13 客户单向服务器发送request报文,表示希望以主动模式进行连接
active ip和active port用于后续建立传输数据的tcp连接
3.1.2.14 服务器同意使用客户端发送的ip和port建立主动连接
3.1.2.15 服务器向2.13中客户端报告的ip和port建立tcp连接
这里少了ack包,ack放在了第一个携带数据内容的报文中了,问题不大。
3.1.2.16 数据传输
3.1.2.17 数据传输完成,断开连接
3.2 被动模式(PASV)
3.2.1 什么是被动模式
被动模式,英文单词passive的简写,即服务器等待客户端发请求,然后建立数据tcp连接。
3.2.2 被动模式的交互流程
3.2.2.1 建立tcp连接
3.2.2.2 服务器发送response报文,告知客户端已经服务器已准备好
3.2.2.3 传输用户名、密码
3.2.2.4 登录成功
3.2.2.5 知晓服务器的操作系统类型
3.2.2.6 获取服务器的当前工作路径
3.2.2.7 以ascii码传输数据
3.2.2.8 客户端请求已被动模式建立连接
3.2.2.9 服务器同意已被动方式建立连接,并在包里携带了建立连接的ip和port
3.2.2.10 建立tcp连接,传输数据吗,断开连接
四 常见的请求码和应答码
4.1 请求码
命令 | 说明 |
---|---|
ABOR | 使服务器终止前一个FTP命令,以及任何相关数据传输 |
ACCT | 使用一个 Telnet 字符串来指明用户的账户 |
ALLO | 为服务器上的文件存储器分配空间 |
APPE | 添加文件到服务器同名文件 |
CDUP
| 改变服务器上的父目录 |
CWD
| 改变服务器上的工作目录 |
DELE | 删除服务器上的指定文件 |
EPSV | 进入扩展被动模式 |
HELP | 返回指定命令信息 |
LIST | 如果是文件名,列出文件信息;如果是目录,则列出文件列表 |
MODE | 传输模式(S = 流模式、B = 快模式、C = 压缩模式) |
MKD | 在服务器上建立指定目录 |
NLST | 列出指定目录内容 |
NOOP | 无动作,仅让服务器返回确认信息 |
PASS | 系统登录密码 |
PASV | 请求服务器,等待数据连接 |
PORT | IP 地址和两字节的端口 ID |
PWD | 显示当前工作目录 |
QUIT | 从 FTP 服务器上退出登录 |
REIN | 重新初始化登录状态连接 |
REST | 由特定偏移量重启文件传递 |
RETR | 从服务器上找回(复制)文件 |
RMD | 在服务器上删除指定目录 |
RNFR | 对旧路径重命名 |
RNTO | 对新路径重命名 |
SITE | 由服务器提供的站点特殊参数 |
SMNT | 挂载指定文件结构 |
STAT | 在当前程序或目录上返回信息 |
STOR | 储存(复制)文件到服务器上 |
STOU | 储存文件到服务器名称上 |
STRU | 数据结构(F = 文件、R = 记录、P = 页面) |
SYST | 返回服务器使用的操作系统 |
TYPE | 数据类型(A=ASCII、E=EBCDIC、I=binary) |
USER> | 系统登录的用户名 |
4.2 响应码
命令 | 说明 |
---|---|
110 | 新文件指示器上的重启标记 |
120 | 服务器准备就绪的时间(分钟数) |
125 | 打开数据连接,开始传输 |
150 | 打开数据连接 |
200 | 就绪命令(命令成功) |
202 | 命令没有执行 |
211 | 系统状态回复 |
212 | 目录状态回复 |
213 | 文件状态回复 |
214 | 帮助信息回复 |
215 | 系统类型回复 |
220 | 服务就绪 |
221 | 退出 FTP |
225 | 打开数据连接 |
226 | 结束数据连接(下载完成、目录列表完成等) |
227 | 进入被动模式(IP 地址、ID 端口) |
230 | 成功登录 FTP 服务 |
250 | 完成目录切换 |
257 | 路径名建立 |
331 | 要求密码 |
332 | 要求账号 |
350 | 文件行为暂停 |
421 | 服务关闭 |
425 | 无法打开数据连接 |
426 | 结束连接 |
450 | 文件不可用 |
451 | 遇到本地错误 |
452 | 磁盘空间不足 |
500 | 无效命令 |
501 | 错误参数 |
502 | 命令没有执行 |
503 | 错误指令序列 |
504 | 无效命令参数 |
530 | 登录 FTP 服务失败 |
532 | 存储文件需要账号 |
550 | 文件不存在 |
551 | 不知道的页类型 |
552 | 超过存储分配 |
553 | 文件名不允许 |
五、windows下切换主动和被动模式
当前windows系统为了安全起见,基本都是使用的被动方式,如果要使用主动方式连接,可以参考以下步骤:
5.1 打开控制面板
5.2 找到internet选项
5.3 高级选项
5.4 找到下图中的ftp选项,去掉对钩即为主动模式,选择为被动模式