3、远程升级技术选型:通信协议选择、传输加密与断点续传

远程升级这件事,说白了就是要把新固件从服务器安全、可靠地送到现场设备手里。我做了这么多年SCADA,见过太多升级到一半断网、文件损坏、被中间人篡改的惨案。今天咱们就聊聊技术选型里的三个核心问题:用什么协议传、怎么加密、断了怎么办。

3.1 通信协议选择:MQTT、HTTP、FTP

选协议这事儿,没有银弹。我个人的习惯是:先看设备资源,再看网络环境,最后看运维习惯。下面我把三种主流协议掰开揉碎讲清楚。

3.1.1 MQTT:轻量级,适合低带宽、高延迟场景

MQTT 是发布/订阅模式,说白了就是有个中间人(Broker)帮你转发消息。设备端不需要知道服务器在哪,只需要订阅一个主题就行。

优点:

  • 报文头极小,最少只有2字节。我在一个油田项目中,用2G网络升级RTU,MQTT比HTTP省了将近40%的流量。
  • 支持QoS(服务质量)等级,QoS 2能保证消息必达一次。
  • 支持遗嘱消息,设备掉线了Broker会通知你。

缺点:

  • 需要额外部署Broker,增加了一个故障点。
  • 大文件传输效率低,MQTT本身不是为传文件设计的。
我的建议:如果现场设备是电池供电、网络不稳定、每次升级包小于10MB,MQTT是首选。我曾经在西北一个风电场,用MQTT给200多台风机控制器做升级,成功率99.8%。

3.1.2 HTTP/HTTPS:通用性强,适合有公网IP的场景

HTTP 是请求/响应模式,设备主动去拉文件。现在很多工业网关都内置了HTTP客户端,部署起来最省事。

优点:

  • 基础设施成熟,CDN、负载均衡随便用。
  • 支持Range头,天然适合断点续传。
  • 调试方便,用curl就能测试。

缺点:

  • 报文头大,每次请求都有几百字节的头部开销。
  • 服务端需要维护会话状态,设备多了压力大。
注意:千万别用明文HTTP传固件!我曾经见过一个工厂,直接用HTTP从服务器拉升级包,结果被中间人篡改,导致30多台PLC同时死机。后面我会讲怎么用TLS加固。

3.1.3 FTP/SFTP:传统方案,适合局域网批量升级

FTP 是老牌文件传输协议,很多工控设备都支持。但说实话,我越来越不推荐它了。

优点:

  • 传输效率高,尤其适合大文件。
  • 支持断点续传(REST命令)。

缺点:

  • 明文传输密码,不安全。
  • 需要两个端口(20和21),防火墙配置麻烦。
  • 被动模式在NAT环境下经常出问题。
选型总结:
场景 推荐协议 理由
低功耗、窄带物联网 MQTT 报文小、省电、支持离线消息
公网、有固定IP HTTPS 生态好、调试方便、安全
局域网、大文件 SFTP 加密传输、效率高

3.2 传输加密:TLS/SSL 不是可选项,是必选项

你想想看,升级包就是设备的“大脑”。如果被人篡改了,后果不堪设想。我见过最离谱的一次,是有人用抓包工具直接拿到了明文固件,然后逆向工程改了逻辑,导致整个产线停了两天。

3.2.1 TLS 的基本原理

TLS 做的事情其实很简单:握手时交换证书和密钥,之后所有数据都加密传输。对于SCADA远程升级,我建议至少用TLS 1.2,最好用TLS 1.3。

关键配置项:

  • 证书验证:客户端必须验证服务端证书,别用自签名证书糊弄事。我习惯用Let's Encrypt,免费且自动续期。
  • 密码套件:优先用ECDHE + AES-GCM,性能好且安全。
  • 双向认证:如果条件允许,让设备也出示客户端证书,这样能防止非法设备接入。
避坑指南:我曾经在一个项目中,设备端的TLS库只支持1.0版本,结果被爆出POODLE漏洞。后来我强制要求所有新设备至少支持TLS 1.2,老设备通过OTA升级固件库。

3.2.2 实际部署建议

嗯,这里要注意:TLS不是加上就完事了。你得考虑证书过期的问题。工业设备可能几年不重启,证书过期了升级就断了。

我的做法:

  1. 证书有效期设短一点(比如3个月),但提前一个月就开始预更新。
  2. 在设备里内置一个备用证书,主证书过期时自动切换。
  3. 升级包里包含新证书,形成“证书随固件更新”的闭环。

3.3 断点续传机制:别让用户从头再来

远程升级最怕什么?最怕传到99%的时候断了。尤其是在偏远地区,网络时好时坏,一个50MB的固件可能传半天。断点续传就是解决这个问题的。

3.3.1 实现原理

说白了,就是把大文件切成小块,记录下哪些块已经传成功了。下次续传时,只传没传完的块。

两种主流方案:

  • 基于HTTP Range:客户端记录已接收的字节数,下次请求时带上Range: bytes=1024-头。服务端从指定位置继续发。
  • 基于分块校验:把文件分成固定大小的块(比如1MB),每块计算MD5或SHA256。客户端只请求缺失的块。
我推荐用分块校验方案。为什么?因为HTTP Range只能保证字节位置正确,但不能保证数据没损坏。分块校验能确保每个块都是完整的。我在一个水厂项目中,用分块校验方案,把升级成功率从85%提升到了99.5%。

3.3.2 具体实现要点

块大小怎么定?

  • 网络好:4MB-8MB,减少请求次数。
  • 网络差:256KB-512KB,避免重传太多数据。
  • 我一般取1MB作为默认值,然后根据实际网络延迟动态调整。

校验策略:

  • 每个块传完后立即校验,不对就重传。
  • 所有块传完后,对整个文件做一次完整性校验。
  • 校验算法用SHA256,别用MD5(虽然快,但已经有碰撞风险了)。
重要提醒:断点续传不是万能的。如果设备存储空间不够,或者文件被篡改过,续传反而会出问题。我建议在续传前先做一次环境检查:磁盘空间、文件完整性、网络状态,都通过了再继续。

3.4 知识体系总览

下面这张图是我自己整理的远程升级技术选型框架,你可以把它当作一个检查清单。

远程升级技术选型框架 通信协议选择 • MQTT:轻量级、低功耗 • HTTP/HTTPS:通用、易调试 • FTP/SFTP:大文件、局域网 选型依据:设备资源、网络环境 传输加密 • TLS 1.2/1.3 加密传输 • 证书验证与双向认证 • 密码套件:ECDHE+AES-GCM 核心:防篡改、防窃听 断点续传机制 • 分块校验(推荐) • HTTP Range 续传 • 动态块大小调整 目标:不因中断而重头开始 选型决策流程 1. 评估设备资源(CPU、内存、存储) 2. 分析网络环境(带宽、延迟、稳定性) 3. 选择主协议(MQTT/HTTP/FTP) 4. 叠加TLS加密 + 断点续传机制

这张图把三个核心模块串起来了。你从左上角开始,先选协议,再加固加密,最后加上续传机制。每一步都有对应的技术选型要点。

最后说一句:技术选型没有标准答案,但有一条铁律——安全永远优先。我见过太多人为了省事用明文传输,结果出了事故后悔莫及。记住,远程升级是SCADA系统的生命线,值得你花时间把每个细节都做到位。

公众号:蓝海资料掘金营,微信deep3321