3. HSMS 高速通信协议:TCP/IP 基础、连接建立与断开、Linktest 机制与消息格式

3.1 TCP/IP 基础与 HSMS 协议栈

HSMS(High-Speed SECS Message Services)是 SEMI E37 标准定义的基于 TCP/IP 的通信协议,用于替代传统的 RS-232 串行 SECS-I 协议。HSMS 利用 TCP 的可靠传输、流量控制和连接管理能力,为半导体设备与主机之间提供高速、稳定的消息交换通道。

核心概念: HSMS 位于 OSI 模型的传输层之上,将 SECS-II 消息封装为 HSMS 消息,通过 TCP 连接传输。TCP 的可靠性保证了 HSMS 消息的有序、无差错交付。

3.1.1 HSMS 协议栈层次

OSI 层 协议/功能 说明
应用层 SECS-II (SEMI E5) 定义设备与主机间的业务消息格式(SxFx)
表示层 SECS-II 消息编码 将 SECS-II 数据项编码为字节流
会话层 HSMS (SEMI E37) 连接管理、消息分帧、会话控制
传输层 TCP 提供可靠、面向连接的字节流传输
网络层 IP 网络寻址与路由
链路层 以太网 物理网络接口

3.1.2 TCP 连接特性对 HSMS 的影响

  • 可靠传输: TCP 的确认重传机制确保 HSMS 消息不丢失、不重复。
  • 有序交付: TCP 保证字节流按发送顺序到达,HSMS 无需额外排序逻辑。
  • 流量控制: TCP 滑动窗口机制防止发送方过快导致接收方缓冲区溢出。
  • 连接状态: TCP 连接建立(三次握手)和断开(四次挥手)是 HSMS 会话管理的基础。
  • 保活机制: TCP Keep-Alive 可检测连接中断,但 HSMS 定义了更精细的 Linktest 机制。
测试要点: 在 HSMS 测试中,应关注 TCP 连接的超时重传参数(如 RTO、RTT)以及 TCP 窗口大小,这些参数直接影响 HSMS 消息的吞吐量和延迟。

3.2 HSMS 连接建立与断开

HSMS 定义了两种连接模式:主动模式(Active Mode) 和 被动模式(Passive Mode)。设备通常配置为主动模式,主动向主机发起 TCP 连接;主机配置为被动模式,监听指定端口等待连接。

3.2.1 连接建立流程(Select 过程)

HSMS 连接建立分为两个阶段:TCP 连接建立 和 HSMS 会话建立(Select)。

  1. TCP 三次握手: 主动方(设备)向被动方(主机)发起 TCP SYN,完成三次握手,建立 TCP 连接。
  2. HSMS Select 请求: 设备发送 Select.req 消息,请求建立 HSMS 会话。
  3. HSMS Select 响应: 主机回复 Select.rsp,携带状态码(0x00 表示成功)。
  4. 会话建立完成: 双方进入通信状态,可以交换 SECS-II 消息。
常见故障: Select 失败通常由以下原因引起:TCP 连接未完全建立、设备 ID 不匹配、主机未处于监听状态、防火墙阻断端口。测试时应使用网络抓包工具(如 Wireshark)验证 TCP 握手和 HSMS Select 消息交换。
HSMS 连接建立与断开流程 设备(主动方) 主机(被动方) ① TCP SYN ② TCP SYN-ACK ③ TCP ACK ④ Select.req ⑤ Select.rsp (0x00) 通信状态:SECS-II 消息交换 ⑥ Deselect.req ⑦ Deselect.rsp

3.2.2 连接断开流程(Deselect 过程)

HSMS 会话的断开同样分为两个阶段:HSMS 会话断开(Deselect) 和 TCP 连接断开。

  1. Deselect 请求: 任一方发送 Deselect.req 消息,请求终止 HSMS 会话。
  2. Deselect 响应: 对方回复 Deselect.rsp,确认会话终止。
  3. TCP 连接关闭: 双方执行 TCP 四次挥手,释放连接资源。
HSMS 消息 方向 功能 关键字段
Select.req 主动方 → 被动方 请求建立 HSMS 会话 Device ID, Session ID
Select.rsp 被动方 → 主动方 响应 Select 请求 Status Code (0x00=成功)
Deselect.req 任一方 → 对方 请求终止 HSMS 会话 Device ID, Session ID
Deselect.rsp 对方 → 请求方 确认会话终止 Status Code
测试建议: 在测试 Deselect 过程时,应验证双方在收到 Deselect.rsp 后是否正确关闭 TCP 连接。常见问题包括:一方未发送 Deselect 直接关闭 TCP(导致对端异常)、Deselect.rsp 超时未收到等。

3.3 Linktest 机制

Linktest 是 HSMS 定义的连接保活机制,用于检测 TCP 连接是否仍然有效。与 TCP Keep-Alive 不同,Linktest 在 HSMS 应用层实现,具有更精细的控制和更明确的语义。

3.3.1 Linktest 工作原理

  • 定时发送: 主动方(设备)定期发送 Linktest.req 消息,默认间隔为 10 秒(可配置)。
  • 响应超时: 主动方等待 Linktest.rsp 响应,超时时间通常为 5 秒(可配置)。
  • 重试机制: 若超时未收到响应,主动方重试 Linktest.req,重试次数默认为 3 次。
  • 连接断开: 若重试次数耗尽仍未收到响应,主动方判定连接断开,执行 Deselect 并关闭 TCP 连接。
