FTP的主动模式和被动模式工作原理

目录

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命令执行结果:

//client

ftp> 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命令执行结果:

//client

ftp> 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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老王不让用

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值