ftp只支持tcp连接,不支持udp连接.
ftp使用两个端口: 21(控制端口, 命令端口) , 20(数据端口)
21端口: 用来控制用户验证, 连接的建立和关闭:open/close/bye
20端口: 用来传输数据.
两个连接: 命令连接(控制连接) , 数据连接
ftp协议使用的端口是21(也称为控制端 口),其实还有一个数据端口20,根据FTP工作方式的不同,数据端口也不都是20,主动模式的被动模式使用的数据端口是不一样的.
主动和被动是相对于谁而言的?
****** 该是相对于ftp服务器的数据连接而言的.******
主动模式:PORT模式, 被动模式叫 pasv模式: passive: 被动的/消极的.
active, initiative, passion: n. 热情,激情...: passion is energy. live with passion! passion is con\'tagious [k2n\' teid32s]. con\'tagiousness con\'tagiously.
1. 主动模式的FTP:客户端从一个任意的非特权端口N连接到FTP服务器的命令端口,也就是21端口。然后客户端开始监听端口N+1,并发送FTP 命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。
针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP:
1、 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的命令连接)
2、 FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)
3、 FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)
4、 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)
2.被动FTP
为了解决服务器发起到客户的连接的问题,开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被客户端的防火墙过滤掉的问题。
当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N>1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P>1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
1、 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)
2、 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)
3、 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)
4、 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
以上关于主动和被动FTP的解释,可以简单概括为以下两点:
1、主动FTP:
命令连接:客户端 (大于1024端口)N -------------> 服务器 21端口
中间的命令是: 客户端 ----(port N+1)-----> 服务器端.
数据连接:客户端(大于1024端口)N+1 <-----(主动模式)------ 服务器 20端口
2、被动FTP:
命令连接:客户端 (大于1024端口)N -----------------> 服务器 21端口
中间的命令是: 客户端 ------(pasv) ----> 服务器端;
客户端 <-----(port P)-----服务器端.
数据连接:客户端(大于1024端口)N+1 - -------(被动模式)-------> 服务器(大于1024端口)P端口
即 : 客户端始终是两个端口N和N+1; 服务器的端口要么是: 21, 20; 要么是21, P(>1024的随机端口).
三、主动模式ftp与被动模式FTP优点和缺点:
主动FTP对FTP服务器的管理和安全很有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户 端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中数据连接的一个连到一个高位随机端口, 而这个端口很有可能被服务器端的防火墙阻塞掉。
发送port N+1, port P的目的?
就是为了告诉对方, 我提供 并 准备好 N+1端口, 或P端口, 你可以来连接我的这个端口.
因为如果不告诉对方: port N+1, port P, 那么对方是无法知道要来连接你哪个端口的, 这样连接就无法建立!
用"敲门和开门"来理解ftp的port模式和pasv模式?
--------------------------------------------------------------------------------
主动模式:服务器向客户端敲门,然后客户端开门
被动模式:客户端向服务器敲门,然后服务器开门
所以,如果你是如果通过代理上网的话,就不能用主动模式,因为服务器敲的是上网代理服务器的门,而不是敲客户端的门
而且有时候,客户端也不是轻易就开门的,因为有防火墙阻挡,除非客户端开放大于1024的高端端口
--------------------------------------------------------------------------------
要用主动模式来下载,请您把下载工具的被动模式(PASV)都不要打勾,用主动模式来下载就OK了,如果在出错,那就被动主动相互转换一下
常见的FTP客户端软件的PASV方式的关闭方法
**** 大部分FTP客户端默认使用PASV方式,PASV模式的意式是被动模式。**** 在大部分FTP客户端的设置里,常见到的字眼都是“PASV”或“被动模式”。
**** 不管是服务器端,还是 客户端下载工具(ftp工具) 说的 主动模式和被动模式 都是相同的=== 一致的 含义 *****
IE: 工具 -> Internet选项 -> 高级 -> “使用被动FTP”(需要IE6.0以上才支持)。
CuteFTP: Edit -> Setting -> Connection -> Firewall ->
“PASV Mode”
或 File -> Site Manager,在左边选中站点 -> Edit -> “Use PASV mode”
FlashGet: 工具 -> 选项 -> 代理服务器 -> 直接连接 -> 编辑 -> “PASV模式”
FlashFXP: 选项 -> 参数选择 -> 代理/防火墙/标识 -> “使用被动模式”
或 站点管理 -> 对应站点 -> 选项 -> “使用被动模式”
或 快速连接 -> 切换 -> “使用被动模式”
LeapFTP: Option ->Preferences -> General->Proxy->Use Pasv Mode
从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。
linux ftp设置pasv模式的方法?
ftp --h 列出ftp命令的用法
ftp -A enable active mode
ftp -p : enable passive mode (默认就是passive模式).