8个必知的Tftpd64高级选项:blksize协商、虚拟根目录到MD5校验配置全解
【免费下载链接】tftpd64The working repository of the famous TFTP server.项目地址: https://gitcode.com/gh_mirrors/tf/tftpd64
Tftpd64 是一款轻量级的多线程TFTP 服务器(同时集成 DNS、SNTP、Syslog、DHCP 服务),源码以 EUPL 协议开源。本文带你逐个吃透它的 8 个高级选项——从blksize 块大小协商、虚拟根目录,到MD5 校验文件生成,帮你把这台经典 TFTP 工具调到最佳状态。
30秒看懂:8个高级选项一览
Tftpd64 的所有配置项集中在 settings.c 的注册表映射表中,对应的结构体定义见 settings.h。下面是本文的主角们:
| # | 选项 | 注册表键 | 作用 |
|---|---|---|---|
| 1 | Negociate(blksize 协商) | Negociate | 与客户端协商更大的分块大小,加速传输 |
| 2 | tsize(文件长度) | Negociate | 客户端可查询文件大小 |
| 3 | timeout(超时协商) | Negociate | 客户端自定义重传超时 |
| 4 | MaxRetransmit | MaxRetransmit | 单包最大重传次数 |
| 5 | VirtualRoot(虚拟根) | VirtualRoot | 把访问限制在根目录内 |
| 6 | MD5 校验 | MD5 | 传输完成后自动生成 .md5 文件 |
| 7 | SecurityLevel | SecurityLevel | 读写/只读/禁止访问三级安全 |
| 8 | LocalIP | LocalIP | 把 TFTP 服务绑定到指定网卡 |
💡 所有键值读写逻辑都在 Tftpd32ReadSettings 与 Tftpd32SaveSettings 中实现,支持 ini 文件与注册表双通道。
1. blksize 协商:把 512 字节包变成 16KB 包
标准 TFTP 每个数据块只有 512 字节,传大文件时网络效率很低。开启Negociate(RFC 1784/2090 选项协商)后,服务器会接受客户端提议的blksize值:
- 小于 8 字节 → 直接拒绝;
- 大于 16384 字节 → 自动钳制到 16384;
- 合法范围内 → 按客户端提议值生效。
核心处理逻辑在 tftpd_thread.c 的选项解析循环中,接受后会组装 OACK 应答包。默认值是开启的(settings.c 中TRUE),这是提升大文件传输速度最关键的一个开关。
2. tsize 与 timeout:另外两个免费加速项
同一协商循环中还顺带支持:
- tsize:读取请求时服务器在 OACK 中返回文件字节数,客户端可据此显示进度(见 tftpd_thread.c);
- timeout:接受 1~255 秒的客户端自定义重传间隔,弱网环境很有用。
两者都无需额外配置,只要Negociate或PXECompatibility打开即可工作——这也是为什么 PXE 无盘启动场景下 Tftpd64 开箱即用。
3. MaxRetransmit 与 Timeout:网络不稳定时怎么救
- Timeout(默认值
TFTP_TIMEOUT):每个数据包的等待重传时间; - MaxRetransmit:超时后最多重试几次,超过即断开(tftpd_main.c 在初始化每个传输线程时把这两个值写入会话结构)。
局域网可保持默认;跨网段或 Wi-Fi 环境建议把 Timeout 调大、MaxRetransmit 适当放宽,减少"传一半断线"。
4. VirtualRoot 虚拟根目录:防止客户端越权读盘
TFTP 没有认证机制,客户端请求C:\Windows\win.ini这样的绝对路径怎么办?开启VirtualRoot后,SecFileName 会剥掉路径开头的盘符与根分隔符,所有请求一律从 TFTP 根目录解析——客户端无论怎么构造路径,都只能拿到你放在共享目录里的文件。
⚠️ 公网或多人使用的 TFTP 服务器务必开启此选项,再配合 SecurityLevel 双保险。
5. MD5 校验:传完文件自动生成指纹
勾选MD5选项后,服务器在传输结束时调用 TftpCreateMD5File:先通过 MD5Final 收尾计算(校验上下文在 tftpd_main.c 由该开关初始化),再在目标文件旁生成同名.md5文件。客户端无需额外工具就能核对完整性,非常适合固件分发、无盘启动镜像等场景。MD5 算法实现位于 src/_libs/md5/。
6. SecurityLevel 安全等级:三档锁住你的目录
settings.h 定义了 4 个级别(SECURITY_NONE / SECURITY_STD / SECURITY_HIGH / SECURITY_READONLY),对应 GUI 中的三档:
| 级别 | 下载 | 上传 |
|---|---|---|
| 标准(默认) | ✅ | ✅ |
| 高 | ✅ | ❌ |
| 只读 | ✅ | ❌ |
只分发文件时选"只读/高",可彻底杜绝目录被写爆的风险。
7. LocalIP 接口绑定:多网卡机器不再"串台"
多网卡主机上 TFTP 默认监听所有地址,LocalIP支持填IP 地址或网卡描述(settings.c 中通过首个字符是否数字自动识别)。绑定后,TftpBindLocalInterface 只在该网卡的 69 端口上监听,还能配合Enable IPv4/Enable IPv6两个开关(settings.h)精确控制协议族——例如只让内网 IPv4 流量访问 TFTP。
8. 用内置 TFTP 客户端验证配置
改完配置后,直接用 Tftpd64 自带的 TFTP 客户端自测最方便:把文件拖进窗口即可发起上传/下载(GUI 实现见 src/_gui/tftp_cli.c):
Tftpd64 TFTP 服务器客户端拖放文件界面
传输结束后观察是否生成了.md5文件、日志中 OACK 的 blksize 值是否符合预期,即可确认前 7 个选项全部生效。
快速上手清单 ✅
- 保持Negociate开启 → blksize 自动协商到 16384;
- 公网/共享场景开启VirtualRoot + 只读安全级别;
- 分发固件/镜像开启MD5校验;
- 多网卡机器用LocalIP绑定到内网网卡;
- 弱网环境调大Timeout / MaxRetransmit;
- 完整配置项说明可查阅 Settings Entries 官方文档。
项目全部源码以 EUPL 协议发布(见 Readme.md),主工程文件为 tftpd32.sln,TFTP 服务核心位于 src/_services/,协议常量见 Tftp.h。
【免费下载链接】tftpd64The working repository of the famous TFTP server.项目地址: https://gitcode.com/gh_mirrors/tf/tftpd64
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考