> For the complete documentation index, see [llms.txt](https://lfool.gitbook.io/computer-network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://lfool.gitbook.io/computer-network/di-liu-zhang-ying-yong-ceng/3.-wen-jian-chuan-shu-xie-yi-ftp.md).

# 3. 文件传输协议 FTP

## 1. 文件传送协议

**文件传送协议 FTP（File Transfer Protocol）**：提供不同种类主机系统（硬、软件体系等都可以不同）之间的文件传输能力

**简单文件传送协议 TFTP（Trivial File Transfer Protocol）**

![](https://2396550738-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M8zvqNNVZctOHx6v8No%2F-MESEfpR1LEfwk6mqK4i%2F-MESHTEQqt9u6H3Pt9De%2Fimage.png?alt=media\&token=8ddcb7ea-9207-4712-a70d-5d076881d4ca)

## 2. FTP 服务器 & 用户端

FTP 是基于客户 / 服务器（C/S）的协议

用户通过一个客户机程序连接至在远程计算机上运行的服务器程序

依照 FTP 协议提供服务，进行文件传送的计算机就是 **FTP 服务器**

连接 FTP 服务器，遵循 FTP 协议与服务器传送文件的电脑就是 **FTP 客户端**

## 3. FTP 工作原理

### 3.1 登录

#### 用户名 & 密码

#### 匿名登录

* 互连网中有很大一部分 FTP 服务器被称为“匿名”（Anonymous）FTP 服务器。这类服务器的目的是向公众提供文件拷贝服务，不要求用户事先在该服务器进行**登记注册**，也不用取得FTP服务器的**授权**。&#x20;
* Anonymous（匿名文件传输）能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件，而不必是该远程主机的注册用户。用户使用特 殊的用户名“anonymous”登录FTP服务，就可访问远程主机上公开的文件

### 3.2 连接

**FTP 使用 TCP 实现可靠传输**

服务器进程分为：

* **1 个主进程：**&#x8D1F;责接受新的请求
* **n 个从进程：**&#x8D1F;责处理单个请求

![](https://2396550738-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M8zvqNNVZctOHx6v8No%2F-MESEfpR1LEfwk6mqK4i%2F-MESJWBdl_5l0Ving-pN%2Fimage.png?alt=media\&token=19976484-0e7e-4efa-b5f4-cdadf9f729bc)

**主进程**的工作步骤：

1. 打开熟知端口（21），使客户进程能够连接上
2. 等待客户进程发出连接请求
3. 启动从属进程处理客户进程发来的请求，从属进程对客户进程的请求处理完毕后即终止，但从属进程在运行期间根据需要可能创建其他一些子进程
4. 回到等待状态，继续接受其他客户进程发来的请求

**控制**连接**始终**保持

**数据**连接保持**一会**（待文件传输结束关闭）

是否使用 TCP 20 端口建立**数据连接**与**传输模式**有关

* **主动**方式使用 TCP 20 端口
  * 客户发送连接请求时，服务器主动从 20 端口和客户端建立连接
* **被动**方式由服务器和客户端自行协商决定（端口 > 1024）
  * 客户端发送连接请求时，给服务端发送一个端口请求，服务端返回一个端口，客户端通过该端口连接

**FTP 传输模式：**

* **文本模式**：ASCII 模式，以文本序列传输数据
* **二进制模式**：Binary 模式，以二进制序列传输数据
