简单文件传输协议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的工作原理

以客户端从服务器下载文件为例:

1cbec6315cef0f4233a06d8954dfa129.png

协议交互依据:RFC 1350:TFTP协议规范。

主要步骤:

  1. 客户端发送RRQ(Read Request)读取请求,或者WRQ(Write Request)上传请求至服务器UDP 69端口。
  2. 服务器接受请求后,使用新的UDP端口开始本次传输。
  3. 文件按数据块分段传输。传统TFTP默认每块数据最多512字节,扩展选项可调整块大小。
  4. 接收方每收到一个数据块,就返回ACK(确认包)。
  5. 如果超时没有收到确认,发送方会重传数据包。
  6. 最后一个不足完整数据块大小的数据包表示传输结束。

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