FTP是数据传输主流协议。
它采用两个信道(两个TCP连接)进行传输。
第一信道,控制信道,无论何时都是由客户端发起连接。采用客户端服务器模式。服务端监听21端口。用于控制命令的传输。
第二信道,数据信道。根据数据信道是否由服务端发起,区分ActiveMode和PassiveMode。
TCP的知名端口号(服务端的监听端口),21号,是控制信道的端口。
第一信道,主要任务就是认证,控制命令(如查看文件列表等)等。
但数据的传输走的是第二信道,包括文件列表数据的传输。
第二信道(数据信道),是由服务器主动发起的,即是ActiveMode。
第二信道(数据通道),是服务器被动接收的,即是PassiveMode。
可见,第二信道,即数据信道(传输数据而非控制命令),是由服务端主动发起的,即是主动模式(ActiveMode);如果不是服务器主动发起的,即是被动模式(PassiveMode)。
注意:第一信道中,客户端向FTP服务器发送的数据中,含有PORT(a,b,c,d,e,f)这里a,b,c,d,e,f每上表示0~255的数据,其中a,b,c,d表示客户端的IP,e,f表示客户端的第二通道的端口(计算方法是:e*256+f)。这主要是为了供第二通道中,服务端主动发起向客户端的连接使用的。
注意:由于用户名和密码都是明文传输,易于被截获,因此,对于FTP来说,使用匿名登陆反而更安全。
客户端第二通道是IP和端口是: 202.100.1.100,4*256+38
第一次传入PORT后,紧跟的是一个控制命令,LIST(查看列表)。
然后,服务端20号端口通过第二信道与客户端的4*256+38端口建立连接,并传送文件列表。
当单击文件列表中的一个文件,又出现了一个PORT发给服务端(注意这次的端口号有变化,4*256+42),接着又发了一个RETR命令,后面跟着所请求的文件。
这时,服务端20号端口又通过第二信道与客户端4*256+42端口建立连接,并传送该文件。(注意,与第一次不是同一个端口号,也就是说又建立了一次连接)
注意:这里是又建立了一次连接。
第二信道,服务器被动接受为被动模式(PassiveMode)。
在第一信道中,客户端发送PASV命令,询问服务端是否支持被动模式。服务端回复227表示支持,这时a,b,c,d,e,f表示服务端第二信道的IP和端口。
目前一般使用的是PassiveMode模式,客户端连接后,一般会发PASV询问服务器是否支持PassiveMode,如果支持,则使用PassiveMode。