4、自愈能力评估指标:RSSI阈值设定、丢包率与重传率、连接稳定性评分模型

评估自愈能力,不能光靠感觉。你得有数据,有标准。

我见过不少项目,自愈逻辑写得挺花哨,但上线后效果好不好,谁也说不清。为什么?因为没有量化指标。你想想看,没有尺子,你怎么知道东西有多长?

这一章,我们就来聊聊这三把尺子:RSSI阈值、丢包率与重传率、连接稳定性评分模型。这三者组合起来,基本就能把自愈能力摸透了。

4.1 RSSI阈值设定:不是拍脑袋定的

RSSI阈值,说白了就是信号弱到啥程度,系统就该动手了。这个值设高了,设备频繁切换,用户体验反而差;设低了,信号都断流了还不动作,自愈就成了摆设。

我个人习惯,把RSSI阈值分成三个等级:

等级 RSSI范围(dBm) 含义 自愈动作
绿色区 ≥ -65 信号良好,无需干预 无
黄色区 -65 ~ -75 信号弱化,进入观察期 启动预判,准备切换
红色区 ≤ -75 信号恶劣,立即触发自愈 执行切换或降速保活
我的经验: 阈值不能一刀切。我在一个大型商场项目里,2.4G和5G的阈值就完全不同。5G衰减快,我把红色区设到了-70dBm;2.4G穿墙好,可以放到-80dBm。你想想看,不同频段、不同场景,阈值必须差异化。

设定阈值时,还要考虑信号抖动。RSSI本身是瞬时值,波动很大。我建议做一次滑动平均滤波,取最近3~5次采样的均值,再跟阈值比较。这样能避免因为一次信号抖动就误触发自愈。

// 滑动平均滤波示例
#define RSSI_SAMPLE_COUNT 5
int rssi_samples[RSSI_SAMPLE_COUNT];
int sample_index = 0;

int get_filtered_rssi(int new_rssi) {
    rssi_samples[sample_index] = new_rssi;
    sample_index = (sample_index + 1) % RSSI_SAMPLE_COUNT;
    
    int sum = 0;
    for (int i = 0; i < RSSI_SAMPLE_COUNT; i++) {
        sum += rssi_samples[i];
    }
    return sum / RSSI_SAMPLE_COUNT;
}

4.2 丢包率与重传率:自愈效果的照妖镜

RSSI只是信号强度的参考,真正影响用户体验的是丢包率和重传率。这两个指标,才是自愈效果的直接体现。

丢包率:单位时间内,发送的数据包中丢失的比例。我一般用Ping测试或者应用层ACK统计来算。

重传率:MAC层重传次数占总发送次数的比例。这个值能从WiFi芯片的驱动层直接读到。

核心观点: 自愈的目标,不是让RSSI变高,而是让丢包率和重传率降下来。RSSI是过程指标,丢包率和重传率才是结果指标。

我习惯把这两个指标组合起来看:

  • 丢包率 < 1%,重传率 < 5%:网络健康,自愈无需介入。
  • 丢包率 1%~5%,重传率 5%~15%:网络轻度劣化,自愈进入预判阶段。
  • 丢包率 > 5%,重传率 > 15%:网络严重劣化,立即触发自愈。
避坑指南: 我曾经在一个项目中,只盯着丢包率看,结果自愈效果一直不理想。后来发现,重传率已经飙到30%了,但丢包率才2%。为什么?因为MAC层疯狂重传,把丢包掩盖了。但重传带来的延迟和抖动,用户感受非常明显。所以,丢包率和重传率必须同时看,缺一不可。

4.3 连接稳定性评分模型:把多维指标变成一个分数

有了RSSI、丢包率、重传率,怎么综合判断?我推荐建立一个连接稳定性评分模型。把多个指标映射成一个0~100的分数,方便决策。

模型公式如下:

Score = w1 * S_rssi + w2 * S_loss + w3 * S_retry

其中:
- S_rssi = (RSSI + 100) / 35 * 100  (假设RSSI范围-100~-30)
- S_loss = (1 - loss_rate) * 100
- S_retry = (1 - retry_rate) * 100
- w1, w2, w3 为权重,且 w1 + w2 + w3 = 1

权重怎么定? 我个人习惯:

  • w1 (RSSI权重) = 0.2:RSSI只是参考,权重不宜过高。
  • w2 (丢包率权重) = 0.5:丢包率直接影响用户体验,权重最高。
  • w3 (重传率权重) = 0.3:重传率反映链路质量,权重居中。

当然,这个权重不是固定的。我在一个视频监控项目中,把丢包率权重调到了0.6,因为视频流对丢包极其敏感。而在一个IoT传感器项目中,RSSI权重反而调高了,因为传感器数据量小,丢包影响不大,但信号弱会导致频繁离线。

我的建议: 评分模型建好后,一定要在实际环境中跑一段时间,收集数据,然后调整权重。不要迷信初始值,数据会告诉你真相。

4.4 自愈能力评估框架图

下面这张图,把整个评估体系串起来了。从数据采集到指标计算,再到综合评分,最后触发自愈动作。你一看就明白。

自愈能力评估框架 数据采集 指标计算 综合评分 RSSI采样 丢包统计 重传统计 滑动平均滤波 丢包率计算 重传率计算 加权评分 阈值判定 自愈触发 自愈动作执行 评分 < 60:触发自愈 评分 ≥ 60:保持当前连接

4.5 实战中的几个坑

最后,分享几个我踩过的坑,你遇到了可以绕开走。

  1. 阈值设得太死板:不同环境、不同设备,阈值必须动态调整。我建议在后台留一个配置接口,方便远程调参。
  2. 只看RSSI不看丢包:RSSI好不代表网络好。干扰严重时,RSSI可能很高,但丢包率也高得吓人。
  3. 评分模型权重一成不变:业务场景变了,权重也要变。视频流和IoT传感器的权重,能一样吗?
  4. 忽略信号抖动:不做滤波,直接拿原始RSSI做决策,自愈会频繁误触发。相信我,用户会骂娘的。

一句话总结: 自愈能力评估,不是看单一指标,而是看RSSI、丢包率、重传率的组合。用评分模型把它们拧成一个分数,决策就清晰了。