关键参数: Linktest 间隔(T3)、Linktest 超时(T5)、Linktest 重试次数(N1)。这些参数在 HSMS 标准中有推荐值,但实际部署中可根据网络状况调整。

3.3.2 Linktest 消息格式

字段 长度(字节) 说明
Message Length 4 消息体长度(不含本字段)
Session ID 4 会话标识
Header Byte 2 1 0x00(保留)
Header Byte 3 1 0x00(保留)
Message Type 1 0x05 (Linktest.req) / 0x06 (Linktest.rsp)
Message Body 0 Linktest 消息无消息体
Linktest 机制流程图 设备(主动方) 主机(被动方) 定时器 T3 到期 Linktest.req 收到 Linktest.req Linktest.rsp 收到 Linktest.rsp 重置 T3 定时器

3.3.3 Linktest 故障场景

故障场景 现象 排查方法
Linktest.rsp 超时 设备重试 Linktest.req,重试次数耗尽后断开连接 检查主机是否存活、网络是否拥塞、防火墙是否丢弃 UDP/TCP 包
Linktest 间隔过短 网络负载增加,可能触发误判 调整 T3 参数,避免过于频繁的 Linktest 消息
Linktest 间隔过长 连接断开后长时间未被检测到 缩短 T3 间隔,或结合 TCP Keep-Alive 使用
主机未实现 Linktest 设备持续重试 Linktest.req,最终断开连接 确认主机 HSMS 实现是否完整支持 Linktest
测试重点: 在测试 Linktest 机制时,应模拟网络中断(如拔掉网线、关闭主机端口),验证设备能否在预期时间内检测到连接断开并执行 Deselect。同时,应验证恢复连接后设备能否重新建立 HSMS 会话。

3.4 HSMS 消息格式

HSMS 消息采用固定长度的消息头(Header)和可变长度的消息体(Body)组成。消息头包含会话标识、消息类型、设备 ID 等信息,消息体承载 SECS-II 编码后的数据。

3.4.1 HSMS 消息头结构

偏移(字节) 字段 长度(字节) 说明
0 Message Length 4 消息体长度(大端序),不含本字段和消息头
4 Session ID 4 会话标识,用于多会话场景
8 Header Byte 2 1 保留/控制位
9 Header Byte 3 1 保留/控制位
10 Message Type 1 消息类型编码
11 Message Body 可变 SECS-II 编码后的消息数据

3.4.2 消息类型编码

消息类型 编码(十六进制) 方向 说明
Data Message 0x01 双向 承载 SECS-II 数据消息(Primary/Secondary)
Select.req 0x05 主动方 → 被动方 请求建立 HSMS 会话
Select.rsp 0x06 被动方 → 主动方 响应 Select 请求
Deselect.req 0x07 任一方 → 对方 请求终止 HSMS 会话
Deselect.rsp 0x08 对方 → 请求方 确认会话终止
Linktest.req 0x09 主动方 → 被动方 连接保活探测
Linktest.rsp 0x0A 被动方 → 主动方 连接保活响应
Reject.req 0x0B 任一方 → 对方 拒绝无效消息

3.4.3 HSMS 消息示例(Select.req)

// HSMS Select.req 消息的十六进制表示
// 消息长度 = 0x00000000(无消息体)
// Session ID = 0x00000001(设备 ID = 1)
// Header Byte 2 = 0x00
// Header Byte 3 = 0x00
// Message Type = 0x05 (Select.req)

字节序列:
00 00 00 00    // Message Length = 0
00 00 00 01    // Session ID = 1
00             // Header Byte 2
00             // Header Byte 3
05             // Message Type = Select.req

3.4.4 HSMS 消息格式对比

特性 HSMS SECS-I (RS-232)
传输层 TCP/IP RS-232 串口
消息头长度 10 字节(固定) 可变(依赖块长度)
最大消息长度 4 GB(由 4 字节长度字段决定) 受串口速率和缓冲区限制
连接管理 Select/Deselect/Linktest 无(依赖物理连接)
多会话支持 支持(通过 Session ID) 不支持
错误检测 依赖 TCP 校验和 依赖块校验和(Block Check)
测试工具: 使用 Wireshark 的 HSMS 解析器可以直观查看 HSMS 消息的各个字段。在测试中,应重点关注 Message Length 字段是否正确、Session ID 是否匹配、Message Type 是否合法。

3.5 本章小结

  • HSMS 基于 TCP/IP 提供可靠、高速的 SECS 消息传输,协议栈层次清晰。
  • 连接建立通过 TCP 三次握手 + HSMS Select 过程完成,断开通过 Deselect + TCP 四次挥手完成。
  • Linktest 机制是 HSMS 应用层的连接保活手段,参数配置直接影响故障检测的及时性和准确性。
  • HSMS 消息格式固定,消息头 10 字节,消息体可变,消息类型编码定义了 8 种控制消息和 1 种数据消息。
  • 测试 HSMS 时,应结合网络抓包工具和 HSMS 模拟器,验证连接建立/断开流程、Linktest 机制以及消息格式的正确性。