2. 会话建立基础:TCP/IP连接建立、HSMS握手流程、会话ID分配机制

SECS/GEM 通信会话的建立是设备与主机(Host)之间进行数据交换的前提。整个建立过程分为三个层次:TCP/IP 传输层连接、HSMS 应用层握手以及会话 ID 的逻辑分配。任何一层失败都会导致通信无法正常进行,因此理解这一基础流程对于后续的日志分析与故障排查至关重要。

2.1 TCP/IP 连接建立

HSMS(High-Speed SECS Message Services)协议完全基于 TCP/IP 协议栈。在 HSMS 会话开始之前,必须先建立可靠的 TCP 连接。设备通常作为 TCP 客户端(主动发起连接),主机作为 TCP 服务器(被动监听)。

关键参数:
  • IP 地址与端口号:主机侧固定监听端口(通常为 5000 或 5555),设备侧配置主机 IP。
  • 连接超时(T3 / Connect Timeout):设备发起 TCP SYN 后等待 SYN-ACK 的最大时间,通常为 10~30 秒。
  • 重试间隔与次数:若连接失败,设备应按照配置的间隔(如 5 秒)和最大重试次数(如 3 次)进行重连。
日志解析提示:在设备日志中搜索 "TCP connect to host:port" 或 "Connection refused"。若反复出现 "connect timeout",应优先检查网络路由与防火墙规则,而非 HSMS 配置。
TCP/IP 三次握手与 HSMS 协议栈关系 TCP/IP 三次握手与 HSMS 协议栈 设备 (Client) 主机 (Server) CLOSED → SYN_SENT LISTEN ① SYN (Seq=x) ② SYN-ACK (Seq=y, Ack=x+1) ③ ACK (Ack=y+1) ESTABLISHED ESTABLISHED HSMS 层 HSMS 层 TCP 连接已建立,准备 HSMS 握手 TCP 连接是 HSMS 会话的物理基础

2.2 HSMS 握手流程

TCP 连接建立后,设备与主机之间需要通过 HSMS 控制消息完成应用层握手。HSMS 定义了两种通信模式:主动模式(Active Mode)和被动模式(Passive Mode)。在半导体设备场景中,设备通常作为主动端发起握手。

握手过程通过两条控制消息完成:

  1. Select.req(选择请求):设备向主机发送,请求建立 HSMS 会话。
  2. Select.rsp(选择响应):主机回复设备,确认会话建立成功或拒绝。
常见握手失败原因:
  • Select.rsp 返回非 0 错误码:表示主机拒绝连接,常见原因包括会话 ID 冲突、主机资源不足、设备未注册。
  • Select.req 无响应(T5 超时):设备发送 Select.req 后,在 T5 超时时间内未收到 Select.rsp,应主动断开 TCP 连接并重试。
  • 协议版本不匹配:设备与主机使用的 HSMS 版本不一致(如 HSMS-SS vs HSMS-GS)。
HSMS 握手流程(Select.req / Select.rsp) HSMS 握手流程 设备 (Active) 主机 (Passive) 发送 Select.req ① Select.req (Device ID=xxx) 回复 Select.rsp ② Select.rsp (HCACK=0) 会话建立成功 会话建立成功 HCACK=0 表示握手成功;非 0 值表示拒绝

2.3 会话 ID 分配机制

会话 ID(Session ID)是 HSMS 层用于标识一个逻辑通信会话的唯一编号。在 Select.req 消息中,设备会携带一个 Device ID,主机根据该 ID 决定是否允许建立会话。

概念 说明 取值范围
Device ID 设备在 Select.req 中声明的 ID,用于标识设备身份 0 ~ 32767(15 位)
Session ID 主机分配的逻辑会话标识,用于后续消息路由 通常与 Device ID 相同
HCACK 握手确认码,0 表示成功,非 0 表示拒绝原因 0 ~ 255
HCACK 错误码速查表:
  • 0:成功(Success)
  • 1:拒绝,原因未指定(Reject, reason unspecified)
  • 2:拒绝,设备 ID 未注册(Device ID not registered)
  • 3:拒绝,设备 ID 已存在(Device ID already exists)
  • 4:拒绝,资源不足(Insufficient resources)
日志解析实战:在设备日志中查找 "Select.req sent, DeviceID=1234" 和 "Select.rsp received, HCACK=0"。若 HCACK 为 2,说明主机未配置该 Device ID,需检查主机侧的设备注册表。若 HCACK 为 3,说明存在重复的 Device ID,需检查网络内是否有其他设备使用了相同的 ID。
会话 ID 分配与 Select.req 消息结构 会话 ID 分配与 Select.req 消息结构 Select.req 消息结构 Message Length Session ID Header Byte 2 Header Byte 3 S, F, P, R System Bytes Device ID (15 bits) 会话 ID 分配流程 设备配置 Device ID Select.req (Device ID=1234) 主机验证并分配 Select.rsp (HCACK=0, Session ID=1234) 会话 ID = 1234 会话 ID = 1234

2.4 完整会话建立流程总结

将上述三个步骤串联起来,一个完整的 HSMS 会话建立流程如下:

  1. TCP 连接建立:设备向主机 IP:Port 发起 TCP 三次握手,进入 ESTABLISHED 状态。
  2. HSMS 握手:设备发送 Select.req(携带 Device ID),主机回复 Select.rsp(携带 HCACK)。
  3. 会话 ID 确认:若 HCACK=0,会话建立成功,后续所有消息使用该 Session ID 进行通信。
  4. 通信开始:设备与主机可以开始交换 SECS-II 消息(如 S1F13、S1F14 等)。
日志解析关键点:
  • 若 TCP 连接失败,日志中不会出现 HSMS 握手消息,应优先排查网络层。
  • 若 TCP 连接成功但 Select.req 无响应,检查 T5 超时配置(通常为 10 秒)。
  • 若 Select.rsp 返回 HCACK=2 或 3,检查主机侧的设备 ID 配置。
  • 会话建立成功后,设备应发送 S1F13(请求设备属性)作为第一个 SECS-II 消息。
实战案例:某设备日志显示 TCP 连接成功,但 Select.req 发送后 10 秒未收到 Select.rsp,随后设备主动断开 TCP 连接并重试。经排查,主机侧防火墙未开放 HSMS 端口(5000),导致 Select.req 被丢弃。调整防火墙规则后,握手成功。