ftp

FTP 是什么

FTP 是文件传输协议(File Transfer Protocol)的简称,用来传输文件,基于TCP/IP,是可靠的文件传输协议,但是不安全,所以为安全考虑会和SSL(TLS)一起使用。

2021年 google chrome(version 88.0) 和 firefox(version 88.0)已经放弃对ftp的支持。
明明已经过时了,我也不知道我为什么要写-_-||

通信模式

主动模式

  1. 客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,该tcp连接的来源地端口为客户端指定的随机端口x,目的地端口(远程端口)为服务器上的21号端口。
  2. 客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
  3. 服务器打开20号源端口并且创建和客户端数据端口的连接。此时,来源地的端口为20,远程数据(目的地)端口为(x+1)。
  4. 客户端通过本地的数据端口创建一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经创建好了一个连接。

主动模式需要从服务器建立到本地客户端的连接,但是现有防火墙的安全模式常常是准出不准进的,所以在客户端有防火墙的情况下,主动模式并不友好。
NAT也是同样的道理,虽然可以通过端口转发克服。

被动模式

  1. 客户端还是访问服务器的21号端口,并且告诉服务器是PASV(被动模式)
  2. 服务器返回相应被动监听的端口信息如端口是2048
  3. 客户端连接服务器端口2048进行数据连接

数据类型

维基百科上说了4种数据类型,但是实际上常用的就是BinaryMode。

还记得有一次使用ftp客户端传文件(老业务了),结果对方一直说数据不完整,后面发现 java 客户端默认模式是ASCII模式(大概就是英文文本模式),会在传输前把数据转换成"8-bit ASCII"
看到协议里面有写数据类型的时候才恍然大悟。

安装

centos

yum install -y vsftpd
systemctl start vsftpd --now