【TCP/IP】12. 文件传输协议

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 是应用层协议,用于实现主机间可靠、高效的文件传输,核心特点是 "双重连接" 机制,兼顾控制与数据传输的分离。

  1. FTP 的核心特点

    • 工作在应用层 ,基于TCP 协议(面向连接、可靠传输);
    • 采用客户 - 服务器模型,客户与服务器通过双重连接通信。
  2. FTP 的目标

    • 实现主机之间可靠、高效地传输程序或数据;
    • 向用户屏蔽不同主机中文件存储系统的细节(如格式、路径等)。
  3. 关键概念

    • 控制连接 :建立在用户协议解释器(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):数据经压缩后传输,节省带宽。
  4. 客户 - 服务器模型

    • 客户与服务器建立双重连接:控制连接(维持会话)和数据连接(传输数据)。
    • 原因:FTP 是交互式会话系统,控制连接保持会话状态,数据连接按需建立(每次传输文件时创建,传输结束后关闭),客户可通过控制连接继续发送命令。

12.2 FTP 进程模型

FTP 的功能由客户与服务器的进程协作完成,核心是控制连接与数据连接的管理。

  1. 进程组成
    • 服务器进程:由协议解释器(PI,控制进程,处理命令与应答)和数据传输进程(DTP,负责数据传输)组成;
    • 用户进程:由 PI(处理本地命令)、DTP(本地数据传输)和用户接口(用户交互界面)组成。
  2. 控制连接
    • 建立:客户向服务器21 号端口发起连接,用于传输命令和应答(NVT ASCII 格式);
    • 生命周期:从会话开始到客户发送CloseQuit命令结束,始终保持连接。
  3. 数据连接机制
    数据连接的建立有两种模式,核心差异是连接发起方不同:
    • 主动传输模式(Active Mode):
      • 过程:客户 DTP 在自由端口(高端端口)被动打开,通过PORT命令将端口告知服务器;服务器 DTP 从20 号端口主动发起连接,与客户自由端口建立数据连接。
      • 连接方向:数据连接与控制连接方向相反(服务器→客户)。
    • 被动传输模式(Passive Mode):
      • 过程:客户发送PASV命令,服务器打开临时高端端口并通过227响应告知客户(格式:227 (地址,端口));客户 DTP 主动向服务器临时端口发起连接。
      • 连接方向:数据连接与控制连接方向一致(客户→服务器)。
    • 适用场景:防火墙环境下优先使用被动模式,因防火墙通常禁止外部发起的连接(主动模式中服务器向客户发起的连接可能被拦截)。
  4. 端口号计算
    • 数据连接端口通过PORT命令(主动模式)或227响应(被动模式)以(X.X.X.X, m, n)形式告知,实际端口号为 m×256 + n
  5. 数据连接关闭条件
    • 客户发送ABOR命令(通过控制连接);
    • 数据传输结束(以 EOF 标记);
    • 控制连接关闭;
    • 发生不可恢复的错误。

12.3 FTP 命令与响应

命令与响应是控制连接的核心内容,用于协调客户与服务器的交互。

  1. FTP 命令
    • 传输形式:以NVT ASCII 码 通过控制连接发送,每行结尾必须带CR、LF(回车 + 换行);
    • 功能:客户向服务器发送请求(如登录、文件传输、目录操作等),例如USER(用户名)、PASS(密码)、PORT(主动模式端口)、PASV(被动模式)、LIST(列目录)、RETR(下载)、STOR(上传)等。
  2. FTP 响应
    • 传输形式:服务器向客户返回3 位数字代码 + 字符串解释 (NVT ASCII 格式,每行结尾CR、LF);
    • 代码含义(第一位数字):
      • 1xx:服务器动作已开始,后续还有响应;
      • 2xx:动作完成,可接受新命令;
      • 3xx:命令已接受,需客户提供更多信息;
      • 4xx:动作未完成(临时错误),命令可重发;
      • 5xx:命令未接受(永久错误),不可重发。
    • 示例:220(服务器就绪)、230(登录成功)、226(传输完成)、550(文件不存在)。
  3. 协议扩展
    基于 RFC 959 的原始定义,后续扩展主要集中在:
    • 安全增强:用户认证、服务器认证、加密算法(如 SSL/TLS)、数据完整性与机密性保护(RFC 2228 等);
    • 国际化:支持多语言编码(RFC 2640 等);
    • 命令扩展:注册新命令(RFC 3659 等)。

12.4 匿名 FTP

