5.1 KiB
5.1 KiB
tags, date created, date modified
| tags | date created | date modified |
|---|---|---|
| 星期三, 十一月 26日 2025, 11:23:15 晚上 | 星期三, 十一月 26日 2025, 11:23:51 晚上 |
2.7 工程基线总结报告 - 链路鲁棒性与错误校检
适用范围: 外部网络链路 (UDP) + 内部 IPC 通道 (EventBus/Queue)
1. 核心架构基线 (Core Architecture Baselines)
本章节作为通信协议的“安全气囊”,确立了系统在面对物理链路劣化、网络拥塞及数据损坏时的防御机制。设计遵循 “快速失败 (Fail Fast)” 与 “分级恢复 (Graded Recovery)” 原则。
| 决策领域 | 核心基线 (Baseline Established) | 关键技术特征 (Key Specs) | 设计意图/依据 |
|---|---|---|---|
| 2.7.1 完整性校验 | 应用层 CRC32c | 算法:CRC32c (Castagnoli) 策略:零容忍丢弃 (Zero Tolerance) |
弥补 UDP 16-bit 校验和在高吞吐下的碰撞风险,利用 CPU 指令集加速,杜绝脏数据污染滤波状态。 |
| 2.7.2 链路保活 | 双向高频心跳 | 频率:10Hz (空闲时) 超时:2000ms (静默判定断连) |
维持中间网络设备 NAT 映射,实现亚秒级的物理断连感知与告警。 |
| 2.7.3 丢包恢复 | 业务感知差异化策略 | 数据流:即时丢弃 (Fire-and-Forget) 控制流:ARQ 重传 (Stop-and-Wait) |
在“实时性”与“可靠性”之间按需切换,防止雷达数据因重传导致队头阻塞 (HOL Blocking)。 |
| 2.7.4 拥塞控制 | 背压与尾部丢弃 | 机制:高水位线 (High Watermark) 动作:Tail Drop / Gap Insertion |
防止内部无锁队列溢出导致 OOM,优先牺牲非关键数据以保全系统稳定性。 |
2. 关键技术规范详解
2.7.1 应用层数据完整性校验 (Integrity Verification)
- 算法选型:强制使用 CRC32c (Castagnoli 多项式)。
- 理由:相比标准 IEEE 802.3 CRC32,CRC32c 在 iSCSI 等存储网络中被验证具有更强的检错能力,且现代 CPU (ARMv8/x86) 均提供硬件指令加速 (
crc32/_mm_crc32_u32),开销可忽略不计。
- 理由:相比标准 IEEE 802.3 CRC32,CRC32c 在 iSCSI 等存储网络中被验证具有更强的检错能力,且现代 CPU (ARMv8/x86) 均提供硬件指令加速 (
- 实施位置:
- 生成端:
DisplayController在序列化TrackDataBatch后计算,写入协议头。 - 校验端:显控终端在解析 Payload 前校验。
- 生成端:
- 处置策略:校验失败的数据包视为物理损坏,执行静默丢弃并增加
checksum_error_count计数,严禁尝试修复。
2.7.2 链路健康监测 (Link Health)
- 心跳注入:
DisplayController维护一个LastSendTime。若当前时间距离上次发送超过 100ms,强制插入一个空的HeartbeatPacket。
- 状态机流转:
- Connected:
LastRecvTime < 2000ms。 - Disconnected:
LastRecvTime >= 2000ms。触发LinkDownEvent,清空态势图,重置接收缓冲区。
- Connected:
2.7.3 差异化丢包恢复 (Differentiated Recovery)
- 数据面 (Data Plane):雷达点迹/航迹。
- 策略:不重传。
- 逻辑:雷达数据具有强时效性,
T_k时刻丢失的数据在T_{k+1}时刻已失去价值。重传只会挤占T_{k+1}的带宽。
- 控制面 (Control Plane):配置下发、启停指令。
- 策略:应用层 ARQ。
- 逻辑:发送端发出指令后启动定时器,等待接收端回传
AckPacket。若超时 (如 200ms) 未收到 ACK,则触发指数退避重传,直至成功或达到最大重试次数 (Max=3)。
2.7.4 内部 IPC 背压机制 (Backpressure)
- 监控对象:进程内
SPSC队列(如DataReceiver->SignalProcessor)。 - 水位控制:
- High Watermark (80%): 队列占用率超过 80% 时,消费者向生产者发送
BackpressureSignal。 - Low Watermark (50%): 降至 50% 以下时,解除背压。
- High Watermark (80%): 队列占用率超过 80% 时,消费者向生产者发送
- 响应动作:
- 生产者收到背压信号后,启动 L1 级流量整形(参见 2.4.4),主动丢弃低优先级数据(如原始回波切片),仅保留核心元数据入队,防止内存爆炸。
3. 风险与应对 (Risk Mitigation)
| 潜在风险 | 现象 | 应对/缓解措施 |
|---|---|---|
| 背压死锁 | 生产者被阻塞等待队列空间,导致无法处理新的控制指令(如停止指令)。 | 队列分离。数据流使用有界队列,控制流使用无界(或大容量)高优队列,确保控制指令永远能插队。 |
| CRC 碰撞 | 极小概率下脏数据通过校验。 | 在协议头增加 Magic Number 和 Payload Length 双重检查,进一步降低碰撞概率。 |
| 心跳风暴 | 网络恢复瞬间大量心跳包涌入。 | 接收端实施速率限制 (Rate Limiting),每秒最多处理 N 个心跳包,多余丢弃。 |
结论: 至此,第二章:数据接口与通信协议 (2.1 - 2.7) 已全部完成。 我们构建了一条从物理层 (1GbE/PCIe) 到应用层 (Protobuf),从内部内存 (SHM) 到外部网络 (UDP),兼顾高性能 (Zero-Copy/JUMBO) 与高可靠 (CRC32/Backpressure) 的数据高速公路。