目录

1、链路分类

2、控制链路

3、数据链路

3.1、被动模式(PASV)

3.2、主动模式(PORT)

3.3、两种模式数据链路区别

4、FTP 相关命令

4.1、登录

4.2、建立文件传输套接字通信

4.3、操作文件

4.4、目录操作

4.5、模式与类型

4.6、参数信息

4.7、其他不常用的命令

4.8、FTP服务端的响应码


1、链路分类

FTP是仅基于TCP的服务,与众不同的是FTP协议要用到两个TCP连接,一个是控制链路,用来在客户端与服务器之间传递命令的;另一个是数据链路,用来上传或下载数据的。控制链路是由客户端向服务器端的 21 号端口建链,根据数据链路的建链方向以及所使用的端口号的不同分为主动模式和被动模式两种。

2、控制链路

无论是被动模式还是主动模式都是需要客户端用一个大于1024的端口主动先向服务器的 21号端口 建链形成控制链路,具体过程如下:

1、客户端向服务器发起三次握手操作,完成TCP链路的建立
2、TCP建链完成,服务器向客户端回复220 (220:对新用户服务准备好)
3、服务器向客户端发送回应530(530:需要客户端发送用户名和密码)
4、客户端发送用户名,服务器收到用户名并校验成功后回复331(331:用户名正确,需要口令)
5、客户端发送密码,服务收到密码校验成功后并回复230(230:用户登录成功)

client:10.43.42.199、server:10.43.85.223,报文如下

//client
[root@localhost ~]# netstat -anp | grep 10.43.85.223
tcp        0      0 10.43.42.199:52055          10.43.85.223:21             ESTABLISHED 19848/ftp

3、数据链路

3.1、被动模式(PASV)

ftp默认使用被动模式传输数据,具体过程如下:

1、客户端向服务器发送PASV指令,告诉服务器使用被动模式(控制链路)
2、服务器收到指令后,开启一个监听端口 listen_port(大于1024),并将该端口信息回复客户端
3、客户端收到服务的监听端口 listen_port 信息后,立刻再起一个端口向listen_port进行建链(数据链路)
4、数据链路建链完成后,数据信息走数据链路、控制指令信息走控制链路

模型如下:

抓包信息如下:

client命令执行结果:

//clientftp> get test1
local: test1 remote: test1
227 Entering Passive Mode (10,43,85,223,25,164).
150 Opening BINARY mode data connection for test1 (70776816 bytes).
226 Transfer complete.
70776816 bytes received in 6.1 seconds (1.1e+04 Kbytes/s)
....[roott@localhost ~]# netstat -anp | grep 10.43.85.223
tcp        0      0 10.43.42.199:44613          10.43.85.223:6564           ESTABLISHED 19848/ftp
tcp        0      0 10.43.42.199:52055          10.43.85.223:21             ESTABLISHED 19848/ftp

3.2、主动模式(PORT)

1、客户端本地开启一个监听端口listen_port,后向服务器发送PROT指令,并将端口信息带给服务器
2、服务收到PROT指令,立刻用本地20号端口向客户端的 listen_port 进行建链(数据链路)
3、数据链路建链完成后,数据信息走数据链路、控制指令信息走控制链路。

抓包信息如下:

client命令执行结果:

//clientftp> passive
Passive mode off.
ftp> get test2
local: test2 remote: test2
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for test2 (86743786 bytes).
226 Transfer complete.
86743786 bytes received in 7.5 seconds (1.1e+04 Kbytes/s)
ftp> quit[roott@localhost ~]# netstat -anp | grep 10.43.85.223
tcp        0      0 10.43.42.199:59250          10.43.85.223:20             ESTABLISHED 19848/ftp
tcp        0      0 10.43.42.199:52055          10.43.85.223:21             ESTABLISHED 19848/ftp
[roott@localhost ~]# netstat -anp | grep 10.43.85.223
tcp        0      0 10.43.42.199:59250          10.43.85.223:20             ESTABLISHED 19848/ftp
tcp        0      0 10.43.42.199:52055          10.43.85.223:21             ESTABLISHED 19848/ftp
[roott@localhost4 ~]# netstat -anp | grep 10.43.85.223

3.3、两种模式数据链路区别

  1. 被动模式和主动模式的区分主要是在数据链路上,控制链路两者完全相同。
  2. 被动模式是客户端向服务器主动建链,监听端口由服务器响应PASS后带回。
  3. 主动模式是服务器向客户端主动建链,监听端口封装在客户端的请求信息PROT中,同时服务只能使用21号端口进行建链链,也就是说如果是主动模式,同一时刻只能有一条数据链路在传输(相同 ip)。
  4. 还有一点需要注意:数据链路仅用于数据传输,数据传输完毕后立刻断链,如果后续还有数据传输会重新新建一条数据链,无论是PASS 还是 PROT。

