3. HSMS连接故障分类与现象映射
HSMS 连接故障诊断的第一步不是急着抓包,而是把"现象"准确归入"故障类别"。因为同一句"连不上",在设备端和主机端可能对应完全不同的根因:可能是 TCP 三次握手就没完成,可能是握手完成了但 Select 被拒,也可能是连接建立后几秒内被对端主动断开。本节把 HSMS 连接故障划分为五类——连接超时、连接拒绝、连接闪断、Select 失败、Deselect 异常,并给出每一类在设备端与主机端日志中的典型现象,形成一张可直接用于现场判断的"现象—类别"映射表。
一、先建立判断参照:连接生命周期与故障发生点
HSMS 基于 TCP,其连接生命周期可分为四个阶段:TCP 连接建立、Select 握手、数据收发(含 Linktest)、Deselect 与断开。故障分类的本质,就是判断故障发生在哪个阶段、由哪一方发起、以什么方式结束。因此诊断时先要明确参照系:本文所有"主动方/被动方"均以发起 TCP 连接的一方为主动方(Active),监听端口等待连接的一方为被动方(Passive)。在典型产线中,主机常配置为 Active,设备配置为 Passive,但也可相反,诊断前必须先确认本端角色,否则日志方向会读反。
下面这张图把五个故障类别锚定到连接生命周期的具体位置,并标注了每类故障在设备端与主机端的核心现象,可作为现场速查图使用。
二、五类故障的判定要点与日志现象
连接超时的特征是"没有回应"。主机端 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 超时、状态机复位 |