1、被动模式(PASV)
在被动模式下,FTP客户端随机开启一个大于1024的端口N(14056)向服务器的21号端口发起控制连接(TCP三次握手),同时开放N+1(14056+1=14057)号端口。然后向服务器发送PASV命令(Request),通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听(这里是51851),然后通知客户端,自己的数据端口是P(Response最后的202和139,256*202+139=51851)。客户端收到命令后,会通过N+1号端口与服务器的端口P建立数据连接(TCP三次握手),然后在两个端口之间进行数据传输。
最后,TCP四次握手断开数据连接。
控制连接: 客户端(N)–>服务器(21)
数据连接: 客户端(N+1)–>服务器( P)
2、主动模式(PORT)
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起控制连接(TCP三次握手),然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令,告诉服务器客户端采用主动模式以及开放的端口号。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)与客户端指定的端口N+1进行数据连接(TCP三次握手),然后在两个端口之间进行数据传输。
最后,TCP四次握手断开数据连接。
控制连接: 客户端(N)–>服务器(21)
数据连接: 客户端(N+1)<–服务器(20)