FTP的主动传输模式(PORT Mode 主动模式)及被动传输模式(Passive Mode 被动模式)(PASV)(FTP通信原理、ftp端口)主动模式是从服务器端向客户端发起数据连接★★★★★

在FTP主动模式(Active Mode)和被动模式(Passive Mode)中,数据传输端口的选择方式不同。

(FTP服务端监听了21端口(控制端口),在主动模式下,FTP服务端通过自己的20端口(数据端口)向客户端发起连接;注意FTP服务端不监听20端口,只在主动模式下发起连接用)

  1. 在主动模式下,客户端打开一个随机端口(N > 1023),然后通过控制连接(通常是21端口)告诉服务器要连接的端口号(即N)。然后,服务器从其20端口发起到该随机端口的连接以进行数据传输。

  2. 在被动模式下,当客户端准备接收数据时,会向服务器发送PASV命令。然后,服务器会打开一个随机端口(通常大于1023)并通过控制连接将此端口号返回给客户端。之后,客户端从其任意一个大于1023的端口连接到服务器的这个随机端口进行数据传输。

因此,虽然在原始的FTP协议中,20端口是用于数据传输的,但在现实应用中,尤其是考虑到防火墙和NAT等因素,通常会使用随机端口进行数据传输(即使用被动模式)。

ftp> ? passive
passive   	enter passive transfer mode

FTP的特殊性

大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:

  1. 一个控制连接(control connection)
      这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP会话session时间。(就是从open ip[port]close这段时间?)

  2. 几个数据连接(data connection) (数据连接隶属于会话?)
      这些连接用于传输文件和其它数据,例如:目录列表等。这种连接在需要数据传输时建立,而一旦数据传输完毕就关闭,每次使用的端口也不一定相同。而且,数据连接既可能是客户端发起的,也可能是服务器端发起的。

主动传输模式和被动传输模式

在FTP协议中,控制连接使用周知端口21。相反,数据传输连接的目的端口通常实现无法知道。FTP协议使用一个标准的端口20作为ftp-data端口,但是这个端口只用于连接的源地址是服务器端的情况,在这个端口上根本就没有监听进程。FTP的数据连接和控制连接的方向一般是相反的,也就是说,是服务器向客户端发起一个用于数据传输的连接。连接的端口是由服务器端和客户端协商确定的。FTP协议的这个特征对ISA转发以及防火墙和NAT的配置增加了很多困难。

除此之外,还有另外一种FTP模式,叫做被动模式(passive mod)。在这种模式下,数据连接是由客户程序发起的,和刚才讨论过的模式(我们可以叫做主动模式)相反。是否采取被动模式取决于客户程序,在ftp命令行中使用passive命令就可以关闭/打开被动模式。

这两种模式发起连接的方向截然相反,主动模式是从服务器端向客户端发起连接;被动模式是客户端向服务器端发起连接。

PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了X端口,你过来连接我”。于是服务器从20端口向客户端的X端口发送连接请求,建立一条数据链路来传送数据。

PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了X端口,你过来连接我”。于是客户端向服务器的X端口发送连接请求,建立一条数据链路来传送数据。 (我们arm ftp客户端默认是被动模式

ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。

各客户端默认连接方式说明:
1、 IE浏览器访问方式-------被动模式
2、 Linux字符连接-----------被动模式
3、 Windows字符连接-----主动模式
IE更改FTP连接方式为主动方法:
工具—Internet选项—高级—使用被动FTP(去掉勾选)-------OK
Linux下更改ftp连接方式为主动:(默认是被动,貌似我们目前需要的就是被动)
当ftp正常连接后输入:passive 将passive 模式关闭即可。

参考文章:FTP的主动模式(PORT Mode)及被动模式(Passive Mode)

20230429(gpt4.0答案,比较详细)(这个讲得好)

FTP(File Transfer Protocol)是文件传输协议,用于在客户端和服务器之间传输文件。FTP有两种连接模式:主动模式(Active mode)和被动模式(Passive mode)。这两种模式主要区别在于建立数据连接的方式不同。

主动模式(Active mode)

在主动模式下,客户端打开一个监听端口(通常是随机选择的),并将其告知服务器。服务器在需要传输数据时,主动连接到客户端的监听端口。具体步骤如下:

  1. 客户端连接到服务器的21端口(FTP命令端口)。
  2. 客户端打开一个监听端口(例如:1025),并通过PORT命令告知服务器。
  3. 服务器收到PORT命令后,通过服务器的20端口主动连接到客户端的监听端口(例如:1025)。

主动模式的缺点是,由于服务器主动连接客户端,可能会受到客户端防火墙的限制。

被动模式(Passive mode)

在被动模式下,服务器打开一个监听端口(通常是随机选择的),并将其告知客户端。客户端在需要传输数据时,主动连接到服务器的监听端口。具体步骤如下:

  1. 客户端连接到服务器的21端口(FTP命令端口)。
  2. 客户端发送PASV命令,请求服务器进入被动模式。
  3. 服务器打开一个监听端口(例如:1025),并通过227响应告知客户端。
  4. 客户端收到227响应后,主动连接到服务器的监听端口(例如:1025)。

被动模式的优点是,由于客户端主动连接服务器,通常不会受到客户端防火墙的限制。因此,被动模式在实际应用中更为常用。

总结一下,主动模式和被动模式的主要区别在于建立数据连接的方式:主动模式是服务器主动连接客户端,而被动模式是客户端主动连接服务器。

20240105 从docker容器中ftp客户端连接外部的vsftpd服务器,需要开启被动模式

原因是容器中的ftp客户端,打开的是一个随机的监听端口,因为它是随机的,没有做端口映射,所以即使ftp客户端将这个端口告知服务端,服务端也无法通过这个端口与容器中的ftp客户端通信,因为它连接的是宿主机上的端口。

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值