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 的主要目的可以归纳为以下四点:

  1. 连接存活检测: 定期确认 TCP 连接未被网络设备(防火墙、交换机)意外中断,或对端进程未崩溃。
  2. 故障快速发现: 在设备空闲时主动探测,避免因长时间无数据交换而无法感知断连,从而缩短故障发现时间。
  3. 资源回收触发: 当连续多次 Link Test 失败时,协议栈自动触发连接关闭与资源清理,防止半开连接堆积。
  4. 通信质量基线: 通过记录 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 在 SECS/GEM 协议栈中的位置 GEM 应用层 (SEMI E30) SECS-II 消息层 (SEMI E5) HSMS 会话层 (SEMI E37) — Link Test 所在层 TCP/IP 传输层 物理层 (以太网 / 串口) 协议栈自顶向下 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 交互过程:

Link Test 交互时序 设备 A (发起方) 设备 B (响应方) ① 空闲超时 (T3 到期) ② 发送 Linktest.req (系统字节 = 0x1234) ③ 回复 Linktest.rsp (系统字节 = 0x1234) ④ 连接确认正常,重置空闲定时器
时序要点:
  • 设备 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 秒超时更快触发故障恢复。