12. 文件传输协议
- [12. 文件传输协议](#12. 文件传输协议)
-
- [12.1 TCP/IP 文件传输协议(FTP)](#12.1 TCP/IP 文件传输协议(FTP))
- [12.2 FTP 进程模型](#12.2 FTP 进程模型)
- [12.3 FTP 命令与响应](#12.3 FTP 命令与响应)
- [12.4 匿名 FTP](#12.4 匿名 FTP)
- [12.5 简单文件传送协议(TFTP)](#12.5 简单文件传送协议(TFTP))
- [12.6 TFTP 报文](#12.6 TFTP 报文)
- 本章要点
12. 文件传输协议
12.1 TCP/IP 文件传输协议(FTP)
FTP 是应用层协议,用于实现主机间可靠、高效的文件传输,核心特点是 "双重连接" 机制,兼顾控制与数据传输的分离。
-
FTP 的核心特点
- 工作在应用层 ,基于TCP 协议(面向连接、可靠传输);
- 采用客户 - 服务器模型,客户与服务器通过双重连接通信。
-
FTP 的目标
- 实现主机之间可靠、高效地传输程序或数据;
- 向用户屏蔽不同主机中文件存储系统的细节(如格式、路径等)。
-
关键概念
-
控制连接 :建立在用户协议解释器(PI,控制进程)与服务器 PI 之间,用于交换命令与应答,基于 NVT ASCII 码 传输,端口为21 号(熟知端口),整个会话期间保持连接。
-
数据连接:用于传输实际数据的全双工连接,可在服务器数据传输进程(DTP)与用户 DTP 之间,或两个服务器 DTP 之间建立,传输参数(如文件类型、结构)独立于控制连接,传输结束后关闭。
-
文件类型
(传输的文件格式):
- ASCII 码文件类型(A,默认):以 NVT ASCII 码形式传输,适用于文本文件;
- EBCDIC 文件类型(E):仅用于两端均为 EBCDIC 系统的文本文件传输;
- 图像文件类型(I,二进制):数据以连续比特流形式传输,适用于非文本文件(如图片、程序);
- 本地类型(L):字节大小非 8 比特,根据本地系统定义。
- 注:A/E 类型需指定是否可打印(Noprint/TELNET)。
-
数据结构
(文件的组织形式):
- 文件结构(F):字节流,无额外结构;
- 记录结构(R):文件划分为记录,适用于文本文件;
- 页结构(P):文件划分为页(含页号和页头),支持随机 / 顺序存取。
-
传输方式
(数据的发送形式):
- 流模式(S):数据以字节流传送,记录结构用 EOR(记录结束)、EOF(文件结束)标记,文件结构仅用 EOF;
- 块模式(B):文件以块为单位传送,块头含 16 位字节计数和 8 位描述子代码(标记 EOR、EOF、错误等);
- 压缩模式(C):数据经压缩后传输,节省带宽。
-
-
客户 - 服务器模型
- 客户与服务器建立双重连接:控制连接(维持会话)和数据连接(传输数据)。
- 原因:FTP 是交互式会话系统,控制连接保持会话状态,数据连接按需建立(每次传输文件时创建,传输结束后关闭),客户可通过控制连接继续发送命令。
12.2 FTP 进程模型
FTP 的功能由客户与服务器的进程协作完成,核心是控制连接与数据连接的管理。
- 进程组成
- 服务器进程:由协议解释器(PI,控制进程,处理命令与应答)和数据传输进程(DTP,负责数据传输)组成;
- 用户进程:由 PI(处理本地命令)、DTP(本地数据传输)和用户接口(用户交互界面)组成。
- 控制连接
- 建立:客户向服务器21 号端口发起连接,用于传输命令和应答(NVT ASCII 格式);
- 生命周期:从会话开始到客户发送
Close
或Quit
命令结束,始终保持连接。
- 数据连接机制
数据连接的建立有两种模式,核心差异是连接发起方不同:- 主动传输模式(Active Mode):
- 过程:客户 DTP 在自由端口(高端端口)被动打开,通过
PORT
命令将端口告知服务器;服务器 DTP 从20 号端口主动发起连接,与客户自由端口建立数据连接。 - 连接方向:数据连接与控制连接方向相反(服务器→客户)。
- 过程:客户 DTP 在自由端口(高端端口)被动打开,通过
- 被动传输模式(Passive Mode):
- 过程:客户发送
PASV
命令,服务器打开临时高端端口并通过227
响应告知客户(格式:227 (地址,端口)
);客户 DTP 主动向服务器临时端口发起连接。 - 连接方向:数据连接与控制连接方向一致(客户→服务器)。
- 过程:客户发送
- 适用场景:防火墙环境下优先使用被动模式,因防火墙通常禁止外部发起的连接(主动模式中服务器向客户发起的连接可能被拦截)。
- 主动传输模式(Active Mode):
- 端口号计算
- 数据连接端口通过
PORT
命令(主动模式)或227
响应(被动模式)以(X.X.X.X, m, n)
形式告知,实际端口号为 m×256 + n。
- 数据连接端口通过
- 数据连接关闭条件
- 客户发送
ABOR
命令(通过控制连接); - 数据传输结束(以 EOF 标记);
- 控制连接关闭;
- 发生不可恢复的错误。
- 客户发送
12.3 FTP 命令与响应
命令与响应是控制连接的核心内容,用于协调客户与服务器的交互。
- FTP 命令
- 传输形式:以NVT ASCII 码 通过控制连接发送,每行结尾必须带
CR、LF
(回车 + 换行); - 功能:客户向服务器发送请求(如登录、文件传输、目录操作等),例如
USER
(用户名)、PASS
(密码)、PORT
(主动模式端口)、PASV
(被动模式)、LIST
(列目录)、RETR
(下载)、STOR
(上传)等。
- 传输形式:以NVT ASCII 码 通过控制连接发送,每行结尾必须带
- FTP 响应
- 传输形式:服务器向客户返回3 位数字代码 + 字符串解释 (NVT ASCII 格式,每行结尾
CR、LF
); - 代码含义(第一位数字):
1xx
:服务器动作已开始,后续还有响应;2xx
:动作完成,可接受新命令;3xx
:命令已接受,需客户提供更多信息;4xx
:动作未完成(临时错误),命令可重发;5xx
:命令未接受(永久错误),不可重发。
- 示例:
220
(服务器就绪)、230
(登录成功)、226
(传输完成)、550
(文件不存在)。
- 传输形式:服务器向客户返回3 位数字代码 + 字符串解释 (NVT ASCII 格式,每行结尾
- 协议扩展
基于 RFC 959 的原始定义,后续扩展主要集中在:- 安全增强:用户认证、服务器认证、加密算法(如 SSL/TLS)、数据完整性与机密性保护(RFC 2228 等);
- 国际化:支持多语言编码(RFC 2640 等);
- 命令扩展:注册新命令(RFC 3659 等)。
12.4 匿名 FTP
匿名 FTP 是简化用户访问的机制,允许未注册用户获取公共文件。
- 核心用途
解决 "用户无需在远程主机注册即可传输文件" 的问题,避免用户在每个 FTP 主机都需拥有账号。 - 机制
- 远程主机设置特殊用户 ID:
anonymous
,允许任何用户使用该 ID 登录; - 登录方式:用户输入用户名
anonymous
,口令可填任意字符串(通常用邮箱地址)。
- 远程主机设置特殊用户 ID:
- 使用场景
常用于 Internet 上发布公共软件、文档等(如开源软件镜像站、技术手册库)。 - 安全限制
- 权限控制:匿名用户通常仅允许下载,上传需限制在指定目录(如
incoming
); - 内容审核:管理员定期检查上传文件,防止病毒或恶意内容。
- 权限控制:匿名用户通常仅允许下载,上传需限制在指定目录(如
12.5 简单文件传送协议(TFTP)
TFTP 是 FTP 的简化版本,适用于简单、低资源场景的文件传输。
- 核心特点
- 基于UDP 协议(无连接,不可靠,需自行实现重传机制);
- 服务器端口:69 号端口,通过动态分配新 UDP 端口提供并发服务;
- 功能简单:无认证、无目录操作、无复杂命令集,仅支持基本文件传输;
- 资源占用低:代码量小,适合嵌入式设备(如无盘工作站、路由器)。
- 主要用途
- 无盘工作站下载引导文件(设备 ROM 中固化 TFTP,启动时从服务器获取系统程序);
- 路由器配置备份(路由器将配置参数存储在 TFTP 服务器,故障时可恢复);
- 嵌入式设备(如打印机、集线器)的初始化代码下载。
12.6 TFTP 报文
TFTP 通过固定格式的报文实现文件传输,依赖 "确认 - 重传" 机制保证可靠性。
-
报文通用特性
- 数据分组大小:固定512 字节,若分组小于 512 字节,视为最后一个分组;
- 传输机制:发送方发送分组后等待确认(ACK),超时未收到则重传;接收方收到分组后缓存,直至确认发送方。
-
五种报文格式
报文头部前 2 字节为操作码,用于区分报文类型:
报文类型 操作码 结构组成 读请求(RRQ) 1 操作码(1) + 文件名(可变长,以 0 结尾) + 模式( netascii
/octet
,以 0 结尾)写请求(WRQ) 2 同 RRQ(操作码为 2) 数据(DATA) 3 操作码(3) + 块编号(2 字节,从 1 开始递增) + 数据(0-512 字节) 确认(ACK) 4 操作码(4) + 块编号(确认对应的 DATA 块编号,WRQ 的初始 ACK 块编号为 0) 出错(ERROR) 5 操作码(5) + 差错码(2 字节) + 差错信息(可变长,以 0 结尾) -
关键字段说明
- 模式字段 :
netascii
(ASCII 文本,行尾用CR/LF
)、octet
(二进制字节流,不解释内容); - 块编号:DATA 报文从 1 开始,每传输一个分组递增 1,用于确保顺序和完整性;
- 差错码 :定义错误类型,如
0
(未定义)、1
(文件未找到)、2
(访问拒绝)、3
(磁盘满)等。
- 模式字段 :
-
TFTP 与 FTP 的对比
特性 FTP TFTP 传输层协议 TCP(可靠,面向连接) UDP(不可靠,无连接) 端口 控制连接 21,数据连接 20(主动模式)或动态端口 服务器 69 号端口,数据传输用动态端口 认证 需用户 ID 和口令(匿名 FTP 除外) 无认证机制,依赖管理员限制访问 功能 支持文件传输、目录操作、权限管理等 仅支持基本文件传输(读 / 写),无交互功能 适用场景 互联网中复杂文件传输(如网站维护) 局域网简单场景(如无盘工作站、设备配置) 代码复杂度 高(双重连接、命令集庞大) 低(单报文格式、功能简单)
本章要点
- FTP 通过 "控制连接(21 号端口)+ 数据连接(主动模式 20 号端口 / 被动模式动态端口)" 实现可靠文件传输,支持多种文件类型、结构和传输方式;
- 主动模式与被动模式的核心差异是数据连接发起方,被动模式更适合防火墙环境;
- 匿名 FTP 通过
anonymous
用户 ID 解决未注册用户的访问问题,是公共资源发布的常用方式; - TFTP 是简化的 UDP 协议,适用于低资源场景,通过 5 种报文和 "确认 - 重传" 机制实现基本文件传输,功能有限但资源占用低。