大家好,欢迎来到IT知识分享网。
在FTP主动模式(Active Mode)和被动模式(Passive Mode)中,数据传输端口的选择方式不同。
(FTP服务端监听了21端口(控制端口),在主动模式下,FTP服务端通过自己的20端口(数据端口)向客户端发起连接;注意FTP服务端不监听20端口,只在主动模式下发起连接用)
- 在主动模式下,客户端打开一个随机端口(N > 1023),然后通过控制连接(通常是21端口)告诉服务器要连接的端口号(即N)。然后,服务器从其20端口发起到该随机端口的连接以进行数据传输。
- 在被动模式下,当客户端准备接收数据时,会向服务器发送PASV命令。然后,服务器会打开一个随机端口(通常大于1023)并通过控制连接将此端口号返回给客户端。之后,客户端从其任意一个大于1023的端口连接到服务器的这个随机端口进行数据传输。
因此,虽然在原始的FTP协议中,20端口是用于数据传输的,但在现实应用中,尤其是考虑到防火墙和NAT等因素,通常会使用随机端口进行数据传输(即使用被动模式)。
ftp> ? passive passive enter passive transfer mode
文章目录
FTP的特殊性
大多数的TCP服务是使用单个的连接,一般是客户向服务器的一个周知端口发起连接,然后使用这个连接进行通讯。但是,FTP协议却有所不同,它使用双向的多个连接,而且使用的端口很难预计。一般,FTP连接包括:
- 一个控制连接(control connection)
这个连接用于传递客户端的命令和服务器端对命令的响应。它使用服务器的21端口,生存期是整个FTP会话session时间。(就是从open ip[port]到close这段时间?) - 几个数据连接(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.
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。
参考文章:FTP的主动模式(PORT Mode)及被动模式(Passive Mode)
(gpt4.0答案,比较详细)(这个讲得好)
FTP(File Transfer Protocol)是文件传输协议,用于在客户端和服务器之间传输文件。FTP有两种连接模式:主动模式(Active mode)和被动模式(Passive mode)。这两种模式主要区别在于建立数据连接的方式不同。
主动模式(Active mode)
在主动模式下,客户端打开一个监听端口(通常是随机选择的),并将其告知服务器。服务器在需要传输数据时,主动连接到客户端的监听端口。具体步骤如下:
- 客户端连接到服务器的21端口(FTP命令端口)。
- 客户端打开一个监听端口(例如:1025),并通过
PORT命令告知服务器。 - 服务器收到
PORT命令后,通过服务器的20端口主动连接到客户端的监听端口(例如:1025)。
主动模式的缺点是,由于服务器主动连接客户端,可能会受到客户端防火墙的限制。
被动模式(Passive mode)
在被动模式下,服务器打开一个监听端口(通常是随机选择的),并将其告知客户端。客户端在需要传输数据时,主动连接到服务器的监听端口。具体步骤如下:
- 客户端连接到服务器的21端口(FTP命令端口)。
- 客户端发送
PASV命令,请求服务器进入被动模式。 - 服务器打开一个监听端口(例如:1025),并通过
227响应告知客户端。 - 客户端收到
227响应后,主动连接到服务器的监听端口(例如:1025)。
被动模式的优点是,由于客户端主动连接服务器,通常不会受到客户端防火墙的限制。因此,被动模式在实际应用中更为常用。
总结一下,主动模式和被动模式的主要区别在于建立数据连接的方式:主动模式是服务器主动连接客户端,而被动模式是客户端主动连接服务器。
从docker容器中ftp客户端连接外部的vsftpd服务器,需要开启被动模式
原因是容器中的ftp客户端,打开的是一个随机的监听端口,因为它是随机的,没有做端口映射,所以即使ftp客户端将这个端口告知服务端,服务端也无法通过这个端口与容器中的ftp客户端通信,因为它连接的是宿主机上的端口。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119714.html