2 FTP基本工作模式
2.1 术语
2.1.1 控制连接(Control-Connection, CC)
总是有客户端主动发起,连接ftp服务器的21端口;
双方在控制连接上发送/响应ftp命令。
2.1.2 数据连接(Data-Connection, DC)
ftp客户端和服务器通过数据连接实现数据和文件传输;
数据连接的2个端点的IP不一定是控制连接的2个端点的IP,也就是说,ftp客户端可以向服务器发送一个文件下载请求,同时,请求将文件下载到另外一台主机;同时,ftp服务器也可以在响应客户端的PASV命令中,指定不同于本机的IP。
2.1.3 数据端口
用来监听数据连接请求或发起数据连接请求(仅ftp服务器端)的端口号。
数据端口可以监听在客户端主机,也可以在服务器端主机。
2.1.4 默认数据端口
客户端的默认数据监听端口为当前控制连接的本地端口号。
服务器端的默认连接发起端口为20。
客户端可以通过PORT命令通知服务器使用非默认数据端口;
2.1.5 FTP命令
所有的ftp命令都由可打印ascii字符组成并且都以”\r\n”结尾。在没有收到”\r\n”结尾字符串前,不要处理该命令。
客户端发起的命令一般为3到4个英文字母。服务器端的应答命令为3位十进制数字(如220)。
FTP命令是大小写不敏感的。
命令后如果跟参数,必须以一个或多个空格隔开;如果没有参数,直接跟”\r\n”。
2.1.6 FTP PORT命令
PORT命令从客户端通过控制连接发送到服务器,格式如下:
“PORT ip1,ip2,ip3,ip4,port1,port2\r\n”
该命令告诉服务器:对于随后的数据传输请求,请向由 <ip1.ip2.ip3.ip4> 指定的主机的(port1*256+port2)端口发起数据连接。
服务器端的(成功)应答命令格式如下:
“200 PORT command successful.\r\n”
如果错误,可能的应答命令为:
500 Syntax error, command unrecognized.
This may include errors such as command line too long.
501 Syntax error in parameters or arguments.
421 Service not available, closing control connection.
This may be a reply to any command if the service knows it
must shut down.
530 Not logged in.
2.1.7 FTP PASV命令
PASV命令从客户端通过控制连接发送到服务器,格式如下:
“PASV\r\n”
该命令要求服务器进入passive模式,即在服务器端开放一个临时的数据连接监听端口,然后客户端向该端口发起数据连接请求。
服务器端的(成功)应答命令格式如下:
“227 Entering Passive Mode. ip1,ip2,ip3,ip4,p1,p2\r\n”
其中 <ip1.ip2.ip3.ip4> 为服务器IP,(p1*256+p2)为服务器监听数据端口号。
如果错误,可能的应答命令为:
500 Syntax error, command unrecognized.
This may include errors such as command line too long.
501 Syntax error in parameters or arguments.
502 Command not implemented.
421 Service not available, closing control connection.
This may be a reply to any command if the service knows it
must shut down.
530 Not logged in.
2.2 工作模式
2.2.1 常规工作模式
该模式下,双方使用默认数据端口完成数据传输。
对该模式的支持以后再考虑。
2.2.2 主动打开模式——PORT模式
在该模式下,客户端首先通过在控制连接上发送一个PORT命令,告诉服务器自己的一个临时数据端口。服务器连接临时数据端口,建立数据连接。双方在数据连接上完成数据传输。
数据传输完毕,一般由服务器端主动关闭连接。
2.2.3 被动打开模式——PASIVE模式
在该模式下,客户端首先通过在控制连接上发送一个PASIVE命令,要求服务器进入passive模式。服务器响应客户端的PASIVE请求:
“227 Entering Passive Mode. ip1,ip2,ip3,ip4,p1,p2\r\n”
客户端解析上面的应答,获得服务器的监听IP:端口( <ip1.ip2.ip3.ip4> : <p1*256+p2> ),然后向该端口发起数据连接请求。
注意:FTP服务器应答的IP可以不是自己的IP。
数据传输完毕,一般由服务器端主动关闭连接。
2.1 术语
2.1.1 控制连接(Control-Connection, CC)
总是有客户端主动发起,连接ftp服务器的21端口;
双方在控制连接上发送/响应ftp命令。
2.1.2 数据连接(Data-Connection, DC)
ftp客户端和服务器通过数据连接实现数据和文件传输;
数据连接的2个端点的IP不一定是控制连接的2个端点的IP,也就是说,ftp客户端可以向服务器发送一个文件下载请求,同时,请求将文件下载到另外一台主机;同时,ftp服务器也可以在响应客户端的PASV命令中,指定不同于本机的IP。
2.1.3 数据端口
用来监听数据连接请求或发起数据连接请求(仅ftp服务器端)的端口号。
数据端口可以监听在客户端主机,也可以在服务器端主机。
2.1.4 默认数据端口
客户端的默认数据监听端口为当前控制连接的本地端口号。
服务器端的默认连接发起端口为20。
客户端可以通过PORT命令通知服务器使用非默认数据端口;
2.1.5 FTP命令
所有的ftp命令都由可打印ascii字符组成并且都以”\r\n”结尾。在没有收到”\r\n”结尾字符串前,不要处理该命令。
客户端发起的命令一般为3到4个英文字母。服务器端的应答命令为3位十进制数字(如220)。
FTP命令是大小写不敏感的。
命令后如果跟参数,必须以一个或多个空格隔开;如果没有参数,直接跟”\r\n”。
2.1.6 FTP PORT命令
PORT命令从客户端通过控制连接发送到服务器,格式如下:
“PORT ip1,ip2,ip3,ip4,port1,port2\r\n”
该命令告诉服务器:对于随后的数据传输请求,请向由 <ip1.ip2.ip3.ip4> 指定的主机的(port1*256+port2)端口发起数据连接。
服务器端的(成功)应答命令格式如下:
“200 PORT command successful.\r\n”
如果错误,可能的应答命令为:
500 Syntax error, command unrecognized.
This may include errors such as command line too long.
501 Syntax error in parameters or arguments.
421 Service not available, closing control connection.
This may be a reply to any command if the service knows it
must shut down.
530 Not logged in.
2.1.7 FTP PASV命令
PASV命令从客户端通过控制连接发送到服务器,格式如下:
“PASV\r\n”
该命令要求服务器进入passive模式,即在服务器端开放一个临时的数据连接监听端口,然后客户端向该端口发起数据连接请求。
服务器端的(成功)应答命令格式如下:
“227 Entering Passive Mode. ip1,ip2,ip3,ip4,p1,p2\r\n”
其中 <ip1.ip2.ip3.ip4> 为服务器IP,(p1*256+p2)为服务器监听数据端口号。
如果错误,可能的应答命令为:
500 Syntax error, command unrecognized.
This may include errors such as command line too long.
501 Syntax error in parameters or arguments.
502 Command not implemented.
421 Service not available, closing control connection.
This may be a reply to any command if the service knows it
must shut down.
530 Not logged in.
2.2 工作模式
2.2.1 常规工作模式
该模式下,双方使用默认数据端口完成数据传输。
对该模式的支持以后再考虑。
2.2.2 主动打开模式——PORT模式
在该模式下,客户端首先通过在控制连接上发送一个PORT命令,告诉服务器自己的一个临时数据端口。服务器连接临时数据端口,建立数据连接。双方在数据连接上完成数据传输。
数据传输完毕,一般由服务器端主动关闭连接。
2.2.3 被动打开模式——PASIVE模式
在该模式下,客户端首先通过在控制连接上发送一个PASIVE命令,要求服务器进入passive模式。服务器响应客户端的PASIVE请求:
“227 Entering Passive Mode. ip1,ip2,ip3,ip4,p1,p2\r\n”
客户端解析上面的应答,获得服务器的监听IP:端口( <ip1.ip2.ip3.ip4> : <p1*256+p2> ),然后向该端口发起数据连接请求。
注意:FTP服务器应答的IP可以不是自己的IP。
数据传输完毕,一般由服务器端主动关闭连接。