3、升级协议基础:TFTP协议、HTTP协议、FTP协议在基站升级中的应用

各位做基站维护的兄弟,咱们今天聊聊升级协议。说实话,我刚入行那会儿,觉得协议这东西就是一堆枯燥的报文格式。直到有一次在偏远站点,因为选错了协议导致升级失败,大半夜还得跑一趟现场……从那以后,我对协议的选择就格外上心了。

基站升级说白了,就是把新固件从服务器搬到设备上。但怎么搬、用什么协议搬,这里面门道不少。我习惯把常用的三种协议——TFTP、HTTP、FTP——比作三种不同的运输工具。咱们一个个来看。

3.1 TFTP协议:轻量级选手

TFTP,全称Trivial File Transfer Protocol,翻译过来就是“简单文件传输协议”。它有多简单?简单到连认证都没有,基于UDP传输,端口号69。

核心特点:

  • 无认证机制,谁都能来取文件
  • 基于UDP,不可靠传输
  • 只能读、写文件,不能列目录
  • 固定数据块大小(512字节)

我在项目中遇到过这样的情况:某款老基站,BootROM里只集成了TFTP客户端。你想用别的协议?对不起,芯片不支持。这时候TFTP就是唯一的选择。

TFTP的工作流程其实挺有意思的。它用“停等协议”——发一个数据块,等一个确认,再发下一个。你想想看,这效率能高吗?但好处是实现简单,代码量极小,非常适合放在BootROM这种资源受限的环境里。

我的经验:TFTP适合小文件传输,比如配置文件、小补丁。大固件(比如超过100MB)就别用TFTP了,传输慢不说,UDP丢包重传能把人急死。

3.2 HTTP协议:现代主流

HTTP,超文本传输协议。现在基站升级,我个人最推荐的就是HTTP。为什么?因为它太普及了,几乎所有设备都支持。

HTTP基于TCP,端口80(HTTPS用443)。它最大的优势是:

  • 支持断点续传(Range头域)
  • 有认证机制(Basic/Digest认证)
  • 传输效率高,支持长连接
  • 服务器端部署简单,一个Nginx就搞定

我记得有一次给一个4G基站做远程升级,固件大小有800MB。用TFTP?想都别想。用FTP?还得开额外端口,防火墙策略麻烦。最后用HTTP,一条curl命令搞定:

curl -o /tmp/firmware.bin http://192.168.1.100/upgrade/firmware_v2.1.bin

简单吧?而且HTTP的断点续传功能,在基站升级中特别实用。你想想看,如果升级到一半网络断了,没有断点续传就得从头再来。我曾经遇到过这种情况,一个800MB的固件传了90%,啪,断了。还好用的是HTTP,续传只传了剩下的10%。

注意:HTTP是明文传输。如果固件涉及安全敏感信息,建议用HTTPS。我在一个运营商项目中就吃过这个亏,明文传输的固件被中间人篡改,导致基站批量变砖。从那以后,凡是生产环境,我强制要求HTTPS。

3.3 FTP协议:老牌劲旅

FTP,文件传输协议。说实话,现在新基站很少用FTP做升级了,但存量设备里还有不少。FTP基于TCP,使用两个端口:21(控制端口)和20(数据端口)。

FTP有两种模式:主动模式和被动模式。这里我踩过坑,跟大家说说:

模式 数据连接建立方式 防火墙友好度 我的建议
主动模式(PORT) 服务器主动连客户端 差(客户端需开放端口) 尽量别用
被动模式(PASV) 客户端主动连服务器 推荐使用

我曾经在一个项目中,基站部署在NAT后面。用FTP主动模式,服务器根本连不上基站的数据端口。折腾了半天,改成被动模式才搞定。说白了,现在网络环境复杂,被动模式更靠谱。

FTP的优势在于:

  • 支持断点续传(REST命令)
  • 支持目录浏览
  • 有完善的用户认证
  • 传输稳定,适合大文件

但缺点也很明显:控制逻辑复杂,端口多,防火墙配置麻烦。我个人的习惯是:除非设备只支持FTP,否则优先用HTTP。

3.4 三种协议对比与选型建议

咱们直接上对比表,一目了然:

特性 TFTP HTTP FTP
传输层 UDP TCP TCP
认证 有(Basic/Digest)
断点续传 不支持 支持 支持
传输效率
实现复杂度 极低
适用场景 BootROM、小文件 远程升级、大文件 存量设备、批量部署

选型时,我一般按这个优先级来:

  1. 设备支持HTTPS?优先用HTTPS
  2. 设备只支持TFTP?小文件用TFTP,大文件想办法升级客户端
  3. 存量设备只支持FTP?用被动模式,配好防火墙

避坑指南:我曾经在一个项目中,为了省事,所有基站统一用TFTP升级。结果固件越来越大,从50MB涨到200MB,传输时间从2分钟变成20分钟,还经常超时。后来改成HTTP,问题全解决了。所以,别偷懒,选对协议很重要。

3.5 实际部署中的注意事项

最后,分享几个我在实际部署中总结的经验:

  • 超时设置:TFTP默认超时5秒,网络差的时候容易重传。我一般调到10-15秒。
  • 并发控制:批量升级时,别让所有基站同时下载。我习惯用“滚动升级”,一次10-20台,避免打爆服务器带宽。
  • 校验机制:不管用哪种协议,传完后一定要做MD5或SHA256校验。我见过太多传了一半文件损坏的情况。
  • 日志记录:每次升级,把协议类型、传输时间、文件大小、校验值都记下来。出问题的时候,这些日志就是救命稻草。

嗯,关于升级协议的基础知识,今天就聊到这儿。下一章咱们会深入讲讲升级包的签名和校验机制,那才是真正决定升级安全性的关键。到时候见。