4、FTP 相关命令

(每执行一次命令后,服务端会给与回复)

4.1、登录

USER 账号\r\n 登录账号
PASS 密码\r\n 登录密码
REIN\r\n 想重新登录,连接不会关闭,下一条命令USER可重新连接
QUIT\r\n 退出

4.2、建立文件传输套接字通信

PASV\r\n 被动模式,服务端会回复一个IP地址和端口,然后你再连接.(一般使用被动模式)
PORT 表示IP端口的特殊格式\r\n 主动模式,让服务端主动来连接你的文件监听套接字

4.3、操作文件

STOR 文件名\r\n 上传文件
APPE 文件名\r\n 上传文件,如果文件名已存在,把数据插入尾部
DELE 文件名\r\n 删除指定文件
REST 字节个数\r\n 跳过字节数,短点续传,下载文件前使用,使RETR命令仅下载偏移后的部分
RETR 文件名\r\n 下载文件
ABOR\r\n 放弃传输一个文件,将关闭文件套接字通信

4.4、目录操作

CWD 目录名\r\n 改变当前目录到指定目录
CDUP\r\n 返回上一次目录,当到根目录时,不变
LIST\r\n 显示当前目录下的文件,包括长度,文件类型(如目录)与权限(表示类型:drwxr-xr-x)
LIST 目录名\r\n 显示指定目录下的文件,包括长度,文件类型(如目录)与权限(表示类型:drwxr-xr-x)
MKD 目录名\r\n 创建一个目录
PWD\r\n 显示当前目录的路径
RMD 目录名\r\n 删除目录
RNFR 文件或目录名\r\n 将某文件或目录重命名,接下来要使用RNTO指定新名称
RNTO 文件或目录名\r\n 重命名为....
NLST\r\n 仅显示当前目录下的文件,以\r\n表示下一个
NLST 目录\r\n 仅显示指定目录下的文件,以\r\n表示下一个

4.5、模式与类型

TYPE 字符\r\n 选择传输类型
A为文本模式
I为二进制模式
E为EBCDIC
N为Nonprint非打印模式
T为Telnet格式控制符

4.6、参数信息

SYST\r\n 获取服务端系统信息(NT或Unix)
STAT 文件或文件夹\r\n 获取相关信息

4.7、其他不常用的命令

ACCT 用户帐号\r\n 发送PASS命令并接收到332代码之后才应发送
SMNT 另一个文件数据系统的路径\r\n 允许用户装配另一个文件系统的数据结构而无需改变登录
MODE 字符\r\n 指定传输类型:默认为流模式(S为流)(B为块)(C为经过压缩)
STRU 字符\r\n 指定结构类型:F为文件结构(默认值,就是流式传输)
ALLO 逻辑字节数\r\n 上传文件前,使用此命令申请内存(本人还没见到需要的,都是直接上传)
NOOP 测试通信
HELP 帮助,会列出有效命令

4.8、FTP服务端的响应码

150 文件状态良好,打开数据连接
200 命令成功
212 目录状态
213 文件状态
110 重新启动标记应答
500 格式错误,命令不可识别
501 参数语法错误
502 命令未实现
120 在X分钟内准备好
125 连接打开准备传送
214 帮助信息,信息仅对人类用户有用
215 名字系统类型
220 对新用户服务准备好
221 服务关闭控制连接,可以退出登录
202 命令未实现
211 系统状态或系统帮助响应
225 数据连接打开,无传输正在进行
226 关闭数据连接,请求的文件操作成功
227 进入被动模式
230 用户登录
331 用户名正确,需要口令
332 登录时需要帐户信息
350 请求的文件操作需要进一步命令
421 连接用户过多
425 不能打开数据连接
426 关闭连接,中止传输
450 请求的文件操作未执行
451 中止请求的操作:有本地错误
452 未执行请求的操作:系统存储空间不足
250 请求的文件操作完成
257 创建"PATHNAME"
503 命令顺序错误
504 此参数下的命令功能未实现
530 账号或密码错误
532 存储文件需要帐户信息
550 未执行请求的操作
551 请求操作中止:页类型未知
552 请求的文件操作中止,存储分配溢出
553 未执行请求的操作:文件名不合法

参考文献:

https://blog.csdn.net/jingzi123456789/article/details/83409572

https://blog.csdn.net/Aaron133/article/details/78508211

