FTP协议,即文件传输协议(File Transfer Protocol),是用于在网络上进行文件传输的一套标准协议。它工作在OSI模型的第七层,TCP模型的第四层,即应用层,并使用TCP传输而非UDP。客户在与服务器建立连接前要经过一个“三次握手”的过程,以保证客户与服务器之间的连接是可靠的。
FTP协议的工作原理是,FTP客户与服务器之间建立双重连接,即控制连接和数据连接。控制连接负责传输控制信息,并对客户命令提供响应。当涉及到大量数据传输时,服务器和客户之间需要再建立一个数据连接,进行实际的数据传输。一旦数据传输结束,数据连接就相继撤销,但控制连接依然存在,客户可以继续发出命令,直到客户退出或者服务器主动断开。
使用FTP,用户可以上传文件到远程服务器或者从远程服务器下载文件。该协议通常用于Web开发、软件发布、文件备份等场景。FTP客户端软件允许用户输入FTP服务器的地址、用户名和密码,以便与服务器建立连接。一旦连接建立,用户可以像操作本地文件一样在本地计算机和远程计算机之间进行文件传输。
FTP协议的优点包括:
然而,FTP协议也存在一些缺点:
总的来说,FTP协议在网络文件传输中发挥着重要作用,但用户在使用时也需要注意其存在的缺点和潜在风险。
FTP 协议中的连接与 HTTP 协议不同。 在HTTP协议中,客户和服务器可以只建立一个连接,在连接中传递请求报文和应答报文。在连接中既可以传递命令(如GET),也可以传递文档数据。
在FTP协议中有两个连接:控制连接和数据连接。控制连接专门用来传输控制信息,如用户标识、口令、用户命令等。数据连接则专门用来传输数据,例如目录文件列表、下载的文件和上传的文件。
通常情况下,FTP服务器会占用两个端口,21端口用于控制连接,20端口用于数据连接。FTP客户端首先要连接服务器的21端口,这时建立的连接是控制连接,控制连接传递用户的命令和服务器的响应。
如果客户端和服务器之间需要有数据传输(例如下载文档或显示文件列表),这时服务器的20号端口和客户端的一个随机端口建立数据连接,数据发送完毕后,就关闭数据连接。
控制连接一旦建立,在整个会话过程中始终存在,直到用户退出。数据连接在传输数据前建立,数据传输完毕后就关闭。下一次传输数据时要重新建立新的数据连接。因此,控制连接是持久性的,数据连接是暂时性的。
数据连接在FTP协议中扮演着至关重要的角色,负责实际的文件内容传输。根据建立连接时发起方的不同,数据连接存在两种模式:主动模式(PORT)和被动模式(PASV)。
在主动模式下,FTP客户端从任意的非特殊端口(通常是大于1024的端口)连接到FTP服务器的命令端口(默认是21端口)。一旦命令连接建立成功,客户端会在另一个随机端口(N+1,其中N是初始连接使用的端口号,且N+1仍然大于1024)上监听,并通过这个端口发送PORT命令给服务器,告知服务器自己用于数据传输的本地端口号。随后,服务器会主动尝试连接到客户端指定的这个数据端口,以建立数据连接。这种模式下,服务器负责发起数据连接的建立。
相比之下,被动模式下FTP客户端的流程类似,也是首先连接到服务器的命令端口(21端口)。但在建立数据连接时,客户端会发送PASV命令给服务器,请求服务器进入被动模式并等待客户端的连接。服务器在收到PASV命令后,会打开一个随机的大于1024的端口进行监听,并通过命令连接将这个端口号告知客户端。然后,客户端会主动连接到服务器指定的这个端口,从而建立数据连接。这种模式下,客户端负责发起数据连接的建立。
两种模式的主要区别在于数据连接建立的发起方不同。主动模式由服务器发起连接,适用于客户端位于防火墙之后或具有固定IP地址的情况;而被动模式由客户端发起连接,更适用于客户端处于NAT网关之后或服务器位于防火墙内的情况。根据具体的网络环境和配置,可以选择合适的数据连接模式来确保文件传输的顺利进行。
无论使用哪种模式,数据连接都用于在FTP客户端和服务器之间传输实际的文件内容。它独立于控制连接,但与控制连接协同工作,共同实现文件的可靠传输。
1、建立连接:
2、用户认证:
3、命令交互:
4、数据传输:
5、断开连接:
展开代码登录: Request:USER zzz\r\n(请求以用户名登录) response:331 Please specify the password.\r\n(请求用户输入密码) Request:PASS 密码\r\n(发送用户密码) response:230 User logged in, proceed.\r\n(用户登录成功,可以继续操作) 列出目录:(这里只是给出一个例子,还有其他的指令就不过多阐述了) Request:LIST\r\n(请求列出当前目录内容) response:150 Opening BINARY mode data connection for LIST.\r\n(准备打开二进制模式的数据连接以进行列表操作) response:(包含目录内容的数据块) response:226 Transfer complete.\r\n(传输完成) 退出: Request:QUIT\r\n(请求退出FTP会话) response:221 Goodbye.\r\n(会话结束,服务器关闭连接)
**1、USER:**客户端使用USER命令来向服务器表明身份。USER命令的参数是用户名。例如USER anonymous表明用户名为匿名,USER admin表明用户名为admin。有些FTP服务器支持匿名登录,用户名可以是anonymous。而对于那些不支持匿名登录的FTP服务器,就需要输入正确的用户名。
**2、PASS:**PASS命令通常紧接着USER命令,用来向服务器传递用户的口令。PASS后面是用户输入的口令。对于允许匿名登录的FTP服务器,口令可以为空;对于不允许匿名登录的FTP服务器,口令必须是USER命令所指定用户的口令,这样才能登录。
**3、LIST:**列出FTP服务器当前目录下的文件和子目录。
**4、CWD:**改变当前目录,例如,CWD/表示进入FTP服务器的根目录。
**5、CDUP:**回到上一级目录。
**6、PWD:**显示当前所在目录。
**7、RETR:**下载文件,RETR命令的参数是要下载的文件名。例如,RETR aa.txt表示下载FTP服务器当前目录下的aa.txt文件。
**8、STOR:**将本地硬盘的文件上传到FTP服务器上。STOR命令的参数是要上传的文件名。
**9、DELE:**删除FTP服务器上的文件。DELE命令的参数是服务器上要删除的文件名。
**10、MKD:**在FTP服务器上新建目录,目录名作为MKD命令的参数。
**11、RMD:**删除FTP服务器上的目录,要删除的目录名作为RMD命令的参数。
**12、PORT:**在主动模式中,客户端用PORT命令告诉服务器自己的数据连接端口,让服务器发起连接。例如,PORT 202,117,113,2,8,12告诉服务器客户端的IP地址是202.117.113.2,数据连接端口是8X256+12=2060。在被动模式中,服务器会将自己的数据连接端口通过控制连接告诉客户端,告诉客户端服务器的数据连接端口,让客户端发起连接。
**13、PASV:**客户端通知服务器采用被动模式。
**14、HELP:**帮助。
**15、QUIT:**退出。
本文作者:zzz
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!