简单文件传输协议TFTP(Trivial File Transfer Protocol)
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是一种基于UDP的轻量级文件传输协议,常用于网络设备启动、固件升级、交换机/路由器配置文件传输,以及PXE网络启动。
1.TFTP使用什么协议和端口
| 项目 | 说明 |
|---|---|
| 应用层协议 | TFTP |
| 传输层协议 | UDP |
| 服务器默认监听端口 | UDP 69 |
| 客户端临时端口 | 通常由操作系统动态分配 |
| 数据传输端口 | 请求后由服务器和客户端使用各自的UDP传输端口 |
| 可靠性 | 通过数据块编号、ACK确认和超时重传实现 |
| 加密 | 默认不加密,也没有身份认证机制 |
关键点:TFTP虽然默认监听UDP 69,但文件数据通常不是一直通过UDP 69传输。客户端首先向服务器的UDP 69端口发送请求。服务器收到请求后,会使用一个新的UDP源端口与客户端进行后续的数据传输。因此,抓包或配置防火墙时,不能只关注UDP 69。
2.TFTP的工作原理
以客户端从服务器下载文件为例:

协议交互依据:RFC 1350:TFTP协议规范。
主要步骤:
- 客户端发送RRQ(Read Request)读取请求,或者WRQ(Write Request)上传请求至服务器UDP 69端口。
- 服务器接受请求后,使用新的UDP端口开始本次传输。
- 文件按数据块分段传输。传统TFTP默认每块数据最多512字节,扩展选项可调整块大小。
- 接收方每收到一个数据块,就返回ACK(确认包)。
- 如果超时没有收到确认,发送方会重传数据包。
- 最后一个不足完整数据块大小的数据包表示传输结束。
3.TFTP实际监听哪个端口
需要区分服务器端口和传输端口:
| 阶段 | 源端口 | 目标端口 |
|---|---|---|
| 客户端发起下载 | 客户端临时端口,例如50000 | 服务器69 |
| 服务器返回首个数据包 | 服务器新分配端口,例如52000 | 客户端50000 |
| 客户端确认数据 | 客户端50000 | 服务器52000 |
| 后续数据传输 | 双方继续使用本次传输端口 | 双方继续使用本次传输端口 |
表中的50000和52000仅为示例,实际端口由系统和软件实现决定。
因此,如果你需要配置防火墙:
- 至少需要允许客户端访问服务器的UDP 69端口。
- 还需要考虑后续传输所使用的动态UDP端口。
- 如果跨网段、经过NAT或使用严格的ACL,必须确认服务器动态端口的处理方式。只放行UDP 69可能出现请求成功但文件下载失败的情况。
4.如何查看TFTP监听端口
Windows:
netstat -ano -p udp
查看UDP端口及对应进程PID,再通过以下命令确认进程:
tasklist /fi "PID eq 1234"
将1234替换成实际PID。
Linux:
sudo ss -lunp
查看UDP 69是否监听:
sudo ss -lunp | grep ':69'
Wireshark抓包过滤:
tftp || udp.port == 69
如果没有识别出TFTP协议,可以使用:
udp.port == 69
5.TFTP与FTP有什么区别
| 对比项 | TFTP | FTP |
|---|---|---|
| 传输协议 | UDP | TCP |
| 默认端口 | UDP 69 | TCP 21控制连接 |
| 传输机制 | 数据块确认、超时重传 | TCP可靠传输 |
| 用户认证 | 标准协议不提供 | 支持用户名和密码 |
| 目录浏览 | 标准协议不支持 | 支持 |
| 典型用途 | PXE启动、设备固件升级 | 普通文件传输 |
TFTP默认没有身份认证和加密,不建议直接暴露在不可信网络中。
6.tftp客户端下载文件
Windows下载TFTP文件
1.启用TFTP客户端
以管理员身份打开CMD,执行:
dism /online /Enable-Feature /FeatureName:TFTP /All
也可以进入“控制面板→程序和功能→启用或关闭Windows功能”,勾选“TFTP客户端”(如果系统提供此功能)。
2.下载文件
- TFTP服务器IP:192.168.1.100
- 文件名:firmware.bin
- 保存路径:D:\Download\firmware.bin
先创建目录:
mkdir D:\Download
然后执行:
tftp -i 192.168.1.100 GET firmware.bin D:\Download\firmware.bin
参数说明:
-i:使用二进制模式,适合固件、程序、压缩包等文件。192.168.1.100:TFTP服务器IP。GET:下载文件。firmware.bin:服务器上的文件名。D:\Download\firmware.bin:本地保存路径。
Linux下载TFTP文件
先安装客户端。
Ubuntu/Debian:
sudo apt install tftp-hpa
CentOS/RHEL:
sudo dnf install tftp
执行下载:
tftp 192.168.1.100
进入交互界面后输入:
binary
get firmware.bin
quit
文件会保存到启动TFTP客户端时所在的本地目录。
也可以使用支持非交互模式的tftp客户端,或者安装atftp后执行:
atftp --get --remote-file firmware.bin --local-file firmware.bin 192.168.1.100