0%

FTP Protocol

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

基本原理

FTP协议基于客户/服务器模式,属于应用层,使用TCP可靠的运输服务。
FTP的服务器进程由1个主进程若干从进程组成:主进程负责接受新请求,从进程负责处理单个请求。这样,1个FTP服务器就可以同时为多个客户进程服务。

工作过程

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

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

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

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

参考

Active and Passive FTP Transfers Defined
wiki