FTP

应用层

💡 低优先级

考查概率比较小,了解 FTP 的基本原理,以及 数据连接 和 控制连接 的功能即可。

工作原理

FTP 的传输流程如下:

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

控制连接

  • 控制连接 是 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: 通过数据连接传输数据

相关笔记

  • TCP
  • 传输层
  • UDP