主动模式(active): |
我们知道,FTP是由TCP封包的模式连接,TCP 这种封包由于需要经过 Server 端与 Client 端两边的『三次握手』之后,才能确定联机,也就是需要执行ACK确认的动作,需要经过以下几个动作。 |
Client 端主动向 Server 端发送联机需求: 首先client端会随机选取1024以上的端口来主动联机到server端提供的21端口,也就是会主动发送一个封包到server。 |
Server 端接受后,响应给 Client 端:当 Server 接收到 Client 的要求之后,会响应 Client 端的需求,此时 Server 端会建立等待联机的资源,并且将一带有 SYN 与确认 (ACK) 的封包送回 Client 端; |
Client 端回应确认封包:在 Client 端接收到来自 Server 端告知的封包后,会再次的发送一个确认封包给主机,此时,两边才会正式的建立起联机的通道,这个步骤 1 ~ 3 就是 Three-Way Handshake(三次握手)。需要注意的是,这个已经建立联机的通道(通常是 port 21)仅能进行 FTP 的『指令』而已,如果该指令涉及到数据的传送(data transfer)时,例如上传或下载等等,那么就需要额外建立一条数据传输的通道才行 ( ftp-data )!而数据传输的通道建立则需要继续底下的步骤; |
Client 端发送数据传输要求的命令给 Server:当需要进行数据的传输时,Client 端会启用另一个高于 1024 的端口来做为联机的准备(这个高于 1024 的端口与步骤 1 那个端口不是同一个!),并且 Client 端会主动的利用刚刚已经建立的指令信道(通常是 port 21)发送一个命令告诉 Server 说:『我已经准备好一个数据传输的端口了,请准备进行传输吧』! |
Server 端以 ftp-data 端口主动联机到 Client :收到命令之后的 Server 会『主动』的以 ftp-data 端口(一般为 port 20)向 Client 端通知的那个高于 1024 的端口进行联机。 |
Client 端响应主机端,并继续完成三次握手:在接到 Server 来的封包之后, Client 会响应一个带有 ACK 确认的封包,并继续来完成另一个三次握手的程序,此时,数据传输的通道才正式的建立。 |
以上就是client端以主动模式连接Server端的过程,适合FTP 服务器和PC客户端的直接建立连接,使用到的端口: |
(1)命令通道的 (预设为port 21) 。 (2)数据传输的 (预设为port 20)。 |
被动模式(passive) |
还有一种网络状况,就是Client 端是在防火墙后端,或者是NAT主机后端,这个时候client端和server端之间建立FTP连接时,就会出现一些不一样的状况。 FTP client 是在 NAT 主机的后端,那由于我们的 NAT 主机会自动的纪录 client 端向外联机的信息,所以在 |
由于目前的 NAT 主机可以记录由内部计算机联机出去的信息,因此,由 port 21 的联机可以顺利的被建立起来; |
当 Client 端由 port 21 下达数据传输的命令时,此时client会告诉 FTP Server 说:『我开了一个 >1024 的端口,请来连接吧』! |
这个时候要特别留意的是,client经过NAT主机联机后,在 FTP Server 看到的client的 IP 其实是 NAT 那部主机的!所以,这个时候 FTP Server 会主动的由 port 20 向 NAT 主机的 >1024 那个 port 要求建立联机! |
经过上图我们会发现,FTP Server会根据client的命令去连接那个>1024的端口,NAT主机或者防火墙并没有那个开启那个>1024的端口,所以就会造成无法连接的问题。 |
既然这样不能正常连接,那么我们就让client主动去连接服务器,这样就不会出现上述的问题了,这种方式我们称之为“被动模式(passive)”。被动模式会经过经过以下几个步骤: |
|
|
|
|
|
|
上面说明了FTP的两种连接模式: |
|
Serv-U可以设定pasv模式时使用的端口范围,具体设置步骤如下:
|
在防火墙上需要开启上面指定的端口范围。 |
相关文章
- 10-11Swoole Server的两种运行模式介绍
- 10-11swoole两种运行模式BASE和PROCESS的区别
- 10-11多线程系列3_生产者消费者模式的两种实现方法
- 10-11理解JMS规范中消息的传输模式和消息持久化
- 10-11两种高效的事件处理模型:Reactor模式和Proactor模式
- 10-11jvm的运行模式 client和 server两种
- 10-11有关于url地址的两种模式
- 10-11iOS AES128加密解密的两种模式(CBC和ECB)
- 10-11ftp运行的两种模式xinetd,standalone
- 10-117 张图带你搞懂 Kubernetes Flannel 高性能网络插件的两种常用工作模式