第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:
| 对比项 | TFTP | FTP |
|---|---|---|
| 传输层 | UDP | TCP |
| 复杂度 | 简单 | 复杂 |
| 功能 | 少,只有上传下载 | 多,列表、权限等 |
| 认证 | 简单或无 | 用户名密码 |
| 端口 | 69 | 21(控制)+ 数据 |
| 适用场景 | 小文件、启动 | 大文件、通用 |
| 速度 | 慢,停等协议 | 快,滑动窗口 |
TFTP简单,FTP功能多。
本章讨论的内容
本章讨论的内容:
- TFTP的特点
- TFTP报文格式
- TFTP协议流程
- 选项协商
- TFTP的用途
本章介绍TFTP协议。
15.2 TFTP的特点
TFTP的特点
TFTP的特点:
-
简单
- 协议简单
- 实现容易
- 代码量小
-
用UDP
- 无连接
- 自己实现可靠性
-
停等协议
- 发一个等一个确认
- 简单但慢
-
只有上传和下载
- 没有列表
- 没有删除
- 没有权限
-
没有认证
- 或者很简单
- 不安全
-
小文件
- 适合小文件
- 大文件慢
TFTP特点是简单。
TFTP的用途
TFTP的用途:
-
无盘工作站启动
- 下载启动文件
- 下载内核
-
网络设备配置
- 路由器、交换机
- 上传下载配置文件
- 升级固件
-
简单文件传输
- 小文件
- 简单场景
TFTP常用于启动和设备配置。
15.3 TFTP报文格式
TFTP报文类型
TFTP有五种报文类型:
| 类型 | 操作码 | 名称 | 说明 |
|---|---|---|---|
| 1 | RRQ | 读请求 | 下载文件 |
| 2 | WRQ | 写请求 | 上传文件 |
| 3 | DATA | 数据 | 文件数据 |
| 4 | ACK | 确认 | 确认数据 |
| 5 | ERROR | 错误 | 错误信息 |
| 6 | OACK | 选项确认 | 选项协商 |
五种(加上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)流程:
-
客户端发RRQ
- 给服务器69端口
- 说我要读这个文件
-
服务器响应
- 同意:发DATA(块1)
- 不同意:发ERROR
-
客户端收到DATA
- 发ACK(块1)
- 确认收到
-
服务器收到ACK
- 发下一个DATA(块2)
-
重复
- DATA → ACK → DATA → ACK
- 直到最后一块
-
最后一块
- 数据小于512字节
- 客户端发ACK
- 传输结束
读文件是请求→数据→确认→数据…
写文件(上传)流程
写文件(WRQ)流程:
-
客户端发WRQ
- 给服务器69端口
- 说我要写这个文件
-
服务器响应
- 同意:发ACK(块0)
- 不同意:发ERROR
-
客户端收到ACK
- 发DATA(块1)
-
服务器收到DATA
- 发ACK(块1)
-
重复
- DATA → ACK → DATA → ACK
- 直到最后一块
-
最后一块
- 数据小于512字节
- 服务器发ACK
- 传输结束
写文件是请求→确认→数据→确认…
端口的变化
端口的变化:
- 请求发到服务器69端口
- 服务器回复用新的临时端口
- 后续传输都用这个临时端口
- 69端口只接收请求
为什么:
- 69端口可以继续接收其他请求
- 每个传输用不同的端口
- 区分不同的传输
传输用临时端口,69只接收请求。
超时和重传
超时和重传:
- UDP不可靠
- TFTP自己实现可靠
- 发了数据等ACK
- 超时没收到就重传
- 停等协议
特点:
- 简单
- 但效率低
- 每次只能发一个块
- 要等确认才能发下一个
TFTP自己实现超时重传。
15.5 选项协商
什么是选项协商
选项协商(Option Negotiation):
- TFTP选项扩展
- 可以协商一些参数
- 比如块大小、超时时间、传输大小等
- 用OACK报文
选项协商可以配置参数。
常见选项
常见选项:
| 选项 | 说明 |
|---|---|
| blksize | 块大小,默认512,可以更大 |
| timeout | 超时时间 |
| tsize | 传输大小,文件大小 |
| windowsize | 窗口大小,窗口式传输 |
可以协商各种参数。
选项协商流程
选项协商流程:
-
客户端发请求(带选项)
- RRQ/WRQ里带选项
-
服务器支持选项
- 回OACK(选项确认)
- 确认选项值
-
客户端收到OACK
- 读:发ACK(块0),然后服务器发数据
- 写:发DATA(块1)
-
服务器不支持选项
- 忽略选项
- 正常响应
- 按默认来
选项协商用OACK。
块大小选项
块大小选项(blksize):
- 默认块大小是512字节
- 可以改大
- 比如1024, 1468等
- 大块效率高
- 但要注意MTU,避免分片
为什么要改大:
- 减少块的数量
- 减少确认次数
- 提高效率
块大小可以协商更大的。
15.6 小结
TFTP概述
-
什么是TFTP
- 简单文件传送协议
- 用UDP
- 简单,小代码量
-
为什么需要
- 无盘设备启动
- 简单文件传输
- 小内存设备
-
vs FTP
- TFTP简单,UDP,功能少
- FTP复杂,TCP,功能多
TFTP特点
-
简单
- 协议简单
- 实现容易
-
UDP
- 自己实现可靠
-
停等协议
- 发一个等一个
- 简单但慢
-
只有上传下载
- 没有其他功能
-
无认证
- 不安全
报文格式
-
报文类型
- RRQ(读请求)
- WRQ(写请求)
- DATA(数据)
- ACK(确认)
- ERROR(错误)
- OACK(选项确认)
-
请求报文
- 文件名
- 模式
- 选项(可选)
-
数据报文
- 块号
- 0-512字节数据
- 小于512是最后一块
-
确认报文
- 块号
-
错误报文
- 错误码
- 错误信息
协议流程
-
读文件
- RRQ → DATA → ACK → DATA → ACK…
- 最后一块小于512字节
-
写文件
- WRQ → ACK(0) → DATA → ACK → DATA…
-
端口变化
- 请求发69端口
- 传输用临时端口
-
超时重传
- 自己实现可靠
- 停等协议
选项协商
-
什么是选项协商
- 协商参数
- OACK报文
-
常见选项
- blksize:块大小
- timeout:超时
- tsize:传输大小
-
块大小选项
- 默认512
- 可以改大提高效率
- 注意MTU
关键概念
-
TFTP
- 简单文件传输
- UDP
- 停等协议
-
五种报文
- RRQ, WRQ, DATA, ACK, ERROR
-
端口
- 69接收请求
- 临时端口传输
-
选项协商
- 协商参数
- blksize等
-
用途
- 无盘启动
- 设备配置