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 数据。

HSMS 协议栈分层模型 应用层 — GEM 标准功能(设备控制、数据采集、报警管理) SECS-II 消息层 — 消息格式、流/功能编码、SML 表示 HSMS 会话层 — 连接管理、消息封装、心跳保活 TCP 传输层 — 面向连接、可靠传输、流量控制 IP 网络层 — 寻址、路由、数据包分片重组

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 展示了主动模式主机与被动模式设备之间的完整连接建立过程:

HSMS 主动/被动连接建立流程 主机(主动模式) 设备(被动模式) 1. 监听端口 5000 2. TCP connect() TCP 三次握手 3. Select Indication 4. Select Request 5. Select Response (成功)

2.2.3 连接建立步骤详解

  1. 设备端监听:被动模式设备在指定端口(通常为 5000)启动 TCP 监听,等待主机连接。
  2. TCP 三次握手:主动模式主机向设备 IP:Port 发起 TCP 连接请求,完成三次握手后建立 TCP 连接。
  3. Select Indication:设备端收到 TCP 连接后,向应用层上报连接指示,准备进行 HSMS 会话选择。
  4. Select Request:主机发送 HSMS Select Request 消息,请求建立 HSMS 会话。
  5. 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 个状态:

HSMS 会话建立状态机 Not Connected Connected Selected 通信中 TCP 连接 Select 成功 发送/接收消息 断开连接 / 超时 → 回到 Not Connected

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 的匹配关系。