当前位置: 首页 > web >正文

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

12. 文件传输协议

  • 12. 文件传输协议
    • 12.1 TCP/IP 文件传输协议(FTP)
    • 12.2 FTP 进程模型
    • 12.3 FTP 命令与响应
    • 12.4 匿名 FTP
    • 12.5 简单文件传送协议(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 的对比

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

本章要点

  • FTP 通过 “控制连接(21 号端口)+ 数据连接(主动模式 20 号端口 / 被动模式动态端口)” 实现可靠文件传输,支持多种文件类型、结构和传输方式;
  • 主动模式与被动模式的核心差异是数据连接发起方,被动模式更适合防火墙环境;
  • 匿名 FTP 通过anonymous用户 ID 解决未注册用户的访问问题,是公共资源发布的常用方式;
  • TFTP 是简化的 UDP 协议,适用于低资源场景,通过 5 种报文和 “确认 - 重传” 机制实现基本文件传输,功能有限但资源占用低。
http://www.xdnf.cn/news/15191.html

相关文章:

  • 力扣-73.矩阵置零
  • 如何安装python以及jupyter notebook
  • Rust中Option和Result详解
  • Unity WebGL文本输入
  • 【世纪龙科技】汽车信息化综合实训考核平台(机电方向)-学测
  • ClickHouse JSON 解析
  • Java代码块
  • Android 应用常见安全问题
  • JAVA JVM对象的实现
  • 【spring boot】三种日志系统对比:ELK、Loki+Grafana、Docker API
  • 长效住宅代理IP:反爬虫战场上的隐形盾牌
  • 代码随想录17|二叉树的层序遍历|翻转二叉树|对称二叉树
  • Java入门之JDK下载和安装
  • HTTP 错误 500.19 - 打开 IIS 网页时出现内部服务器错误
  • Windows Edge 播放 H.265 视频指南
  • 自动化测试策略设计和避坑概要
  • 图解Java数据容器(三):Queue
  • imx6ull-裸机学习实验16——I2C 实验
  • 【C++】第十四节—模版进阶(非类型模版参数+模板的特化+模版分离编译+模版总结)
  • Vue响应式原理五:响应式-自动收集依赖
  • 第七讲:C++中的string类
  • 分布式ID方案
  • 羊肚菌自动采收车设计cad【7张】+三维图+设计说明书
  • 什么?不知道 MyBatisPlus 多数据源(动态数据源)干什么的,怎么使用,看这篇文章就够了。
  • 目标检测中的评价指标计算
  • 从零搭建多商户商城系统源码:技术栈、数据库设计与接口规划详解
  • 好用研发项目管理软件对比:8Manage PM与飞书功能深度测评
  • 【网络安全】利用 Cookie Sandwich 窃取 HttpOnly Cookie
  • Canvas 状态管理 语法糖 canvas.withSave() {}
  • Houdini 分布式解算效率瓶颈突破:渲染 101 云集群实战指南