vsftpd 是“very secure FTP daemon”的缩写,是一个完全免费的、开源的 FTP 服务软件,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面。它支持很多其他的 FTP 服务软件所不支持的特征,比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。既然它是一个 FTP 服务软件,那么这里先对FTP服务做一些简介。
一、FTP 简介
FTP 是File Transfer Protocol(文件传输协议)的英文简称,它是一种在网络中进行文件传输的协议,基于客户端 /服务器运行模式,采用TCP传输协议进行数据传输。
FTP服务运行时使用两个端口:一个是控制端口;一个是数据端口。
控制端口:用于接受客户端发出的相关 FTP 命令与参数,默认为21端口。
数据端口:用于进行数据传输,默认为20端口。
二、FTP 工作模式
根据 FTP 的数据连接方式不同,FTP的工作模式可分为:主动模式和被动模式。
1、主动模式的工作原理(PORT模式)
主动模式数据包抓取如下图所示:
主动(PORT)模式的FTP详细说明如下:
①客户端随机开启一个大于1024的端口作为控制端口, 并通过该端口发送一个TCP SYN(TCP同步)包给FTP服务器控制端口(默认为21端口),发起连接请求。
② 服务器端收到客户端TCP SYN包后,发送SYN ACK包给客户端进行同步确认。
③客户端收到服务器端SYN ACK包后,发送一个ACK确认包,至此客户端与服务器端建立控制连接完成。
④当客户端请求一个列表或者发起一个上传或下载文件的请求时,客户端使用PORT命令告知服务器采用主动模式连接并宣告数据端口号,POST命令包含一个IP地址(通常是客户自己的IP地址)和一个随机的数据端口。在本例中如:POST 192,168,1,200,147,49,前四组数字代表IP地址,后二组数字代表端口号。端口号具体计算:147*256+49=37681。
⑤服务器端开启数据端口(默认为20)发送一个TCP SYN(TCP同步)包给客户端的数据端口(PORT命令中发送给服务器端的端口),发起连接请求。
⑥客户端收到服务端TCP SYN包后,发送SYN ACK包给服务端进行同步确认。
⑦服务器端发送一个ACK确认包,至此服务端与客户端建立数据连接完成。
⑧服务端与客户端以这个数据连接来进行数据传递,STOR(上传)表示客户端要发送数据,RETR(下载)表示服务器段发送数据,都需要对方进行ACK确认。
⑨当数据传输完成以后,以FIN包来结束数据连接,FIN包需要双方进行ACK确认。
⑩当FTP服务需要断开时,以FIN包来结束控制连接,FIN包需要双方进行ACK确认。
2、被动模式的工作原理(PASV模式)
被动模式数据包抓取如下图所示:
被动(PASV)模式的FTP详细说明如下:
①客户端随机开启一个大于1024的端口作为控制端口, 并通过该端口发送一个TCP SYN(TCP同步)包给FTP服务器控制端口(默认为21端口),发起连接请求。
②服务器端收到客户端TCP SYN包后,发送SYN ACK包给客户端进行同步确认。
③ 客户端收到服务器端SYN ACK包后,发送一个ACK确认包,至此客户端与服务器端建立控制连接完成。
④当客户端请求一个列表或者发起一个上传或下载文件的请求时,客户端使用PASV命令告知服务器采用被动模式连接。
⑤服务器端随机开启一个大于1024的端口作为数据端口,并告知客户端。在本例中如:192,168,1,91,145,120,前四组数字代表IP地址,后二组数字代表端口号。端口号具体计算:145*256+120=37240。
⑥客户端随机开启一个大于1024的端口发送一个TCP SYN(TCP同步)包给服务端的数据端口(服务器端宣告的数据端口),发起连接请求。
⑦ 服务端收到客户端TCP SYN包后,发送SYN ACK包给客户端进行同步确认。
⑧客户端发送一个ACK确认包,至此客户端与服务端建立数据连接完成。
⑨服务端与客户端以这个数据连接来进行数据传递,STOR(上传)表示客户端要发送数据,RETR(下载)表示服务器段发送数据,都需要对方进行ACK确认。
⑩当数据传输完成以后,以FIN包来结束数据连接,FIN包需要双方进行ACK确认。
⑪当FTP服务需要断开时,以FIN包来结束控制连接,FIN包需要双方进行ACK确认。
以上是我在学习Linux系统中整理的一些学习要点,肯定会有不对的地方,希望各位大侠给与指正,我们共同学习!谢谢!
下篇:Linux服务器配置-VSFTP服务配置(二)
vsftpd服务软件安装及配置文件说明