2. Link Test 基本概念
2.1 Link Test 的定义
Link Test(链路测试)是 SECS/GEM 通信中用于验证 物理连接 与 会话层 是否正常工作的轻量级探测机制。它通过发送一个无数据负载的测试报文,并等待对方回显确认,来判断通信链路是否处于可用状态。
核心定义:Link Test 是一种“心跳”式的双向确认机制,不携带应用层数据,仅用于检测 TCP/IP 连接或 HSMS 会话的存活性与响应性。
在 SECS/GEM 协议栈中,Link Test 位于 传输层与会话层之间,属于 HSMS(High-Speed SECS Message Services)协议的一部分。它不依赖 GEM 状态机,而是直接操作底层 Socket 连接。
2.2 Link Test 的目的
Link Test 的主要目的可以归纳为以下四点:
- 连接存活检测: 定期确认 TCP 连接未被网络设备(防火墙、交换机)意外中断,或对端进程未崩溃。
- 故障快速发现: 在设备空闲时主动探测,避免因长时间无数据交换而无法感知断连,从而缩短故障发现时间。
- 资源回收触发: 当连续多次 Link Test 失败时,协议栈自动触发连接关闭与资源清理,防止半开连接堆积。
- 通信质量基线: 通过记录 Link Test 的响应时间与成功率,为网络运维提供基础健康指标。
| 目的维度 | 说明 | 典型场景 |
|---|---|---|
| 连接存活检测 | 验证 TCP Socket 是否仍处于 ESTABLISHED 状态 | 设备空闲超过 10 秒,发送 Link Test 确认 |
| 故障快速发现 | 在 3~5 秒内感知断连,而非等待 TCP 超时(通常 30 秒以上) | 网络交换机端口闪断,Link Test 立即失败 |
| 资源回收触发 | 关闭无效连接,释放端口与线程资源 | 连续 3 次 Link Test 无响应,主动断开 |
| 通信质量基线 | 统计响应延迟与丢包率,辅助运维决策 | Link Test 平均响应时间 > 500ms 时告警 |
2.3 Link Test 在 GEM 标准中的位置
GEM 标准(SEMI E30)本身并不直接定义 Link Test 的报文格式与传输机制,而是将其委托给底层的 HSMS 协议(SEMI E37) 实现。Link Test 在协议栈中的位置如下图所示:
关键理解:Link Test 是 HSMS 会话层的功能,GEM 应用层不直接发送 Link Test 报文。GEM 通过配置
T3(回复超时)和 T5(连接间隔)等定时器间接影响 Link Test 的行为。
2.4 Link Test 与 GEM 状态机的关系
虽然 Link Test 属于 HSMS 层,但 GEM 标准(E30)明确规定了 Link Test 在设备状态机中的触发条件与行为:
- COMMUNICATING 状态: 设备处于正常通信状态时,若连续
T3超时时间内无应用层消息交互,HSMS 层自动发起 Link Test。 - NOT COMMUNICATING 状态: 设备不主动发送 Link Test,但可以响应对方发起的 Link Test 请求。
- DISABLED 状态: 完全禁止 Link Test 的发送与接收。
| GEM 状态 | Link Test 发送 | Link Test 接收 | 典型行为 |
|---|---|---|---|
| COMMUNICATING | 允许(空闲超时触发) | 允许 | 正常心跳探测 |
| NOT COMMUNICATING | 禁止 | 允许 | 仅被动响应 |
| DISABLED | 禁止 | 禁止 | 完全静默 |
2.5 Link Test 报文结构
Link Test 使用 HSMS 协议定义的 控制报文 格式,不包含 SECS-II 数据项。其报文结构如下:
HSMS Link Test 报文格式 (16 字节):
字节 0-3: 消息长度 (固定为 0x0000000A = 10 字节)
字节 4: 设备 ID 高字节 (Session ID)
字节 5: 设备 ID 低字节
字节 6: 控制报文类型 (0x00 = Select.req, 0x01 = Select.rsp,
0x02 = Deselect.req, 0x03 = Deselect.rsp,
0x04 = Linktest.req, 0x05 = Linktest.rsp)
字节 7: 保留字节 (0x00)
字节 8-9: 系统字节 (用于请求-响应匹配)
字节 10-13: 保留 (0x00000000)
注意:Link Test 请求(Linktest.req)与响应(Linktest.rsp)的报文长度固定为 10 字节,不携带任何应用层负载。系统字节必须保持一致,以便接收方将响应与请求匹配。
2.6 Link Test 的典型时序
下图展示了一次完整的 Link Test 交互过程:
时序要点:
- 设备 A 在空闲超时后主动发送 Linktest.req,系统字节用于匹配请求与响应。
- 设备 B 必须在
T3时间内回复 Linktest.rsp,且系统字节必须与请求一致。 - 若设备 A 在
T3内未收到响应,则判定 Link Test 失败,并触发重试或断连流程。
2.7 Link Test 的关键参数
GEM 标准定义了以下与 Link Test 行为相关的定时器参数:
| 参数 | 默认值 | 作用范围 | 说明 |
|---|---|---|---|
| T3 | 45 秒 | 全局 | 等待 Link Test 响应或应用层回复的最大时间 |
| T5 | 10 秒 | 连接建立 | 连接建立后,等待对方发送第一条消息的超时时间 |
| T6 | 5 秒 | 控制报文 | 等待控制报文(如 Linktest.rsp)响应的超时时间 |
| Link Test 间隔 | 由实现定义 | 本地 | 两次 Link Test 之间的最小空闲时间,通常为 T3 的 1/3 |
实践建议:在半导体工厂网络中,建议将 T3 设置为 30 秒,Link Test 间隔设置为 10 秒。这样可以在 30 秒内完成 3 次探测,若全部失败则判定连接中断,比默认的 45 秒超时更快触发故障恢复。