在家用 NAS 做数据备份时,你有没有遇到过明明带宽够,传输速度却卡在 10MB/s 上不去?或者局域网同步文件时不时断流,重试好几次才成功?问题可能不在于硬盘或网线,而是被忽视的网络协议栈配置。
调大 TCP 窗口,释放带宽潜力
TCP 窗口大小决定了发送方在收到确认前能发多少数据。默认值通常偏保守,尤其在高延迟或高带宽网络中容易成为瓶颈。比如千兆内网传大型视频素材,小窗口会让传输频繁等待确认,白白浪费带宽。
在 Linux 系统中,可以通过修改 sysctl 参数提升性能:
net.core.rmem_max = 134217728
net.core.wmem_max = 134217728
net.ipv4.tcp_rmem = 4096 87380 134217728
net.ipv4.tcp_wmem = 4096 65536 134217728
这组配置将最大接收和发送缓冲区扩大到 128MB,适合内网高速传输场景。改完后执行 sysctl -p 生效,你会发现备份大文件时速率更稳,波动更小。
启用 TCP Fast Open,减少连接开销
每次新建连接都要三次握手,频繁的小文件备份会因此拖慢整体速度。TCP Fast Open(TFO)能让客户端在第一次 SYN 包就带上数据,省去一次往返延迟。
开启方式也很简单,在支持的系统上(如较新版本的 Linux):
net.ipv4.tcp_fastopen = 3
数值 3 表示同时支持作为客户端和服务端启用 TFO。Nginx、Ceph 等服务配合使用效果明显,特别适合自动定时备份任务。
调整 NAGLE 算法与 ACK 延迟
NAGLE 算法本意是合并小包减少网络碎片,但在某些实时同步工具中反而造成延迟堆积。如果你用 rsync 或 Syncthing 做增量备份,建议在关键连接上禁用 Nagle 算法。
应用层可通过 socket 选项关闭:
setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(int));
同时,把 TCP 延迟确认(TCP_DELACK_MIN)调低或关闭,能让 ACK 回复更快,提升交互效率。对于局域网内的备份服务,这类微调往往带来可感知的响应改善。
合理设置 MTU 避免分片
很多人换了万兆交换机却发现速度不如预期,问题可能出在 MTU 不匹配。标准以太网帧 MTU 是 1500,但支持 Jumbo Frame 的设备可以设到 9000,减少头部开销。
确保你的路由器、NAS 和主机端都统一配置:
ip link set eth0 mtu 9000
注意:中间任意一环不支持就会导致通信异常,建议先在封闭局域网测试。正确启用后,大文件连续写入的吞吐量会有显著提升。
这些配置不是“一键加速”魔法,而是根据实际网络环境做的针对性调整。改之前记下原始值,方便回滚。一次小小的协议栈优化,可能让你原本鸡肋的备份流程变得顺滑可靠。