FTP的主动模式和被动模式工作原理相关推荐

  1. FTP的主动模式和被动模式

    1.1 PORT(主动模式) 在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,发送FTP用户名和密码,然后开放N+1号端口进行监听,并向服务器发出PORT N+ ...

  2. 一文读懂FTP的主动模式和被动模式

    文章目录 一文读懂FTP的主动模式和被动模式 一.引子 二.主动模式和被动模式结合TCP的三次握手详解 一文读懂FTP的主动模式和被动模式 一.引子 又来到了一文读懂系列文章,哈哈,昨天刚整理完FTP ...

  3. java ftp pasv_Ftp主动模式和被动模式以及java连接ftp模式设置

    FTP的主动模式与被动模式 FTP服务器使用20和21两个网络端口与FTP客户端进行通信. FTP服务器的21端口用于传输FTP的控制命令,20端口用于传输文件数据. FTP主动模式: FTP客户端向 ...

  4. FTP的主动模式和被动模式,你应该用那种?

    2019独角兽企业重金招聘Python工程师标准>>> FTP文件传输分为两种模式,主动(PORT)模式和被动(Passive)模式,用户应该用哪种? 简单粗暴,直接上答案 1)如果 ...

  5. ftp协议主动模式与被动模式

    FTP主动模式与被动模式 主动模式:客户端给服务端的21控制端口发命令说,我要下载什么什么,并且还会说我已经打开了自己的某个端口,你就从这里把东西给我吧,服务器知道后就会连接客户端已打开的那个数据端口 ...

  6. FTP的主动模式与被动模式

    FTP协议有两种工作方式:PORT方式和PASV方式,即为主动式和被动式. PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路.当 ...

  7. FTP的控制连接和数据连接分别是做什么的?主动模式和被动模式有什么区别?

    你知道FTP的控制连接和数据连接分别是做什么的吗? 你知道FTP的主动模式和被动模式有什么区别吗? 你知道实际工作中,会使用主动FTP还是被动FTP吗?又是为什么呢? 一. FTP的两种连接 FTP( ...

  8. 关于FTP主动模式与被动模式的一点理解

    又一次面试的时候,面试像这样问我:请简述FTP的主动模式与被动模式的区别?FTP这玩意不是天天都要用到的么,看起来这么简单的问题我居然回答不上来,好尴尬!经过几天的思考与理解,终于有点眉目,拙见让诸位 ...

  9. FTP工作原理以及主动模式和被动模式

    一 简介 FTP的传输使用的是TCP数据包协议,TCP在建立连接前会先进行三次握手.不过FTP服务器比较麻烦一些,因为FTP服务器使用了两个连接,分别是命令通道与数据通道.因为是TCP数据包,所以这两 ...

最新文章

  1. 这个开源项目...看了就停不下来啊!
  2. mqtt如何判断设备离线_污水处理设备公司给出的价格如何判断真实性?
  3. 软件工程导论 09章面向对象方法学
  4. Flutter实战一Flutter聊天应用(二十)
  5. [HTML5]使用Box2dWeb模拟飞行箭矢
  6. Akamai:三季度DDoS攻击总数同比上涨138% 规模超100 Gbps
  7. python ftp timeout_Python ftp client 处理含有中文的文件名详解
  8. 部分Excel函数的使用
  9. PhpStorm 配置 Git 教程
  10. Linux 面试最常问的十个问题
  11. php读取excel写入数据库,PHP读取EXCEL文件写入数据库
  12. Bat 一键清理Chrome谷歌浏览器所有缓存 个人档案
  13. Redis缓存雪崩解决方案
  14. 解读数据架构的 2020:开放、融合、简化
  15. ToolStrip添加任意控件实现
  16. echarts 仪表盘图展示百分比
  17. 监管之外:网店新规制约了什么
  18. 瑞吉外卖【后台管理系统篇】
  19. 钉钉群机器人开发接口
  20. 10mbps 局域网组播_无线局域网Apple Bonjour部署指南

热门文章

  1. 乐山市计算机学校的董事长是,乐山市计算机学校开学典礼隆重举行
  2. 计算机在会计专业的作用论文开题报告,会计电算化对传统会计的影响开题报告.docx...
  3. 计算机作业我家乡的变化英语作文,我家乡的变化英语作文(精选12篇)
  4. 如何修改HBulider X注释字体的颜色
  5. 【ffmpeg】音频重采样
  6. python实现飞机大战游戏
  7. mysql 多表查询语句
  8. 删除Excel单元格中空行
  9. 真的有人会喜欢一个程序员?
  10. 程序员阿里三次面试已过却无理由挂了,网友:阿里HR有一票否决