8个必知的Tftpd64高级选项:blksize协商、虚拟根目录到MD5校验配置全解
2026/9/24 16:52:50 网站建设 项目流程

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。下面是本文的主角们:

#选项注册表键作用
1Negociate(blksize 协商)Negociate与客户端协商更大的分块大小,加速传输
2tsize(文件长度)Negociate客户端可查询文件大小
3timeout(超时协商)Negociate客户端自定义重传超时
4MaxRetransmitMaxRetransmit单包最大重传次数
5VirtualRoot(虚拟根)VirtualRoot把访问限制在根目录内
6MD5 校验MD5传输完成后自动生成 .md5 文件
7SecurityLevelSecurityLevel读写/只读/禁止访问三级安全
8LocalIPLocalIP把 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 秒的客户端自定义重传间隔,弱网环境很有用。

两者都无需额外配置,只要NegociatePXECompatibility打开即可工作——这也是为什么 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 个选项全部生效。

快速上手清单 ✅

  1. 保持Negociate开启 → blksize 自动协商到 16384;
  2. 公网/共享场景开启VirtualRoot + 只读安全级别
  3. 分发固件/镜像开启MD5校验;
  4. 多网卡机器用LocalIP绑定到内网网卡;
  5. 弱网环境调大Timeout / MaxRetransmit
  6. 完整配置项说明可查阅 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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询