FTP原理简介
FTP有两种模式,即主动模式(Active Mode)和被动模式(Passive Mode),主要区别在谁在监听数据端口。
具体见RFC959
------------- |/---------\| || User || -------- ||Interface|<--->| User | |\----^----/| -------- ---------- | | | |/------\| FTP Commands |/----V----\| ||Server|<---------------->| User || || PI || FTP Replies || PI || |\--^---/| |\----^----/| | | | | | | -------- |/--V---\| Data |/----V----\| -------- | File |<--->|Server|<---------------->| User |<--->| File | |System| || DTP || Connection || DTP || |System| -------- |\------/| |\---------/| -------- ---------- ------------- Server-FTP USER-FTP
User PI
(user-protocol interpreter):用户协议解释器
Server PI
(server-protocol interpreter):服务协议解释器
DTP
(data transfer process):数据传输过程,建立和管理数据连接。 DTP 可以是被动的或主动的。
1.主动模式
1.1 主动模式的过程
FTP服务器在开启后一直在监听21号端口等待客户端通过任意端口进行连接,客户端通过任意端口port1
连接服务器21号端口
成功后,服务器通过该命令套接字发送各种FTP命令(CD、DIR、QUIT...)。当要发送的命令涉及到数据传输的时候,服务器和客户端间就要开启数据通道,如果此时客户端处于主动模式时,客户端开启并监听一个大于1024的随机端口port2
,并通过命令套接字向服务器发送PORT命令通告客户端处于主动模式且正在监听port2。服务器在收到客户端的PORT命令后,使用端口20连接客户端port2
(数据端口使用20只是个惯例,其实不适用影响不大),并完成数据传输。
1.2 报文交互
PORT命令说明:(通常格式为【PORT A1,A2,A3,A4,P1,P2】,其中A1,A2,A3,A4为客户端IP地址,P1,P2为随机的一个数据连接端口号,端口号等于P1*256+P2)
比如” PORT 223,3,123,41,99,165 “,指示客户端ip为223.3.123.41,客户端开启的随机端口port2 = 99 * 265 + 165 = 26400,在服务器返回200 PORT command successful之后,客户端才发送获取文件命令RETR。
1.3 注意事项
主动模式需要在客户端开放数据通道端口,建立数据通道依赖与客户端本地网络,如果本地网络没有放行端口或者有防火墙会导致连接无法建立。
2.被动模式
2.1 被动模式的过程
为了给客户端带来方便,FTP被动模式下,客户端发送Request: Pasv命令,服务器在接收到命令后,主动开启一个大于1024的端口port并发送响应Response: 227 Entering Passive Mode(...),客户端主动发起连接到服务器的port,并完成数据传输。在被动模式下客户端不需要监听任何端口,因此在客户端存在某些防火墙规则的情况下会更加适合。
2.2 报文交互
PASV命令说明:(通常格式为【PASV A1,A2,A3,A4,P1,P2】,其中A1,A2,A3,A4为服务端IP地址
注,P1,P2为随机的一个数据连接端口号,端口号等于P1*256+P2)
比如” PASV 104,255,221,41,113,102 “,指示客户端ip为104.255.221.41,服务端开启的随机端口random port = 113 * 265 + 102 = 30047
2.3 注意事项
被动模式下,服务端的被动端口通常由被动端口范围参数指定,服务端的被动端口范围的端口,需要在防火墙中放行。
注:VPC网络环境下,服务端IP地址返回的是私网网卡的私网IP地址,通常需要在FTP软件中指定pasv ip为服务器的公网IP地址,否则可能会导致客户端去连接一个私网地址,无法连接上。
以下均以安装被动模式FTP为例
【windows】
1.通过IIS部署FTP
具体部署过程见:https://help.aliyun.com/document_detail/92046.html
2.通过filezilla server部署FTP(第三方软件)
环境:Windows Server 2016 数据中心版 64位中文版
2.1安装filezilla server
- 在实例内部访问如下FileZilla官网,下载FileZilla Server软件,然后安装并运行FileZilla Server。
2.2配置filezilla server
- 选择configure进行配置
- 设备被动端口范围和被动IP
- 设备FTP用户,密码及FTP路径,并保存
- 测试FTP连接
【linux】
通过vsftp搭建FTP
官网文档:https://help.aliyun.com/document_detail/142212.html