FTP

💡 低优先级
真题练习
考查概率比较小,了解 FTP 的基本原理,以及 数据连接 和 控制连接 的功能即可。

工作原理

FTP 工作原理FTP 客户端ClientFTP 服务器Server控制连接 (端口 21)命令与响应数据连接 (端口 20 或动态)文件传输工作流程:1建立连接• 建立 TCP 控制连接 (端口 21)2身份验证• 用户名和密码验证3命令交换• 通过控制连接发送命令4数据传输• 建立数据连接传输文件传输模式:主动模式 (Active)客户端开放端口服务器主动连接被动模式 (Passive)服务器开放端口客户端主动连接文件类型:ASCII 模式二进制模式常用命令LIST (列表) • RETR (下载) • STOR (上传)PWD (当前目录) • CWD (切换目录) • QUIT (退出)常见状态码200 (成功) • 220 (连接就绪) • 226 (传输完成) • 530 (认证失败)

FTP 的传输流程如下:

  1. 建立连接
    • FTP 基于 TCP 协议运行。客户端与服务器之间首先建立一条 控制连接(默认端口 21),用于命令与响应的传输。
    • 在实际传输数据时,还需要建立一条 数据连接
  2. 身份验证
    • 建立控制连接后,客户端需提供用户名和密码完成身份验证。
    • 部分服务器支持 匿名 FTP,允许用户以通用用户名(通常为 anonymous)和邮箱地址作为密码进行访问。
  3. 命令与响应
    • 所有的 命令与响应 都通过控制连接完成。
    • 客户端发送命令(如上传、下载、列目录等),服务器返回 状态码(如成功、失败、权限不足),用于指示执行结果。
  4. 数据连接的建立
    • 当需要传输文件或目录列表时,FTP 会额外建立数据连接。
    • 常见的两种模式:
      • 主动模式(Active Mode):客户端开放端口,等待服务器回连进行数据传输。
      • 被动模式(Passive Mode):服务器开放端口,等待客户端发起连接。
  5. 文件传输
    • 数据连接建立后即可传输数据,包括文件内容或目录信息。
    • 支持两种传输模式:
      • ASCII 模式:适合文本文件,自动进行换行符转换。
      • 二进制模式:适合图像、音频、压缩包等二进制文件,逐字节传输,避免数据损坏。
  6. 关闭会话
    • 文件传输完成或用户退出时,客户端通过 QUIT 命令请求关闭会话。
    • 服务器响应后,释放控制连接与数据连接。

控制连接

FTP 控制连接 (TCP 端口 21)FTP 客户端发送命令接收响应FTP 服务器处理命令返回状态码控制连接持久连接常见 FTP 命令与响应:命令:USER usernamePASS passwordLISTCWD /path响应:220 Ready230 Login OK150 Opening250 OK特点:• 始终保持打开状态• 传输命令和状态码• 使用 TCP 端口 21• QUIT 命令关闭连接• 控制整个 FTP 会话
  • 控制连接 是 FTP 会话中首先建立的连接,通常使用 TCP 端口 21
  • 主要作用是传输 命令和响应,用于 控制 FTP 会话的行为
    • 客户端通过控制连接发送命令(如登录、列目录、切换目录)。
    • 服务器通过控制连接返回 状态码 和响应消息,指示命令执行结果(成功、失败、权限不足等)。
  • 控制连接始终保持打开(持久连接),直到用户退出会话或发送 QUIT 命令。

数据连接

  • 数据连接 专用于 文件内容和目录列表的传输,端口号由控制连接中的命令协商确定。
  • 建立方式有两种模式:
    • 主动模式(Active Mode)
      • 客户端开放一个本地端口,并通过控制连接通知服务器。
      • 服务器主动连接到客户端该端口完成数据传输。
    • 被动模式(Passive Mode)
      • 服务器开放一个本地端口,并通过控制连接告知客户端。
      • 客户端主动连接到服务器该端口完成数据传输。
    • 数据连接 在需要时建立,用于 上传文件(客户端 → 服务器)或 下载文件(服务器 → 客户端)。

下图展示了 FTP 数据连接两种建立方式的区别:

sequenceDiagram
    participant Client as 客户端
    participant Server as 服务器

    Note over Client,Server: 主动模式 (Active Mode)
    Client->>Server: 建立控制连接 (端口 21)
    Client->>Server: PORT 命令 (告知客户端开放的端口)
    Server-->>Client: 建立数据连接 (连接到客户端指定端口)
    Client->>Server: 发起数据传输请求 (如 LIST/RETR)
    Server-->>Client: 通过数据连接传输数据

    Note over Client,Server: 被动模式 (Passive Mode)
    Client->>Server: 建立控制连接 (端口 21)
    Client->>Server: PASV 命令 (请求服务器开放数据端口)
    Server-->>Client: 返回数据端口号
    Client->>Server: 连接到服务器指定端口(数据连接)
    Client->>Server: 发起数据传输请求
    Server-->>Client: 通过数据连接传输数据