3. HSMS连接故障分类与现象映射

HSMS 连接故障诊断的第一步不是急着抓包,而是把"现象"准确归入"故障类别"。因为同一句"连不上",在设备端和主机端可能对应完全不同的根因:可能是 TCP 三次握手就没完成,可能是握手完成了但 Select 被拒,也可能是连接建立后几秒内被对端主动断开。本节把 HSMS 连接故障划分为五类——连接超时、连接拒绝、连接闪断、Select 失败、Deselect 异常,并给出每一类在设备端与主机端日志中的典型现象,形成一张可直接用于现场判断的"现象—类别"映射表。

一、先建立判断参照:连接生命周期与故障发生点

HSMS 基于 TCP,其连接生命周期可分为四个阶段:TCP 连接建立、Select 握手、数据收发(含 Linktest)、Deselect 与断开。故障分类的本质,就是判断故障发生在哪个阶段、由哪一方发起、以什么方式结束。因此诊断时先要明确参照系:本文所有"主动方/被动方"均以发起 TCP 连接的一方为主动方(Active),监听端口等待连接的一方为被动方(Passive)。在典型产线中,主机常配置为 Active,设备配置为 Passive,但也可相反,诊断前必须先确认本端角色,否则日志方向会读反。

下面这张图把五个故障类别锚定到连接生命周期的具体位置,并标注了每类故障在设备端与主机端的核心现象,可作为现场速查图使用。

HSMS 连接生命周期与五类故障映射 ① TCP 建立 ② Select 握手 ③ 数据/Linktest ④ Deselect/断开 连接超时 Timeout 发生点:① TCP 建立阶段 设备端:无任何连接日志, 监听端口无 accept 记录 主机端:connect 超时, 报 ETIMEDOUT / 连接超时 典型根因:IP/端口错、防火墙丢包 连接拒绝 Refused 发生点:① TCP 建立阶段 设备端:端口未监听, 无 accept 记录 主机端:connect 立即返回, 报 ECONNREFUSED 典型根因:服务未启动、端口被占 连接闪断 Flapping 发生点:②③ 建立后短时断开 设备端:accept 后数秒内 出现 disconnect / reset 主机端:连接成功又断开, 周期性重连 典型根因:T3/T5/T6/T7/T8 超时 Select 失败 Select Failed 发生点:② Select 握手阶段 设备端:收到 Select.req,回 Select.rsp 且 SelectStatus≠0(如 1=已Active,2=未就绪) 主机端:收到 Select.rsp 状态非 0, 判定 Select 失败并断开 典型根因:双方均 Active、状态机未就绪 Deselect 异常 Deselect Abnormal 发生点:④ Deselect/断开阶段 设备端:收到 Deselect.req 后未正常回 rsp, 或未按 T7 超时断开 主机端:Deselect.rsp 超时, 连接悬挂、状态机卡在 Selected 典型根因:T7 超时、状态机未复位

二、五类故障的判定要点与日志现象

连接超时的特征是"没有回应"。主机端 connect 调用在 T5(Connect Separation Timeout,默认 10s)或操作系统 TCP 超时后返回失败,日志常见 ETIMEDOUT 或"connection timed out"。设备端此时往往完全没有日志,因为 SYN 包根本没到达或到达后被防火墙丢弃。判断要点:设备端无 accept 记录,用 netstat -an | grep 5000 看不到 SYN_RECV 状态,基本可锁定网络层或 IP/端口配置问题。

连接拒绝的特征是"立即失败"。主机端 connect 几乎瞬间返回 ECONNREFUSED,说明 SYN 到达了目标主机,但目标端口没有进程监听,内核直接回 RST。设备端同样无 accept 记录,但用 netstat -an 可确认端口未处于 LISTEN。判断要点:超时是"等不到",拒绝是"马上被拒",两者在主机端日志的时间戳上差异非常明显,这是最快的区分手段。

连接闪断的特征是"连上又断"。设备端能看到 accept 成功,但随后几秒内出现 disconnect 或 connection reset;主机端则表现为连接成功、Select 可能已完成,但很快断开并周期性重连。这类故障最容易被误判为"网络不稳定",实际根因多在 HSMS 定时器:T3(Reply Timeout,默认 45s)、T5、T6(Control Transaction Timeout,默认 5s)、T7(Not Selected Timeout,默认 10s)、T8(Network Intercharacter Timeout,默认 5s)。例如 T7 设置过短,Select 后若 10s 内无数据交互,被动方会主动断开,形成规律性闪断。判断要点:观察断开间隔是否稳定,若稳定则几乎一定是定时器配置问题。

Select 失败的特征是"握手被拒"。设备端日志会记录收到 Select.req 并回复 Select.rsp,但 SelectStatus 非 0。常见状态值:0=接受,1=已处于 Active 状态,2=未就绪,3=已在使用。主机端收到非 0 状态后按协议断开。判断要点:查设备端 Select.rsp 的 SelectStatus 字段,若为 1,说明设备端自己也是 Active,双方角色冲突;若为 2,说明设备端状态机尚未进入可通信状态。

Deselect 异常的特征是"断不干净"。正常流程是主动方发 Deselect.req,被动方回 Deselect.rsp 后断开。异常时设备端可能未回 rsp,或回了但未按 T7 超时断开;主机端则出现 Deselect.rsp 超时、连接悬挂、状态机卡在 Selected。判断要点:检查设备端是否在收到 Deselect.req 后正确复位通信状态,以及 T7 是否被正确触发。

三、现场速查:现象到类别的映射表

下表把两端日志现象与故障类别直接对应,现场可先看主机端报错类型,再看设备端有无 accept 记录,两步即可缩小范围。

故障类别 主机端典型现象 设备端典型现象 首要排查方向
连接超时 connect 超时,ETIMEDOUT 无 accept 记录 IP/端口、防火墙、路由
连接拒绝 connect 立即失败,ECONNREFUSED 端口未 LISTEN 服务进程、端口占用
连接闪断 连上后短时断开,周期重连 accept 后 disconnect/reset T3/T5/T6/T7/T8 定时器
Select 失败 Select.rsp 状态非 0 回 Select.rsp 且 SelectStatus≠0 双方 Active 冲突、状态机就绪
Deselect 异常 Deselect.rsp 超时,连接悬挂 未回 rsp 或未按 T7 断开 T7 超时、状态机复位
判断顺序建议:先看主机端是"超时"还是"拒绝"(区分网络层与服务层),再看设备端有无 accept(确认连接是否真正到达),最后看断开时机与 Select/Deselect 报文状态(定位协议层)。三步走完,五类故障基本可唯一确定。
注意:连接闪断与 Select 失败可能同时出现。例如设备端因 T7 超时断开,主机端会先看到 Select 成功、随后闪断。此时不要只盯 Select 状态,应结合断开时间间隔与 T7 配置一起判断,避免误判为 Select 协议错误。