第15章 TFTP:简单文件传送协议

所属:TCP/IP详解 卷1:协议 来源:TCP/IP详解 卷1:协议

本章介绍TFTP协议,包括TFTP的特点、报文格式、协议流程和选项协商等。


15.1 引言

TFTP的作用

TFTP(Trivial File Transfer Protocol):

  • 简单文件传送协议
  • 用UDP
  • 很简单
  • 适合小文件传输
  • 常用于无盘设备启动

TFTP是简单的文件传输协议。


为什么需要TFTP

为什么需要TFTP:

  • 有些设备没有磁盘
  • 启动时需要下载文件
  • 需要简单的文件传输
  • FTP太复杂,不适合小内存

TFTP的设计目标:

  • 简单
  • 小代码量
  • 适合小内存
  • 用UDP

TFTP设计得很简单。


TFTP vs FTP

TFTP vs FTP:

对比项TFTPFTP
传输层UDPTCP
复杂度简单复杂
功能少,只有上传下载多,列表、权限等
认证简单或无用户名密码
端口6921(控制)+ 数据
适用场景小文件、启动大文件、通用
速度慢,停等协议快,滑动窗口

TFTP简单,FTP功能多。


本章讨论的内容

本章讨论的内容:

  • TFTP的特点
  • TFTP报文格式
  • TFTP协议流程
  • 选项协商
  • TFTP的用途

本章介绍TFTP协议。


15.2 TFTP的特点

TFTP的特点

TFTP的特点:

  1. 简单

    • 协议简单
    • 实现容易
    • 代码量小
  2. 用UDP

    • 无连接
    • 自己实现可靠性
  3. 停等协议

    • 发一个等一个确认
    • 简单但慢
  4. 只有上传和下载

    • 没有列表
    • 没有删除
    • 没有权限
  5. 没有认证

    • 或者很简单
    • 不安全
  6. 小文件

    • 适合小文件
    • 大文件慢

TFTP特点是简单。


TFTP的用途

TFTP的用途:

  1. 无盘工作站启动

    • 下载启动文件
    • 下载内核
  2. 网络设备配置

    • 路由器、交换机
    • 上传下载配置文件
    • 升级固件
  3. 简单文件传输

    • 小文件
    • 简单场景

TFTP常用于启动和设备配置。


15.3 TFTP报文格式

TFTP报文类型

TFTP有五种报文类型:

类型操作码名称说明
1RRQ读请求下载文件
2WRQ写请求上传文件
3DATA数据文件数据
4ACK确认确认数据
5ERROR错误错误信息
6OACK选项确认选项协商

五种(加上OACK六种)报文类型。


通用格式

TFTP报文通用格式:

+--------+-------------------+
| 操作码  |    数据...        |
|  2字节  |                   |
+--------+-------------------+

操作码:

  • 2字节
  • 标识报文类型

所有报文都以操作码开头。


RRQ和WRQ

读请求(RRQ)和写请求(WRQ)格式:

+--------+----------+---+----------+---+----------+---+
| 操作码  |  文件名   | 0 |   模式   | 0 |  选项...  | 0 |
+--------+----------+---+----------+---+----------+---+

字段:

  • 操作码:1=RRQ, 2=WRQ
  • 文件名:要传输的文件名,以0结尾
  • 模式:传输模式,netascii或octet,以0结尾
  • 选项:可选,选项名+值,都以0结尾

传输模式:

  • netascii:ASCII模式
  • octet:二进制模式

请求报文包含文件名和模式。


DATA

数据报文(DATA)格式:

+--------+--------+-------------------+
| 操作码  |  块号  |      数据         |
|  2字节  | 2字节  |    0-512字节      |
+--------+--------+-------------------+

字段:

  • 操作码:3
  • 块号:从1开始编号
  • 数据:0-512字节
    • 小于512表示最后一块
    • 正好512表示后面还有

数据报文包含块号和数据。


ACK

确认报文(ACK)格式:

+--------+--------+
| 操作码  |  块号  |
|  2字节  | 2字节  |
+--------+--------+

字段:

  • 操作码:4
  • 块号:确认的块号

确认报文确认块号。


ERROR

错误报文(ERROR)格式:

+--------+--------+----------+---+
| 操作码  | 错误码 |  错误信息 | 0 |
+--------+--------+----------+---+

字段:

  • 操作码:5
  • 错误码:错误类型
  • 错误信息:文本描述,以0结尾

常见错误码:

  • 0:未定义
  • 1:文件未找到
  • 2:访问违例
  • 3:磁盘满
  • 4:非法操作
  • 5:未知传输ID
  • 6:文件已存在
  • 7:无此用户

错误报文报告错误。


15.4 TFTP协议流程

读文件(下载)流程

