Ftp深入理解

FTP概述

文件传输协议FTP(File Transfer Protocol)是一个用于计算机网络上在客户端和服务器之间进行文件传输的应用层协议,只能通过TCP连接,所以是可靠传输。FTP不同于其他服务的是它使用了两个端口, 数据端口(端口号为20)和控制端口(端口号为21)。FTP分为主动(Port)模式和被动(Passive)模式。

Port模式

主动模式下,FTP客户端从任意的非特殊的端口(注:X> 1023,TCP/IP实现给临时端口分配1024~5000之间的端口号。大于5000的端口号是为其他服务器预留的–Internet上并不常用的服务)连入到FTP服务器的控制端口21端口,然后客户端监听X+1端口,并且通过X+1端口发送控制命令给FTP服务器。服务器会反过来连接用户本地指定的数据端口,即,20端口。如下图所示:
在这里插入图片描述
Port模式的FTP步骤如下:
1、 客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时端口X作为它的源端口;
2、 服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口X;
3、 客户端发送一个ACK(确认)包,连接建立成功,以后客户端就使用这个连接来发送FTP命令,服务器端使用这个连接来发送FTP应答;
4、 当用户请求一个列表(List)请求或者发起一个要求发送或者接受文件的请求,客户端软件使用PORT命令,这个命令包含了一个暂时的端口X+1,客户端希望服务器在打开一个数据连接时候使用这个暂时端口X+1;PORT命令也包含了一个IP地址,这个IP地址通常是客户自己的IP地址,而且FTP也支持第三方(third-party)模式,第三方模式是客户端告诉服务器端打开与其它主机的连接;
5、 服务器端发送一个SYN包给客户端的暂时端口X+1,源端口为20,;
6、 客户端以暂时端口X+1为源端口,目的端口为20发送一个SYN ACK包;
7、 服务器端接收到后发送一个ACK包,数据传输端口打开;
8、 发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送,(注:STOR表示客户端要发送数据,RETR表示服务器段发送数据),所有TCP段都需要对方进行ACK确认;
9、 当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以ACK确认;
10、 客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;当客户端决定结束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器同样也发送它的FIN,客户端用ACK来确认。

由于FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口,所以对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,为了减少外部系统的攻击,通常会被阻塞的。

如果网络中使用了NAT(注:网络地址转换),那么NAT的网关同样也需要声明相应的端口,网关需要把在PORT命令中指定的IP地址翻译成分配给客户的地址,然后重新计算TCP的Checksum ;如果网关没有正确地执行这个操作,FTP通信失败。

Passive模式

下图描述了Passive模式的FTP的步骤,步骤1到3和Port模式FTP相同,步骤9到11同样与Port模式FTP最后三步相同。

在这里插入图片描述
1、 客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使用暂时端口X作为它的源端口;
2、 服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用的暂时端口X;
3、 客户端发送一个ACK(确认)包,连接建立成功,以后客户端就使用这个连接来发送FTP命令,服务器端使用这个连接来发送FTP应答;
4、当用户请求一个列表(List)或者发送或接收文件时候,客户端软件发送PASV命令给服务器端表明客户端希望进入Passive模式;
5、服务器端进行应答,应答包括服务器的IP地址和一个暂时的端口Y,即,客户端在打开数据传输连接时使用的端口;
6、客户端发送一个SYN包,源端口为客户端自己选择的一个暂时端口X+1,目的端口为服务器在PASV应答命令中指定的暂时端口号Y;
7、服务器端发送SYN ACK包给客户端,目的端口为客户端自己选择的暂时端口X+1,源端口为PASV应答中指定的暂时端口号Y;
8、客户端发送一个ACK包;
9、发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(如STOR表示客户端要发送数据,RETR表示服务器段发送数据),所有TCP段都需要对方进行ACK确认;
10、当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以ACK确认;
11、客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;当客户端决定结束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器同样也发送它的FIN,客户端用ACK来确认。

被动FTP的客户端需要与服务器端建立两个连接,其中一个连到服务器端的一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

猜你喜欢

转载自blog.csdn.net/qq_38685754/article/details/87946990
今日推荐