匿名 FTP 是简化用户访问的机制,允许未注册用户获取公共文件。

  1. 核心用途
    解决 "用户无需在远程主机注册即可传输文件" 的问题,避免用户在每个 FTP 主机都需拥有账号。
  2. 机制
    • 远程主机设置特殊用户 ID:anonymous,允许任何用户使用该 ID 登录;
    • 登录方式:用户输入用户名anonymous,口令可填任意字符串(通常用邮箱地址)。
  3. 使用场景
    常用于 Internet 上发布公共软件、文档等(如开源软件镜像站、技术手册库)。
  4. 安全限制
    • 权限控制:匿名用户通常仅允许下载,上传需限制在指定目录(如incoming);
    • 内容审核:管理员定期检查上传文件,防止病毒或恶意内容。

12.5 简单文件传送协议(TFTP)

TFTP 是 FTP 的简化版本,适用于简单、低资源场景的文件传输。

  1. 核心特点
    • 基于UDP 协议(无连接,不可靠,需自行实现重传机制);
    • 服务器端口:69 号端口,通过动态分配新 UDP 端口提供并发服务;
    • 功能简单:无认证、无目录操作、无复杂命令集,仅支持基本文件传输;
    • 资源占用低:代码量小,适合嵌入式设备(如无盘工作站、路由器)。
  2. 主要用途
    • 无盘工作站下载引导文件(设备 ROM 中固化 TFTP,启动时从服务器获取系统程序);
    • 路由器配置备份(路由器将配置参数存储在 TFTP 服务器,故障时可恢复);
    • 嵌入式设备(如打印机、集线器)的初始化代码下载。

12.6 TFTP 报文

TFTP 通过固定格式的报文实现文件传输,依赖 "确认 - 重传" 机制保证可靠性。

  1. 报文通用特性

    • 数据分组大小:固定512 字节,若分组小于 512 字节,视为最后一个分组;
    • 传输机制:发送方发送分组后等待确认(ACK),超时未收到则重传;接收方收到分组后缓存,直至确认发送方。
  2. 五种报文格式

    报文头部前 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 结尾)
  3. 关键字段说明

    • 模式字段netascii(ASCII 文本,行尾用CR/LF)、octet(二进制字节流,不解释内容);
    • 块编号:DATA 报文从 1 开始,每传输一个分组递增 1,用于确保顺序和完整性;
    • 差错码 :定义错误类型,如0(未定义)、1(文件未找到)、2(访问拒绝)、3(磁盘满)等。
  4. TFTP 与 FTP 的对比

    特性 FTP TFTP
    传输层协议 TCP(可靠,面向连接) UDP(不可靠,无连接)
    端口 控制连接 21,数据连接 20(主动模式)或动态端口 服务器 69 号端口,数据传输用动态端口
    认证 需用户 ID 和口令(匿名 FTP 除外) 无认证机制,依赖管理员限制访问
    功能 支持文件传输、目录操作、权限管理等 仅支持基本文件传输(读 / 写),无交互功能
    适用场景 互联网中复杂文件传输(如网站维护) 局域网简单场景(如无盘工作站、设备配置)
    代码复杂度 高(双重连接、命令集庞大) 低(单报文格式、功能简单)

本章要点

  • FTP 通过 "控制连接(21 号端口)+ 数据连接(主动模式 20 号端口 / 被动模式动态端口)" 实现可靠文件传输,支持多种文件类型、结构和传输方式;
  • 主动模式与被动模式的核心差异是数据连接发起方,被动模式更适合防火墙环境;
  • 匿名 FTP 通过anonymous用户 ID 解决未注册用户的访问问题,是公共资源发布的常用方式;
  • TFTP 是简化的 UDP 协议,适用于低资源场景,通过 5 种报文和 "确认 - 重传" 机制实现基本文件传输,功能有限但资源占用低。
相关推荐
令狐掌门7 分钟前
tcp长连接与短连接
网络·网络协议·tcp/ip
创小匠8 分钟前
创客匠人洞察:AI 时代创始人 IP 打造如何突破效率与价值的平衡
人工智能·网络协议·tcp/ip
kfepiza27 分钟前
Linux创建网桥Bridge的方法有哪些? 笔记250710
linux·tcp/ip
zhysunny1 小时前
WebSocket实战:实现实时聊天应用 - 双向通信技术详解
网络·websocket·网络协议
hrrrrb2 小时前
【TCP/IP】5. IP 协议
网络协议·tcp/ip·php
hhh123987_2 小时前
以太网基础⑤UDP 协议原理与 FPGA 实现
网络·网络协议·udp
灰海2 小时前
封装WebSocket
前端·网络·websocket·网络协议·vue
工藤新一¹2 小时前
Linux 开发工具
linux·运维·服务器
W111115_2 小时前
网络综合实验
linux·运维·服务器·网络
cui_win2 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_sack
linux·网络·tcp/ip