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监控 |
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,无响应则断开 |
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,则判定链路中断,关闭连接。
2.3 连接状态机详解
HSMS连接状态机定义了连接从创建到关闭的完整生命周期。理解状态机是诊断“连接卡死”或“状态不一致”问题的关键。HSMS连接状态机包含以下主要状态:
- NOT_CONNECTED(未连接): 初始状态,无TCP连接存在。
- CONNECTING(连接中): 主动连接方已发起TCP SYN,等待三次握手完成。
- CONNECTED(已连接): TCP连接已建立,但尚未完成HSMS Select。
- SELECTING(选择中): 已发送Select.req,等待Select.rsp。
- SELECTED(已选择): HSMS连接完全建立,可以传输数据消息。
2.4 连接建立完整流程
结合上述概念,一个完整的HSMS连接建立流程如下:
- TCP连接建立: 主动连接方向被动连接方发起TCP三次握手。如果失败,等待T5时间后重试。
- HSMS Select事务: TCP连接建立后,主动连接方发送
Select.req消息,启动T6定时器。 - Select响应: 被动连接方收到
Select.req后,回复Select.rsp,状态码为0表示成功。 - 进入SELECTED状态: 主动连接方收到成功的
Select.rsp后,连接进入SELECTED状态,可以开始传输数据。 - 链路维护: 在SELECTED状态下,如果T8时间内无数据交互,主动方发送
Link Test.req进行链路健康检查。
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 | 检查网络连通性和防火墙 |