2、HSMS连接建立流程:TCP三次握手、HSMS Select/Attach过程、连接状态机详解

HSMS(High-Speed SECS Message Services)连接建立是设备与主机之间通信的物理与逻辑基础。整个建立过程分为三个层次:TCP传输层连接、HSMS会话层选择、以及状态机迁移。任何一个环节失败,都会导致连接建立失败。本节将逐层拆解标准流程,并给出每个步骤的关键验证点。

2.1 TCP三次握手:物理连接建立

HSMS基于TCP/IP协议栈,在发送任何SECS消息之前,必须先完成TCP三次握手。设备(主动方)与主机(被动方)通过SYN、SYN-ACK、ACK三个报文段建立全双工通道。

关键验证点:三次握手完成后,双方各自维护一个已建立(ESTABLISHED)状态的socket。如果握手未完成,HSMS层无法启动任何Select/Attach过程。
TCP三次握手时序图 设备(主动方) 主机(被动方) CLOSED LISTEN ① SYN (seq=x) SYN_SENT ② SYN-ACK (seq=y, ack=x+1) SYN_RCVD ③ ACK (ack=y+1) ESTABLISHED ESTABLISHED TCP连接建立后,socket进入ESTABLISHED状态,HSMS层开始工作
TCP三次握手报文与状态迁移
步骤 报文 设备状态 主机状态 常见失败原因
① SYN CLOSED → SYN_SENT LISTEN 主机端口未监听、防火墙拦截SYN
② SYN-ACK SYN_SENT LISTEN → SYN_RCVD 设备未收到SYN-ACK(路由不可达)
③ ACK SYN_SENT → ESTABLISHED SYN_RCVD → ESTABLISHED 主机未收到ACK(半连接队列溢出)
调试建议:使用 tcpdump -i eth0 'tcp port 5000' 或 Wireshark 捕获三次握手报文。如果只看到SYN发出但无SYN-ACK返回,优先检查主机端口可达性与防火墙规则。

2.2 HSMS Select/Attach过程:会话层建立

TCP连接建立后,设备与主机进入HSMS会话层协商。标准HSMS协议定义了两个关键过程:Select过程(选择通信模式)和Attach过程(附加会话标识)。实际工业实现中,大多数设备使用Select过程完成会话建立,Attach过程用于多会话场景。

2.2.1 Select过程(最常用)

设备作为主动方,发送Select.req消息,主机回复Select.rsp。Select过程的核心目的是协商通信模式(主动/被动)并建立逻辑连接。

HSMS Select过程消息交互 设备 主机 Select.req (device_id, mode) 验证device_id Select.rsp (HCACK=0 成功) 逻辑连接建立成功,进入Selected状态
Select.rsp中HCACK返回值含义
HCACK值 含义 根因方向
0 成功 —
1 连接已存在(重复Select) 设备重复发起Select,或主机未清理旧连接
2 未连接(TCP未建立) TCP层未完成三次握手
3 无效device_id 设备ID与主机配置不匹配
4 其他错误 主机内部异常,需查看主机日志

2.2.2 Attach过程(多会话场景)

Attach过程用于在同一个TCP连接上建立多个逻辑会话。设备发送Attach.req,主机回复Attach.rsp。Attach过程在Select过程之后或同时进行,但实际工业现场较少使用,多数设备仅使用Select过程。

常见误区:部分工程师将Attach过程视为Select过程的替代。实际上,Select过程建立的是控制连接,Attach过程建立的是数据连接。对于单会话设备,Select过程已足够;多会话设备(如同时处理多个lot)才需要Attach。

2.3 连接状态机详解

HSMS协议定义了一套严格的状态机,用于管理连接生命周期。设备与主机各自维护独立的状态机,状态迁移由TCP事件和HSMS消息驱动。理解状态机是诊断连接建立失败的核心能力。

HSMS连接状态机(设备侧) NOT CONNECTED CONNECTED SELECTED TCP连接建立 Select成功 连接断开/超时 TCP断开 状态机关键规则 • 只有SELECTED状态才能发送SECS-II消息(S1F13等) • CONNECTED状态只能发送控制消息(Select.req、Linktest.req) • 任何状态收到TCP断开事件,立即回到NOT CONNECTED
HSMS状态机各阶段允许的操作
状态 允许发送的消息 允许接收的消息 典型持续时间
NOT CONNECTED 无(仅发起TCP连接) 无 设备启动后或断开后
CONNECTED Select.req, Linktest.req, Separate.req Select.rsp, Linktest.rsp, Separate.rsp 通常<1秒(快速进入SELECTED)
SELECTED 所有SECS-II消息(SxFy) 所有SECS-II消息(SxFy) 设备运行期间持续

2.4 连接建立完整流程总结

将上述三个层次串联起来,HSMS连接建立的完整流程如下:

  1. TCP三次握手:设备向主机端口发起SYN,完成三次握手,socket进入ESTABLISHED状态。
  2. 状态迁移至CONNECTED:TCP连接建立后,HSMS层自动将状态机从NOT CONNECTED迁移至CONNECTED。
  3. 发送Select.req:设备在CONNECTED状态下发送Select.req消息,携带device_id和通信模式。
  4. 主机验证并回复Select.rsp:主机验证device_id有效性,返回HCACK=0表示成功。
  5. 状态迁移至SELECTED:设备收到HCACK=0后,状态机从CONNECTED迁移至SELECTED。
  6. 开始SECS-II通信:在SELECTED状态下,设备可以发送S1F13等SECS-II消息进行数据交换。
调试黄金法则:当连接建立失败时,按层次排查——先确认TCP三次握手是否完成(抓包看ESTABLISHED),再确认Select过程是否收到HCACK=0,最后检查状态机是否卡在CONNECTED状态。80%的HSMS连接失败问题出在TCP层或device_id配置错误。