TFTP全称Trivial File Transfer Protocol,中文叫简单文件传输协议。它设计得极简,没有身份校验,指令集简单,甚至不支持查看目录列表。只用来传输小型文件,嵌入式开发、网络设备刷写固件、无盘工作站启动场景使用广泛。正因为追求简单,协议跑在UDP之上,默认端口69,和TCP协议、功能完善的FTP完全不是一类设计思路。
先说IP相关配置。TFTP服务器IP,就是运行TFTP服务主机在局域网的地址。Linux系统配置,打开/etc/default/tftpd-hpa文件,找到TFTP_ADDRESS配置项,默认填写0.0.0.0:69。0.0.0.0代表监听本机全部网卡所有IP。主机单网卡场景,这样配置没问题。主机搭载多网卡,同时连接有线、无线,或是虚拟机生成虚拟网卡,最好替换0.0.0.0为目标访问IP,示例192.168.1.100:69。不指定具体IP,客户端请求目标地址不确定,连接时断时续,排查故障很麻烦。

Windows平台操作直观很多,TFTPD32、Tftpd64这类工具,启动后主界面Server Interface或者IP Address下拉框,列出本机所有网卡IP。选中绑定的地址即可。嵌入式开发,PC网线直连开发板,就选择有线网卡IP;局域网其他设备访问,选用上网网卡IP。IP选错,服务状态显示正常,但外部设备无法建立连接。
端口默认UDP 69,IANA分配的标准TFTP端口,绝大多数TFTP客户端默认向这个端口发起请求。Linux配置文件TFTP_ADDRESS="0.0.0.0:69",冒号后69就是端口号。Windows图形界面Port输入框默认69,除非端口被其他程序占用,否则不建议修改。
容易混淆的一点,TFTP依靠69端口建立初始连接,文件正式传输阶段,服务器随机启用高位端口收发数据。这不是配置错误,是协议原生设计。客户端向69端口发送请求,服务器回复报文切换传输端口,双方在新端口完成文件传输。防火墙仅放行69/UDP并不足够,数据传输使用其他端口。Linux使用firewalld,直接firewall-cmd --add-service=tftp,自动放行配套端口。ufw直接执行sudo ufw allow 69/udp,传输大文件偶尔卡住,根源就是动态端口问题。
防火墙配置完成,校验服务监听状态。Linux执行netstat -anu | grep 69,输出UDP 0.0.0.0:69,代表绑定成功。Windows命令一致,netstat -anu | findstr :69,有返回内容即为正常。客户端测试输入tftp 192.168.1.100,进入交互界面执行get 文件名,文件正常下载说明链路通。下载失败优先检查防火墙,核对配置IP,最后确认共享目录权限。TFTP进程一般以tftp或者nobody账号运行,目录权限不足,无法读取文件。
还有一点需要留意。TFTP不存在访问认证,任意设备能够连通服务器IP和69端口,就能下载共享目录文件。敏感资料不要放在TFTP根目录,公网环境不要开启这项服务。它设计用于可信局域网,跨网段使用建议搭配VPN,或是更换其他传输协议。