读文件(RRQ)流程:

  1. 客户端发RRQ

    • 给服务器69端口
    • 说我要读这个文件
  2. 服务器响应

    • 同意:发DATA(块1)
    • 不同意:发ERROR
  3. 客户端收到DATA

    • 发ACK(块1)
    • 确认收到
  4. 服务器收到ACK

    • 发下一个DATA(块2)
  5. 重复

    • DATA → ACK → DATA → ACK
    • 直到最后一块
  6. 最后一块

    • 数据小于512字节
    • 客户端发ACK
    • 传输结束

读文件是请求→数据→确认→数据…


写文件(上传)流程

写文件(WRQ)流程:

  1. 客户端发WRQ

    • 给服务器69端口
    • 说我要写这个文件
  2. 服务器响应

    • 同意:发ACK(块0)
    • 不同意:发ERROR
  3. 客户端收到ACK

    • 发DATA(块1)
  4. 服务器收到DATA

    • 发ACK(块1)
  5. 重复

    • DATA → ACK → DATA → ACK
    • 直到最后一块
  6. 最后一块

    • 数据小于512字节
    • 服务器发ACK
    • 传输结束

写文件是请求→确认→数据→确认…


端口的变化

端口的变化:

  • 请求发到服务器69端口
  • 服务器回复用新的临时端口
  • 后续传输都用这个临时端口
  • 69端口只接收请求

为什么:

  • 69端口可以继续接收其他请求
  • 每个传输用不同的端口
  • 区分不同的传输

传输用临时端口,69只接收请求。


超时和重传

超时和重传:

  • UDP不可靠
  • TFTP自己实现可靠
  • 发了数据等ACK
  • 超时没收到就重传
  • 停等协议

特点:

  • 简单
  • 但效率低
  • 每次只能发一个块
  • 要等确认才能发下一个

TFTP自己实现超时重传。


15.5 选项协商

什么是选项协商

选项协商(Option Negotiation):

  • TFTP选项扩展
  • 可以协商一些参数
  • 比如块大小、超时时间、传输大小等
  • 用OACK报文

选项协商可以配置参数。


常见选项

常见选项:

选项说明
blksize块大小,默认512,可以更大
timeout超时时间
tsize传输大小,文件大小
windowsize窗口大小,窗口式传输

可以协商各种参数。


选项协商流程

选项协商流程:

  1. 客户端发请求(带选项)

    • RRQ/WRQ里带选项
  2. 服务器支持选项

    • 回OACK(选项确认)
    • 确认选项值
  3. 客户端收到OACK

    • 读:发ACK(块0),然后服务器发数据
    • 写:发DATA(块1)
  4. 服务器不支持选项

    • 忽略选项
    • 正常响应
    • 按默认来

选项协商用OACK。


块大小选项

块大小选项(blksize):

  • 默认块大小是512字节
  • 可以改大
  • 比如1024, 1468等
  • 大块效率高
  • 但要注意MTU,避免分片

为什么要改大:

  • 减少块的数量
  • 减少确认次数
  • 提高效率

块大小可以协商更大的。


15.6 小结

TFTP概述

  1. 什么是TFTP

    • 简单文件传送协议
    • 用UDP
    • 简单,小代码量
  2. 为什么需要

    • 无盘设备启动
    • 简单文件传输
    • 小内存设备
  3. vs FTP

    • TFTP简单,UDP,功能少
    • FTP复杂,TCP,功能多

TFTP特点

  1. 简单

    • 协议简单
    • 实现容易
  2. UDP

    • 自己实现可靠
  3. 停等协议

    • 发一个等一个
    • 简单但慢
  4. 只有上传下载

    • 没有其他功能
  5. 无认证

    • 不安全

报文格式

  1. 报文类型

    • RRQ(读请求)
    • WRQ(写请求)
    • DATA(数据)
    • ACK(确认)
    • ERROR(错误)
    • OACK(选项确认)
  2. 请求报文

    • 文件名
    • 模式
    • 选项(可选)
  3. 数据报文

    • 块号
    • 0-512字节数据
    • 小于512是最后一块
  4. 确认报文

    • 块号
  5. 错误报文

    • 错误码
    • 错误信息

协议流程

  1. 读文件

    • RRQ → DATA → ACK → DATA → ACK…
    • 最后一块小于512字节
  2. 写文件

    • WRQ → ACK(0) → DATA → ACK → DATA…
  3. 端口变化

    • 请求发69端口
    • 传输用临时端口
  4. 超时重传

    • 自己实现可靠
    • 停等协议

选项协商

  1. 什么是选项协商

    • 协商参数
    • OACK报文
  2. 常见选项

    • blksize:块大小
    • timeout:超时
    • tsize:传输大小
  3. 块大小选项

    • 默认512
    • 可以改大提高效率
    • 注意MTU

关键概念

  1. TFTP

    • 简单文件传输
    • UDP
    • 停等协议
  2. 五种报文

    • RRQ, WRQ, DATA, ACK, ERROR
  3. 端口

    • 69接收请求
    • 临时端口传输
  4. 选项协商

    • 协商参数
    • blksize等
  5. 用途

    • 无盘启动
    • 设备配置

TFTP简单文件传送