FTP协议是一个用于在计算机网络上在客户端和服务器之间进行文件传输的应用层协议,其英文全称是File Transfer Protocol。是TCP/IP协议簇中的重要一员。客户端和服务器按照FTP的协议规范进行通讯来实现文件传输。
对于FTP服务器好理解,是对外提供FTP服务的机器。对于客户端怎么去连接服务器呢,在windows上可以通过ftp命令来进行连接,也可以通过第三方的FTP的客户端程序来连接服务器,场景的FTP客户端程序有FileZilla。
FTP的出现极大方便了早期在互联网中的文件传输,时至今日也是文件传输不可或缺的一员。FTP协议的诞生实现了如下目标:
谈FTP的工作模式之前,需简单了解一下FTP建立连接的过程。 我们知道HTTP传输数据前需要进行TCP的三次握手。同样FTP也是工作上TCP之上,但是与HTTP连接不同的是,FTP需要建立两次连接才能完成一次完整的文件传输服务。第一次连接我们称之为控制连接,第二次连接称为数据连接。两次连接缺一不可,这也是FTP和其他应用层协议的独特之处。
FTP也有其专属的知名端口,默认情况下,FTP使用20
和21
这两个端口,其中20
用于数据连接(传递数据),21
用于控制连接(传递控制信息)。但是,是否使用20
作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20
;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
主动方式也称为PORT方式,是FTP协议最初定义的数据传输连接方式,主要特点是:
FTP客户端通过向FTP服务器发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号当需要传送数据时,服务器通过TCP端口号20与客户端的临时端口建立数据传输通道,完成数据传输。在建立数据连接的过程中,由服务器主动发起连接,因此被称为主动方式。
我们来通过FTP主动连接模式的报文来具体了解一下连接的过程
首先FTP在进行控制连发起前,需要先进行基本用户登录认证以及文件列表获取等操作;
1.由客户端发起FTP连接请求,FTP协议基于TCP,于是先进行TCP三次握手连接,连接服务器21端口;
2,TCP三次握手建立成功后,服务器也知道了客户端需要请求FTP服务,于是要求客户端提供相应的用户名(客户端在进行FTP连接时需要发送用户名和密码信息);
3,客户端收到服务器的验证需求后,接下来就是连接的验证工作了,发送用户名 user = zte
4.服务器收到后,确认用户名OK,此时需要客户端提供连接的密码password;
5.客户端发送password;
6,服务器端用户名密码验证成功允许用户登录;
7,由客户端发送PORT命令,同时自己随机生成一个数据端口,并将该端口信息通过控制链路发送给服务器;服务器收到PORT命令之后,此时就知道自己是处于主动模式
8,服务器开始与客户端建立数据链接,服务器主动发起连接请求,还是先进行三次握手,可以看到用到的端口号就是上面协商的5001
9,连接建立好后传输数据
10,数据传输完由服务器断开链接
被动方式也称为PASV方式,被动方式的主要特点是:
FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动方式。服务器选择临时端口号并告知客户端当需要传送数据时,客户端主动与服务器的临时端口号建立数据传输通道,完成数据传输。在整个过程中,由于服务器总是被动接收客户端的数据连接,因此被称为被动方式。
同样我们通过具体的报文来展示FTP被动连接的精彩过程
1.由客户端发起FTP连接请求,和主动连接一样还是先进行TCP三次握手连接,连接服务器21端口;
2,TCP三次握手建立成功后,服务器也知道了客户端需要请求FTP服务,于是要求客户端提供相应的用户名(客户端在进行FTP连接时需要发送用户名和密码信息),在此就不一一展示报文仅在报文上展示(这部分与上面的主动连接一致,具体可以查看上边的报文)
3,客户端发送“PASV”命令
4,服务器收到PASV命令后,知道自己此时为被动方式,则开始生成随机的数据端口,以提供给客户端进行数据连接的时候使用,服务器开放自己的1443端口供客户端连接
5,接下来就是FTP的操作命令了,然后建立数据连接,首先还是三次握手,由客户端主动发起,目的端口号就是上面协商的1443
6,然后传输数据,可以看到数据是一个目录
当FTP服务器与FTP客户端均处于同一局域网内,即两者之间互访不存在防火墙或其他安全设备时,主动方式、被动方式均可实现FTP文件分发共享。
如果FTP服务器处于路由器,防火墙或其他NAT设备之后,建议使用被动模式(passive mode)。因为在主动模式下传输数据时,由FTP发起的数据传输一般会被客户端网关的防火墙阻断。
关于主动与被动FTP优缺点的简要总结:
主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。
被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。
针对上述防火墙带来的问题,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。