python实现FTP服务器
基础知识 FTP只通过 TCP连接 , FTP不同于其他服务的是它使用了两个端口 , 一个数据端口和一个命令端口 (或称为控制端口 )。 通常 21端口是命令端口, 20端口是数据端口。当混入主动 /被动模式的概念时,数据端口就有可能不是 20了 FTP主动模式 在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接, 然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。 服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。 FTP服务器命令( 21)端口接受客户端任意端口(客户端初始连接) FTP服务器命令( 21)端口到客户端端口( >1023)(服务器响应客户端命令) FTP服务器数据( 20)端口到客户端端口( >1023)(服务器初始化数据连接到客户端数据端口) FTP服务器数据( 20)端口接受客户端端口( >1023)(客户端发送 ACK包到服务器的数据端口) 主动模式的优点: 服务端配置简单,利于服务器安全管理,服务器只需要开放21端口 主动模式的缺点: 如果客户端开启了防火墙,或客户端处于内网(NAT网关之后), 那么服务器对客户端端口发起的连接可能会失败 FTP被动模式 在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接