SECSGEM通信数据抓包与SML解析实战方法 - 第2节
2.1 TCP/IP 承载 SECS 消息的原理
HSMS(High-Speed SECS Message Services)是 SECS/GEM 协议在 TCP/IP 网络上的实现标准,定义于 SEMI E37 规范。它将原本用于 RS-232 串口的 SECS-I 消息封装为 TCP 字节流,利用现代以太网基础设施实现高速、可靠的设备通信。
核心原理:HSMS 将 SECS 消息(Message)封装为 HSMS 数据包(Packet),每个数据包包含 4 字节长度头 + 10 字节 HSMS 头 + 可变长度数据体,通过 TCP 连接按序传输。
2.1.1 协议栈分层模型
HSMS 位于 OSI 模型的会话层与表示层之间,其下层依赖 TCP 提供面向连接的可靠传输,上层承载 SECS-II 消息与 SML 数据。
2.1.2 消息封装格式
HSMS 数据包采用 TLV(Type-Length-Value)风格的定长头 + 变长体结构。每个数据包由以下三部分组成:
| 字段 | 长度(字节) | 说明 |
|---|---|---|
| Length | 4 | 后续数据总长度(HSMS 头 + 数据体),大端序 |
| HSMS Header | 10 | 包含会话 ID、消息类型、流/功能码、系统字节 |
| Data Body | 0~N | SECS-II 消息体(SML 编码后的二进制数据) |
抓包要点:在 Wireshark 中过滤
tcp.port == 5000 后,HSMS 数据包表现为 TCP 负载的前 4 字节为长度值。解析时需先读取 4 字节长度,再读取对应长度的 HSMS 头 + 数据体。
2.2 主动连接与被动连接模式
HSMS 定义了两种连接建立模式:主动模式(Active Mode)和被动模式(Passive Mode)。这两种模式决定了设备在 TCP 连接建立过程中的角色。
2.2.1 模式定义与角色分配
| 模式 | 角色 | 连接行为 | 典型设备 |
|---|---|---|---|
| 主动模式(Active) | 发起方(Initiator) | 主动发起 TCP 连接请求(connect) | 主机(Host) |
| 被动模式(Passive) | 响应方(Responder) | 监听端口,等待连接(listen/accept) | 设备端(Equipment) |
常见误区:主动/被动模式仅描述 TCP 连接建立时的角色,不决定后续消息传输方向。连接建立后,双方均可双向发送 SECS 消息。
2.2.2 连接建立流程
以下 SVG 展示了主动模式主机与被动模式设备之间的完整连接建立过程:
2.2.3 连接建立步骤详解
- 设备端监听:被动模式设备在指定端口(通常为 5000)启动 TCP 监听,等待主机连接。
- TCP 三次握手:主动模式主机向设备 IP:Port 发起 TCP 连接请求,完成三次握手后建立 TCP 连接。
- Select Indication:设备端收到 TCP 连接后,向应用层上报连接指示,准备进行 HSMS 会话选择。
- Select Request:主机发送 HSMS Select Request 消息,请求建立 HSMS 会话。
- Select Response:设备回复 Select Response,携带状态码(0x00 表示成功),会话正式建立。
实战经验:抓包时若只看到 TCP 三次握手但无 Select Request/Response,说明连接停留在 TCP 层,HSMS 会话未建立。此时设备不会响应任何 SECS 消息。
2.3 端口号与会话建立
2.3.1 默认端口号约定
SEMI E37 规范建议的默认端口号为 5000,但实际部署中可根据网络规划调整。以下为常见端口配置:
| 场景 | 端口号 | 说明 |
|---|---|---|
| 标准 HSMS 通信 | 5000 | SEMI E37 推荐默认端口 |
| 多设备场景 | 5001~5010 | 同一主机连接多台设备时分配不同端口 |
| 测试/开发环境 | 5000~5005 | 避免与生产环境冲突 |
| 防火墙穿透 | 443/8443 | 部分工厂将 HSMS 封装在 HTTPS 端口 |
2.3.2 会话建立完整状态机
HSMS 会话建立遵循严格的状态转换,从 Not Connected 到 Selected 共经历 4 个状态:
2.3.3 会话建立关键参数
| 参数 | 默认值 | 说明 |
|---|---|---|
| T3(Reply Timeout) | 45 秒 | 等待回复消息的超时时间 |
| T5(Connect Timeout) | 10 秒 | 主动连接建立超时 |
| T6(Control Timeout) | 5 秒 | 控制消息(Select/LinkTest)响应超时 |
| T8(Network Timeout) | 5 秒 | TCP 数据接收超时 |
抓包验证:使用 Wireshark 过滤
hsms 或 tcp.port == 5000,观察 Select Request/Response 的 System Bytes 是否匹配。匹配的 System Bytes 是会话建立成功的标志。
2.4 本章小结
- HSMS 通过 TCP/IP 承载 SECS 消息,使用 4 字节长度头 + 10 字节 HSMS 头 + 可变数据体的封装格式。
- 主动模式(主机)发起 TCP 连接,被动模式(设备)监听等待连接,两者角色在连接建立后不再影响消息传输。
- 默认端口号为 5000,会话建立需经过 Not Connected → Connected → Selected 三个状态。
- Select Request/Response 是 HSMS 会话建立的标志性消息,抓包时需重点检查 System Bytes 的匹配关系。