2. HSMS 连接模型:主动连接与被动连接模式,TCP/IP 通信基础

HSMS(High-Speed SECS Message Services)是建立在 TCP/IP 协议之上的通信层。理解其连接模型是掌握状态机与重连机制的前提。HSMS 定义了两种连接建立模式:主动连接(Active) 与 被动连接(Passive)。这两种模式决定了设备在建立 TCP 连接时的角色分工。

2.1 TCP/IP 通信基础回顾

HSMS 使用标准的 TCP 套接字(Socket)进行通信。TCP 提供面向连接、可靠、基于字节流的传输服务。在 HSMS 上下文中,通信双方通常分为 主机(Host) 和 设备(Equipment)。

  • IP 地址与端口号:每个 HSMS 实体需要配置一个唯一的 IP 地址和一个协商好的端口号(通常为 5000 或 5555,但可配置)。
  • TCP 三次握手:建立连接前,主动方发送 SYN,被动方回复 SYN-ACK,主动方再发送 ACK,完成连接建立。
  • 连接终止:通过四次挥手(FIN 包)正常关闭,或通过 RST 包异常终止。
  • 心跳与保活:HSMS 依赖 T3 定时器(事务超时)和 T6 定时器(连接响应超时)来检测连接健康状态,而非仅依赖 TCP Keep-Alive。
关键点:HSMS 的主动/被动模式仅决定谁先发起 TCP 连接请求,不决定通信后的主从关系。一旦连接建立,双方是对等的,都可以发起 SECS 消息事务。

2.2 主动连接模式(Active Mode)

在主动连接模式下,设备或主机作为 客户端,主动向对端发起 TCP 连接请求。该模式通常用于设备端主动向主机注册或上报事件。

  • 角色:主动方(Active Entity)调用 connect() 系统调用。
  • 配置:需要知道对端的 IP 地址和端口号。
  • 典型场景:设备上电后,主动连接主机。
  • 重连行为:当连接断开后,主动方负责按照重连策略(如 T3 超时后)重新发起连接。

2.3 被动连接模式(Passive Mode)

在被动连接模式下,设备或主机作为 服务器,在指定端口上监听,等待对端发起连接。该模式通常用于主机等待设备连接。

  • 角色:被动方(Passive Entity)调用 listen() 和 accept() 系统调用。
  • 配置:只需要本地 IP 和监听端口,不需要预先知道对端地址。
  • 典型场景:主机作为服务器,等待多台设备连接。
  • 重连行为:被动方不主动发起连接,只负责接受连接。如果连接断开,被动方只需重新进入监听状态,等待主动方重连。

2.4 主动与被动模式对比

对比维度 主动模式(Active) 被动模式(Passive)
网络角色 客户端(Client) 服务器(Server)
连接发起方 自身 对端
配置需求 需配置对端 IP 和端口 仅需本地 IP 和端口
重连责任 负责重连 仅等待连接
典型实现 socket() → connect() socket() → bind() → listen() → accept()
适用方 通常为设备端 通常为主机端

2.5 HSMS 连接建立流程(SVG 架构图)

下图展示了主动方与被动方在 TCP/IP 协议栈上的连接建立过程,以及 HSMS 层在连接建立后的角色。

HSMS 主动连接与被动连接建立流程 主动方(Active) 被动方(Passive) 1. listen() 监听端口 2. connect() 发起连接 TCP SYN 3. accept() 接受连接 TCP SYN-ACK 4. 连接建立成功 TCP ACK ✅ 连接建立完成

2.6 连接模式选择策略

在实际的半导体设备集成中,连接模式的选择通常遵循以下原则:

  1. 主机作为被动方:这是最常见的部署模式。主机运行 HSMS 服务器,监听固定端口,等待多台设备连接。主机无需知道每台设备的 IP 地址。
  2. 设备作为主动方:设备上电后,根据配置的主机 IP 和端口,主动发起连接。设备负责维护连接状态,并在断开后重连。
  3. 双向主动/被动:某些场景下,主机和设备都可以配置为主动方,但必须避免同时发起连接导致冲突。通常通过配置协商或使用不同的端口号来避免。
常见陷阱:不要将 HSMS 的主动/被动模式与 SECS-II 的通信角色混淆。HSMS 只负责传输层连接,不改变应用层的消息交互规则。主动方在连接建立后,并不自动获得消息发起优先权。

2.7 连接建立后的 HSMS 层初始化

TCP 连接建立后,HSMS 层还需要进行协议握手,才能开始传输 SECS 消息。这个过程称为 HSMS 连接初始化,涉及以下步骤:

步骤 方向 消息类型 说明
1 主动方 → 被动方 Select.req 主动方请求建立 HSMS 会话
2 被动方 → 主动方 Select.rsp 被动方响应,携带状态码(0=成功)
3 双方 Linktest.req / Linktest.rsp 可选,用于验证连接健康状态
4 双方 Separate.req 用于正常断开 HSMS 会话
实践要点:在编写 HSMS 通信代码时,主动方应在 TCP 连接建立成功后立即发送 Select.req。如果被动方在 T6 超时时间内未收到 Select.req,应主动关闭 TCP 连接。T6 定时器通常设置为 5 秒。

2.8 连接断开与重连触发

当 TCP 连接因网络故障、对端崩溃或 T3 超时而断开时,HSMS 状态机将进入 未连接(Not Connected) 状态。此时,主动方应根据配置的重连策略(如固定间隔、指数退避)重新执行连接流程。

  • T3 超时:事务等待响应超时,通常触发消息重发或事务终止,进而可能导致连接断开。
  • T6 超时:连接响应超时,直接触发连接断开。
  • 重连间隔:建议初始间隔 1 秒,最大间隔 30 秒,避免频繁重连导致网络拥塞。