文件传输协议FTP(File Transfer Protocol)
2026-02-08
网络
00
请注意,本文编写于 55 天前,最后修改于 5 天前,其中某些信息可能已经过时。

目录

FTP概述:
两个连接:
两个模式:
FTP报文:
FTP用户和FTP服务器交互
具体报文内容:
常见指令:

FTP概述:

FTP协议,即文件传输协议(File Transfer Protocol),是用于在网络上进行文件传输的一套标准协议。它工作在OSI模型的第七层,TCP模型的第四层,即应用层,并使用TCP传输而非UDP。客户在与服务器建立连接前要经过一个“三次握手”的过程,以保证客户与服务器之间的连接是可靠的。

FTP协议的工作原理是,FTP客户与服务器之间建立双重连接,即控制连接和数据连接。控制连接负责传输控制信息,并对客户命令提供响应。当涉及到大量数据传输时,服务器和客户之间需要再建立一个数据连接,进行实际的数据传输。一旦数据传输结束,数据连接就相继撤销,但控制连接依然存在,客户可以继续发出命令,直到客户退出或者服务器主动断开。

使用FTP,用户可以上传文件到远程服务器或者从远程服务器下载文件。该协议通常用于Web开发、软件发布、文件备份等场景。FTP客户端软件允许用户输入FTP服务器的地址、用户名和密码,以便与服务器建立连接。一旦连接建立,用户可以像操作本地文件一样在本地计算机和远程计算机之间进行文件传输。

FTP协议的优点包括:

  1. 跨系统文件共享:FTP服务器允许不同操作系统和文件存储方式的计算机之间进行文件传输,因此成为跨系统文件共享的理想选择。
  2. 传输速度快:由于FTP协议采用TCP协议进行传输,它具有高效稳定的传输速度,保证了在文件上传和下载过程中能够获得良好的性能和用户体验。
  3. 安全性较高:FTP服务器允许设置不同的用户账户和权限,以保护数据的安全性。

然而,FTP协议也存在一些缺点

  1. 安全性问题:传统的FTP协议采用明文传输方式,存在被黑客攻击的风险,数据容易被窃取和篡改。
  2. 传输效率低:由于FTP协议使用TCP协议,每次传输都需要建立连接和断开连接,对于传输较小文件的情况,连接的建立和断开会占用大部分时间,导致传输效率降低。
  3. 操作复杂:传统的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客户端和服务器之间传输实际的文件内容。它独立于控制连接,但与控制连接协同工作,共同实现文件的可靠传输。

FTP报文:

FTP用户和FTP服务器交互

1、建立连接

  • FTP客户端(用户使用的软件)向FTP服务器发出连接请求,指定服务器的IP地址和端口号(默认为21)。
  • 服务器在接收到请求后,如果端口21是启用的并且可以接受连接,它会返回一个应答码(如220),表示服务已就绪。

2、用户认证

  • 客户端发送用户名和密码给服务器进行身份验证。
  • 服务器验证用户名和密码,如果正确,返回应答码(如331),要求客户端发送密码。
  • 客户端发送密码后,服务器验证密码,如果正确,返回应答码(如230),表示用户已登录。

3、命令交互

  • 用户现在可以通过FTP客户端执行各种命令,如列出目录(LIST或LS命令)、切换目录(CWD命令)、上传文件(PUT或STOR命令)或下载文件(GET或RETR命令)等。
  • 对于每个命令,服务器都会返回相应的应答码和消息,告知命令执行的状态或结果。例如,如果列表命令成功,服务器会返回应答码226以及目录内容。

4、数据传输

  • 当用户上传或下载文件时,FTP协议会建立一个新的数据连接来处理文件数据的传输。这通常涉及客户端和服务器之间的PORT(主动模式)或PASV(被动模式)命令的交互,以确定数据连接的端口和传输方式。
  • 在数据传输过程中,服务器和客户端会交换数据块,直到文件传输完成。

5、断开连接

  • 当用户完成所有操作并准备断开连接时,会发送一个退出命令(QUIT)给服务器。
  • 服务器在接收到退出命令后,会关闭数据连接和控制连接,并返回应答码(如221),表示服务已关闭。
  • 在整个交互过程中,FTP协议确保了数据的可靠传输和命令的正确执行,同时通过应答码和消息提供了丰富的状态反馈。这使得用户能够有效地与FTP服务器进行交互,完成文件传输和管理任务。
具体报文内容:
展开代码
登录: 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 许可协议。转载请注明出处!