3. 超时机制总览:T1~T8 超时定义与作用
SECS/GEM 协议通过八种超时定时器(T1~T8)来保障通信会话的可靠性、有序性和资源回收效率。每种超时对应不同的协议层与场景,理解其定义与作用是对通信链路进行性能调优的基础。本章将逐一解析这八种超时的触发条件、默认值范围及典型影响。
3.1 超时分类与协议层级
根据 SECS-I / HSMS 协议栈的分层结构,T1~T8 可划分为以下三类:
- 物理/链路层超时:T1、T2、T3、T4,负责字节传输、块确认与连接保持。
- 会话层超时:T5、T6,负责 TCP 连接建立与通信状态机转换。
- 应用层超时:T7、T8,负责消息事务完成与数据完整性校验。
3.2 超时定义与作用速查表
| 超时编号 | 协议层 | 默认范围(秒) | 触发条件 | 超时后动作 |
|---|---|---|---|---|
| T1 | 链路层 | 1.0 ~ 10.0 | 发送块后未收到 ACK/NAK | 重传该块(最多 7 次) |
| T2 | 链路层 | 0.1 ~ 1.0 | 收到块后延迟发送 ACK/NAK | 接收方丢弃块,发送方重传 |
| T3 | 链路层 | 5.0 ~ 120.0 | 连接空闲,无数据交换 | 发送心跳(Link Test) |
| T4 | 链路层 | 0.5 ~ 5.0 | 等待块间间隔(多块消息) | 丢弃未完成消息,重置连接 |
| T5 | 会话层 | 2.0 ~ 30.0 | TCP 连接建立请求未响应 | 重试连接(最多 3 次) |
| T6 | 会话层 | 1.0 ~ 10.0 | 等待 Select/Deselect 响应 | 重发请求或断开连接 |
| T7 | 应用层 | 10.0 ~ 300.0 | 等待事务(Transaction)完成 | 取消事务,返回超时错误 |
| T8 | 应用层 | 0.5 ~ 5.0 | 等待数据块校验(CRC) | 重传数据块 |
3.3 超时交互流程总览
下图展示了从 TCP 连接建立到应用层事务完成的完整超时交互路径,其中每个箭头代表一次超时定时器的启动与停止。
3.4 各超时详细解析
3.4.1 T1 — 块传输确认超时
T1 是 SECS-I 中最基础的超时,用于监控单个数据块(Block)从发送到收到 ACK/NAK 的时间。若超时,发送方将重传该块,最多重试 7 次。T1 值通常设置为网络 RTT 的 2~3 倍。
3.4.2 T2 — ACK/NAK 延迟超时
T2 作用于接收方,限制从收到块到发出 ACK/NAK 的最大延迟。若接收方在 T2 内未响应,发送方将认为块丢失并重传。T2 通常设为 0.1~1.0s,防止接收方因处理瓶颈导致链路阻塞。
3.4.3 T3 — 连接空闲超时
T3 用于检测通信链路是否存活。当连接空闲时间超过 T3 时,主动端发送 Link Test 消息。若连续 3 次 Link Test 无响应,则判定连接断开。T3 默认值通常为 5.0~120.0s。
3.4.4 T4 — 块间间隔超时
对于多块消息(Multi-block Message),T4 监控相邻块之间的到达间隔。若超过 T4 仍未收到下一块,接收方将丢弃已收到的部分块并重置连接。T4 一般设为 0.5~5.0s。
3.4.5 T5 — 连接建立超时
T5 在 HSMS 会话层使用,监控 TCP 连接建立请求(SYN)到收到 SYN-ACK 的时间。超时后主动端重试连接,最多 3 次。T5 通常设为 2.0~30.0s,需大于 TCP 内置重传超时(RTO)。
3.4.6 T6 — 会话控制超时
T6 监控 Select.req / Deselect.req 等会话控制消息的响应时间。若超时,主动端重发请求或直接断开连接。T6 默认值为 1.0~10.0s。
3.4.7 T7 — 事务完成超时
T7 是应用层最重要的超时,监控从发送 Primary Message 到收到 Secondary Message 的完整事务时间。超时后,发起方取消事务并向上层报告超时错误。T7 范围较宽(10.0~300.0s),需根据设备处理时间合理设置。
3.4.8 T8 — 数据校验超时
T8 用于监控数据块 CRC 校验的完成时间。若接收方在 T8 内未完成校验并返回结果,发送方将重传该块。T8 通常设为 0.5~5.0s,适用于计算能力较弱的嵌入式设备。
3.5 超时参数配置对比
| 参数 | 影响范围 | 常见误配置 | 推荐调优方向 |
|---|---|---|---|
| T1 | 单块重传频率 | 设置过小导致频繁重传 | 按 RTT 动态调整 |
| T2 | 接收方处理压力 | 设置过大掩盖接收方瓶颈 | 与设备 CPU 负载关联 |
| T3 | 连接保活检测 | 设置过大延迟故障发现 | 建议 ≤ 30s |
| T4 | 多块消息完整性 | 设置过小导致正常消息被丢弃 | 按最大块间隔 + 50% 余量 |
| T5 | 连接建立成功率 | 设置过小导致连接失败 | ≥ 3 × TCP RTO |
| T6 | 会话切换效率 | 设置过大阻塞状态机 | 建议 ≤ 5s |
| T7 | 应用事务吞吐量 | 设置过大浪费连接资源 | 按设备最大处理时间 + 20% |
| T8 | 数据完整性校验 | 设置过小导致误重传 | 按校验算法耗时 + 100ms |
3.6 超时机制设计要点
- 层级隔离:各层超时独立运行,下层超时不会直接触发上层超时,但累积效应会导致上层事务失败。
- 重试次数限制:T1 重试 7 次、T5 重试 3 次、T3 连续 3 次无响应后断开,避免无限重试耗尽资源。
- 超时值联动:T7 应大于 T1 × 最大块数 + T4 × (块数-1),否则正常多块消息也会超时。
- 日志与监控:所有超时事件应记录时间戳、超时编号、当前重试次数,便于事后分析网络或设备问题。