“数采仪显示连接成功,数据也在发,平台那边一条都看不到,抓包全是十六进制乱码。”这是华东某化工园区一位运维工程师上周的原话。最近这类反馈不止一例,共同点是现场刚按当地要求把上传通道切成了SM4国密加密。
结论先说:连接成功但平台没数据,多数不是网络断了,而是SM4国密加密的参数两端对不上——加密开关只开了一头,或者密钥、初始向量(IV)、工作模式、填充方式有一项不一致,也可能是平台仍按明文长度去解析加密后的报文。真正丢包断链导致的情况反而是少数。
连接成功不等于数据可用
TCP建链只证明IP和端口通。HJ 212报文里真正承载监测值的是CP字段,加密后这段变成密文,平台按明文模板解析时,CRC可能还是对的,但因子编码、浓度、折算值全成了脏数据,入库阶段被直接丢弃;有的平台则判报文格式错误,回一个失败应答。现场看到的就是“发了、没数据”。
原因按四层拆开看
协议层
- 加密开关不一致:设备开了、平台侧没开,或平台要求加密而设备还是明文。
- 密钥不一致:SM4是16字节密钥,复制粘贴时多一个空格、换行,长度看着对、值已经错了。
- IV不一致:CBC模式下IV不同,第一个16字节分组一定解不出来,后面跟着全错。
- 工作模式不同:设备按ECB、平台按CBC,或反过来。
- 填充方式不同:PKCS7和零填充在最后一块结果不同,长度差几个字节。
- 加密范围不同:只加密CP段,还是整包加密,两端理解不一致。
网络层
- 加密后启用了新端口,防火墙白名单没同步放行。
- 经过NAT后源地址变化,平台侧IP绑定校验不通过。
- 心跳间隔与平台判定掉线的阈值不匹配,刚连上就被踢。
设备层
- 固件版本不支持SM4,界面有开关但实际没生效。
- 密钥写入后未重启或未重新加载配置,运行的是旧参数。
- 设备时间偏差过大,QN请求编码与平台对不上。
平台层
- 加密通道未开通,或密钥版本号与现场不一致。
- 解析模板还是旧版,按明文长度切字段。
- MN未在平台登记,报文被静默丢弃。
排查顺序本身就是知识
先近后远、先一致后连通。加密是应用层的事,链路通不通放最后查,否则容易在网络里绕半天。
- 第一步,确认平台到底要不要加密、用哪种模式。这一条不问清,后面全是猜。
- 第二步,逐项核对密钥、IV、模式、填充四项,用同一份配置对照,不要凭记忆。
- 第三步,确认加密范围是整包还是仅CP段。
- 第四步,抓包看报文总长度和字段位置,与平台解析模板比。
- 第五步,才是查端口、白名单、心跳这些网络项。
每一步怎么判断、怎么处置
- 现象:连接成功、平台无数据。判断:先看平台是否要求加密。动作:向平台方确认接入参数,不靠现场推测。
- 现象:密文长度比明文长一截且不是16的整数倍关系。判断:填充方式或加密范围不一致。动作:两端统一为同一填充规则,只加密CP段。
- 现象:首条数据全乱、后续偶有正常。判断:IV或模式不一致。动作:核对CBC的IV,或统一改为同一模式。
- 现象:平台回失败应答、设备重发。判断:密钥错误或MN未登记。动作:重录16字节密钥,核对MN。
- 现象:设备根本连不上。判断:端口或白名单。动作:放行新端口后再测。
三个容易误判的坑
- 把“连接成功”当成“通了”。TCP通只说明链路可达,应用层能不能被识别是另一回事,先看平台有没有入库记录。
- 以为密钥对上就行。CBC模式下IV不对,前16字节必然错,很多人只核密钥不核IV。
- 拿旧版调试工具或旧固件做验证。工具本身不支持SM4,看到乱码就认定设备坏了,实际是测试端没解密能力。
常见问题
我这个情况到底要不要开加密?
看平台接入要求,不是看设备有没有这个功能。平台没要求就别开,开了反而多一层不一致的风险。
密钥明明填对了,怎么还是不行?
先查IV和模式,再查填充。密钥对只是第一步,四项里错一项结果都一样。
平台说报文长度不对,是不是加密后变长了?
会变。SM4按16字节分组,填充后会多出若干字节,平台模板要按加密后的长度重新切字段。
换了新固件还是传不上,是不是设备坏了?
先别下结论。抓一次包,看密文长度和字段位置,多数是配置没重新加载,不是硬件问题。