FTP Protocol

FTP(File Transfer Protocol)是因特网上的一种文件传送协议。

基本原理

FTP协议基于客户/服务器模式,属于应用层,使用TCP可靠的运输服务。

FTP的服务器进程由1个主进程若干从进程组成:主进程负责接受新请求,从进程负责处理单个请求。这样,1个FTP服务器就可以同时为多个客户进程服务。

工作过程

FTP工作分为主动模式和被动模式。
不论哪种模式,首先,客户从一个随机的端口N(1024-65535)向服务器的命令端口21发起请求,建立起控制连接

- 主动模式

客户随机打开某个端口(1024-65535),在这个端口等待服务器的数据,所以要通过控制连接告诉服务器自己用哪个端口传送数据,接着服务器收到文件传送命令以及客户端口号,从自己的数据端口20向客户发起数据连接
FTP传送完一个文件,数据连接就会关闭,而控制连接贯穿整个会话。

- 被动模式
如果客户被防火墙限制,不能接受到来的TCP连接,这时候就需要被动模式来传输:
维基百科
首先,客户通过控制连接向服务器发送命令PASV;
接着,服务器向客户发送自己的IP地址和自己打算用来传送数据的端口号;
最后,客户通过刚才接收的IP地址和服务器端口号,用自己任意一个端口(1024-65535)向服务器开的那个端口建立数据连接。

通俗点,就是:
主动模式:建立数据通道,服务器主动去连接客户;
这里写图片描述
被动模式:建立数据通道,服务器被动地被客户连接。
这里写图片描述

再通俗点,就是:
主动模式:
客户:我开了一个端口,你来连我吧;

被动模式: 
客户:mmp,被防火墙搞了,收不到你发来的数据连接了;
服务器:哦,没事,我开了个端口,你连我就好了。

参考:
Active and Passive FTP Transfers Defined
https://en.wikipedia.org/wiki/File_Transfer_Protocol

原文地址:https://www.cnblogs.com/EIMadrigal/p/9248201.html