2. HSMS 连接建立基础:TCP/IP 作为传输层、端口号约定与连接模式
HSMS(High-Speed SECS Message Services)完全依赖 TCP/IP 协议栈作为其底层传输载体。与 SECS-I 的 RS-232 串行通信不同,HSMS 利用 TCP 的面向连接、可靠传输、流量控制和拥塞避免机制,为半导体设备与主机之间的高速数据交换提供了稳定的通道。理解 TCP/IP 在 HSMS 中的角色、端口号约定以及主动/被动连接模式,是掌握 HSMS 状态机运转的前提。
2.1 TCP/IP 作为传输层:为什么选择 TCP?
SECS/GEM 标准选择 TCP 而非 UDP,主要基于以下半导体工厂自动化场景的刚性需求:
- 可靠传输:TCP 的确认重传机制确保 SECS 消息(如 S6F11 报表数据)不会在网络拥塞时丢失。
- 保序交付:TCP 保证字节流按序到达,避免 SECS 消息块(Message Block)重组时出现乱序错误。
- 连接状态感知:TCP 的 keep-alive 和连接断开检测,为 HSMS 的 T3 超时和连接恢复提供了底层信号。
- 全双工通信:设备与主机可同时收发 SECS 消息,满足实时控制需求。
💡 工程提示:在 HSMS 实现中,TCP_NODELAY 选项通常必须启用(禁用 Nagle 算法),以避免 SECS 短消息因等待缓冲区填充而产生额外延迟,导致 T3 超时误判。
下图展示了 TCP/IP 协议栈在 HSMS 通信体系中的位置:
2.2 端口号约定:5000 与 5001
SEMI 标准为 HSMS 分配了两个固定的 TCP 端口号,分别对应不同的通信模式:
| 端口号 | 模式名称 | 典型用途 | 连接方向 |
|---|---|---|---|
| 5000 | 被动模式(Passive Mode) | 设备作为 TCP Server 监听,主机主动连接 | 主机 → 设备 |
| 5001 | 主动模式(Active Mode) | 设备作为 TCP Client 主动连接主机 | 设备 → 主机 |
⚠️ 常见误区:端口 5000 和 5001 仅用于 HSMS 控制连接(Control Connection)。数据消息(SECS 消息)与控制消息共享同一 TCP 连接,不存在独立的数据端口。不要将 5001 误解为“数据端口”。
端口选择的实际考量:
- 工厂网络策略:若主机位于防火墙后且只允许出站连接,设备应使用主动模式(端口 5001)。
- 多设备场景:一台主机管理数百台设备时,被动模式(端口 5000)可简化主机侧的连接管理,主机只需连接已知的设备 IP。
- 安全审计:固定端口便于 IT 部门配置 ACL(访问控制列表)和端口监控。
2.3 主动连接模式(Active Mode)
在主动模式下,设备(Equipment)作为 TCP 客户端,主动向主机(Host)发起 TCP 连接请求。连接建立后,设备发送 HSMS 连接请求(Select.req)消息,完成 HSMS 会话层握手。
主动模式连接流程:
- 设备解析主机 IP 地址和端口 5001。
- 设备调用
connect()系统调用,发起 TCP 三次握手。 - TCP 连接建立后,设备发送
Select.req消息(Message ID = 0xFFFF)。 - 主机回复
Select.rsp,携带通信能力协商结果。 - 连接进入 Selected 状态,可开始数据通信。
🔧 实现要点:主动模式下,设备必须处理
connect() 超时。若主机无响应,设备应根据 T3 超时(通常 45 秒)触发重试,并遵循 HSMS 状态机回退到 Not Connected 状态。
2.4 被动连接模式(Passive Mode)
在被动模式下,设备作为 TCP 服务器,在端口 5000 上监听。主机主动连接设备,设备接受连接后同样需要完成 Select 握手。
被动模式连接流程:
- 设备在端口 5000 上调用
listen(),进入监听状态。 - 主机发起 TCP 连接请求,设备调用
accept()接受连接。 - TCP 连接建立后,主机发送
Select.req消息。 - 设备回复
Select.rsp,完成会话层握手。 - 连接进入 Selected 状态。
💡 工程提示:被动模式下,设备通常需要支持多个并发 TCP 连接(例如来自不同主机的冗余连接),但 HSMS 标准规定同一时间只有一个连接处于 Selected 状态。设备应拒绝或断开多余的 Select 请求。
2.5 主动 vs 被动模式对比
| 对比维度 | 主动模式(端口 5001) | 被动模式(端口 5000) |
|---|---|---|
| TCP 角色 | 设备 = Client,主机 = Server | 设备 = Server,主机 = Client |
| 连接发起方 | 设备 | 主机 |
| 设备配置复杂度 | 较高(需处理 DNS 解析、重连逻辑) | 较低(仅需监听端口) |
| 防火墙友好性 | 适合设备在 NAT 后或受限网络 | 需要主机能直接路由到设备 |
| 典型场景 | 老旧设备、远程工厂、VPN 环境 | 局域网内、主机集中管理 |
| Select 发起方 | 设备 | 主机 |
下图展示了两种连接模式的网络拓扑差异:
2.6 连接建立中的关键超时:T3 的早期介入
在 HSMS 连接建立阶段,T3 超时(Reply Timeout)虽然主要用于数据消息的响应等待,但在 Select 握手过程中同样生效:
- Select.req 发送后:发起方启动 T3 定时器,等待 Select.rsp。
- T3 超时处理:若在 T3 时间内未收到响应,发起方应断开 TCP 连接,并尝试重新连接(根据 T5 连接间隔定时器)。
- 典型 T3 值:45 秒(可配置,但建议与主机侧保持一致)。
🔧 实现要点:在连接建立阶段,T3 超时不应与 TCP 连接超时混淆。TCP
connect() 超时通常由操作系统控制(如 20 秒),而 T3 是 HSMS 会话层超时。两者应独立实现,避免嵌套阻塞。
2.7 连接模式选择决策树
实际项目中,选择主动还是被动模式通常遵循以下决策逻辑:
2.8 本章小结
- HSMS 依赖 TCP/IP 的可靠传输,端口 5000(被动模式)和 5001(主动模式)是 SEMI 标准强制约定。
- 主动模式下设备作为 TCP Client 发起连接,适合网络受限场景;被动模式下设备作为 TCP Server 监听,适合局域网集中管理。
- 无论哪种模式,TCP 连接建立后必须通过 Select.req/rsp 握手才能进入 Selected 状态,开始数据通信。
- T3 超时在连接建立阶段即生效,用于控制 Select 握手的响应等待,是后续状态机恢复策略的基础。