2、HSMS连接建立流程:主动连接与被动连接、T3/T5/T6/T8定时器作用、连接状态机详解

HSMS(High-Speed SECS Message Services)是建立在TCP/IP之上的SECS/GEM通信协议。理解HSMS连接的建立流程、定时器机制以及状态机转换,是诊断通信故障的核心基础。本节将详细拆解主动连接与被动连接的角色差异、四个关键定时器的作用,以及连接状态机的完整生命周期。

2.1 主动连接与被动连接

在HSMS通信中,两个实体(通常为Host和Equipment)通过TCP/IP建立连接。根据谁发起TCP连接请求,分为主动连接(Active Connect)和被动连接(Passive Connect)两种模式。

角色 行为描述 典型场景 注意事项
主动连接方 主动向对方IP:Port发起TCP SYN握手 Host主动连接Equipment 需配置对方IP和Port;重试间隔由T5控制
被动连接方 在指定端口上监听,等待连接请求 Equipment等待Host连接 需确保端口未被占用;监听状态由T8监控
关键原则: 同一对HSMS实体中,主动方和被动方角色必须固定。如果双方都配置为主动连接,会导致连接冲突;如果双方都配置为被动连接,则永远无法建立连接。
故障排查提示: 当出现“连接建立超时”时,首先检查主动连接方的IP地址、端口号是否正确,以及被动连接方的防火墙是否放行了该端口。
主动连接与被动连接流程对比 主动连接方 (Host) 被动连接方 (Equipment) ① TCP SYN ② TCP SYN-ACK ③ TCP ACK TCP连接建立 HSMS Select.req/rsp 主动连接方发起TCP三次握手,被动连接方监听等待;TCP建立后,主动方发送HSMS Select.req

2.2 四大定时器:T3、T5、T6、T8

HSMS协议定义了多个定时器来管理通信的可靠性和超时处理。其中与连接建立和链路诊断最密切的是T3、T5、T6、T8四个定时器。它们的配置错误是导致连接失败或通信中断的常见原因。

定时器 名称 默认值 作用范围 超时后果
T3 Reply Timeout 45秒 单个消息事务 重发消息或终止事务
T5 Connect Attempt Timeout 10秒 主动连接重试间隔 连接尝试失败,进入等待重试
T6 Select Timeout 5秒 Select事务等待 Select失败,连接断开
T8 Link Test Interval 60秒 链路空闲检测 发送Link Test.req,无响应则断开
常见配置陷阱: T3值设置过小(如<10秒)会导致正常处理时间较长的消息被误判为超时;T5值设置过小会导致频繁重试连接,浪费CPU和网络资源;T8值设置过大则无法及时发现链路中断。

2.2.1 T3 — 回复超时定时器

T3是每个消息事务级别的定时器。当发送方发出一个需要回复的消息(如S2F17)后,启动T3。如果在T3时间内未收到对应的回复消息(S2F18),则判定为事务超时。超时后,发送方可以选择重发消息或向上层报告错误。

2.2.2 T5 — 连接尝试间隔定时器

T5仅用于主动连接方。当主动连接方尝试TCP连接失败后,必须等待T5时间才能发起下一次连接尝试。这防止了“连接风暴”对网络和被连接方造成冲击。

2.2.3 T6 — Select事务超时定时器

T6专门用于HSMS Select事务。主动连接方发送Select.req后启动T6,如果在T6时间内未收到Select.rsp,则Select失败,连接将被关闭。T6通常设置为比T3更短的值。

2.2.4 T8 — 链路测试间隔定时器

T8用于链路空闲检测。当连接建立后,如果链路上在T8时间内没有任何数据交互,连接双方中的主动方会发送Link Test.req消息。如果对方未在T3时间内回复Link Test.rsp,则判定链路中断,关闭连接。

HSMS四大定时器作用域 时间 连接建立阶段 TCP握手 + Select T5(重试间隔) / T6(Select超时) 消息事务阶段 发送消息 → 等待回复 T3(回复超时) 链路空闲阶段 无数据交互 T8(链路测试间隔) 连接建立 消息交互 空闲检测 T5控制连接重试频率;T6控制Select事务等待;T3控制单条消息回复等待;T8控制链路健康检测

2.3 连接状态机详解

HSMS连接状态机定义了连接从创建到关闭的完整生命周期。理解状态机是诊断“连接卡死”或“状态不一致”问题的关键。HSMS连接状态机包含以下主要状态:

  • NOT_CONNECTED(未连接): 初始状态,无TCP连接存在。
  • CONNECTING(连接中): 主动连接方已发起TCP SYN,等待三次握手完成。
  • CONNECTED(已连接): TCP连接已建立,但尚未完成HSMS Select。
  • SELECTING(选择中): 已发送Select.req,等待Select.rsp。
  • SELECTED(已选择): HSMS连接完全建立,可以传输数据消息。
状态转换关键点: 只有进入SELECTED状态后,才能发送和接收SECS消息(如S1F13、S2F17等)。如果连接停留在CONNECTED或SELECTING状态,说明Select事务失败,需要检查T6定时器配置和对方是否支持HSMS。
HSMS连接状态机 NOT_CONNECTED CONNECTING CONNECTED SELECTING SELECTED 主动连接发起 TCP三次握手完成 发送Select.req 收到Select.rsp(成功) 连接失败(T5超时) Select失败(T6超时) 连接断开 / T8检测到链路中断

2.4 连接建立完整流程

结合上述概念,一个完整的HSMS连接建立流程如下:

  1. TCP连接建立: 主动连接方向被动连接方发起TCP三次握手。如果失败,等待T5时间后重试。
  2. HSMS Select事务: TCP连接建立后,主动连接方发送Select.req消息,启动T6定时器。
  3. Select响应: 被动连接方收到Select.req后,回复Select.rsp,状态码为0表示成功。
  4. 进入SELECTED状态: 主动连接方收到成功的Select.rsp后,连接进入SELECTED状态,可以开始传输数据。
  5. 链路维护: 在SELECTED状态下,如果T8时间内无数据交互,主动方发送Link Test.req进行链路健康检查。
诊断技巧: 使用Wireshark抓包时,过滤条件设置为tcp.port == 5000(假设HSMS端口为5000),观察TCP三次握手是否完成,以及是否有Select.req和Select.rsp消息。如果只有TCP握手没有Select消息,说明应用层未正确启动HSMS协议栈。

2.5 常见连接故障与定时器关联

故障现象 可能原因 关联定时器 排查方向
连接反复断开重连 T5设置过小,导致频繁重试 T5 检查T5配置值,建议≥10秒
Select一直失败 T6超时,对方未响应Select.req T6 检查对方HSMS协议栈是否运行
消息发送后无回复 T3超时,对方处理过慢或消息丢失 T3 增大T3值或检查网络丢包
链路空闲一段时间后断开 T8检测到链路中断,Link Test无响应 T8、T3 检查网络连通性和防火墙
重要提醒: 修改定时器参数后,必须重启HSMS连接才能生效。在生产环境中修改定时器前,建议先在测试环境验证,避免影响正常生产通信。