研究

2026-05-21 组会-Buffer 感知与 TD2 编码实验进展

2026-05-21 组会:Buffer 感知与 TD2 编码实验进展

1. 问题背景

在基于 Tor 隐藏服务的 TD2 水印系统中,A 端通过 XON 流控机制控制 B 端 relay 的发送速率,从而在 B 端出口流量中嵌入高低速率方波信号。然而 B 端 kernel TCP 接收缓冲区(rmem)的大小直接影响方波信号的边沿质量和可解码性:

  • 小 buffer(≤16 KB):TCP 窗口快速参与控制,方波边沿干净,但高速率下容易出现 fill-drain 断流(gap)。
  • 大 buffer(≥64 KB,或 6 MB 自动调优):不易溢出,但 LOW→HIGH 转换慢,伴随过冲(overshoot)和突发抖动(burst),边沿拖尾严重。

在无法直接登录 B 端检查 sysctl 配置的场景下,需要一种仅通过 B 端出口流量特征即可感知 buffer 大小的方法,并据此校准最优的 low_kbps / high_kbps 参数。


2. Buffer 感知方法

2.1 感知信号设计

使用固定极端率对 (low=100 KB/s, high=500 KB/s),以 800 ms 周期、30 s 时长发送 square wave,在 B 端以 100 ms 窗口采样网卡出口流量(tx_bytes)。

选择 100/500 的原因:该率对具有最大高低差值,能充分暴露不同 buffer 的行为差异——小 buffer 被 high=500 推至容量边界而出现 gap,大 buffer 因转换惯性而表现出 burst 和过冲。

2.2 理论模型

令 B 为 TCP 接收缓冲区大小,$R_{high}$ 为 XON 通告速率,$R_{drain}$ 为 Tor 从 socket 读取数据的速率。缓冲区占用量 $B(t)$ 满足:

$$ \frac{dB(t)}{dt} = R_{in}(t) - R_{drain}(t) $$

当 $R_{high} > R_{drain}$ 且 B 较小时,系统进入 fill-drain 循环:

$$ T_{fill} = \frac{B}{R_{high} - R_{drain}}, \quad T_{drain} = \frac{B}{R_{drain}} $$

以 KB16 为例:$T_{fill} \approx 80$ ms,$T_{drain} \approx 53$ ms,循环周期约 133 ms,跨越 1-2 个采样窗口。在 drain 阶段 $R_{in}=0$,对应采样窗口记录为零值。

当 B 较大时,TCP 窗口几乎不会收缩,瓶颈转移至 Tor 内部 circuit buffer。此时 LOW→HIGH 切换后,relay 积压的数据一次性释放,表现为短时过冲:

$$ R_{peak} \approx R_{high} + \frac{Q_{buffered}}{T_{burst}} $$

更精确地,大 buffer 的响应可建模为卷积:

$$ TX(t) \approx R_{bg}(t) + (R_{xon} * h_B)(t) + \epsilon(t) $$

其中 $h_B$ 为 buffer 相关的响应核:小 buffer 的 $h_B$ 窄,边沿陡峭;大 buffer 的 $h_B$ 宽,L→H 边沿被拉长。

2.3 诊断指标

指标 定义 物理意义
gaps3 连续 ≥3 个近零窗口(≥300 ms 断流)的次数 小 buffer 溢出循环的指纹
zeros% 零值窗口占比 同上,辅助判断
high_cv HIGH 状态的变异系数 $\sigma_{high} / \mu_{high}$ 大 buffer 的 burst-dip 交替导致 CV 高
overshoot_ratio $P_{95}(R_{high}) / E[R_{high}]$ 大 buffer 过冲使 p95 显著高于 mean
mean_rise_samples L→H 转换平均窗口数(100 ms/窗口) 大 buffer 转换慢,rise_samples 大

2.4 感知判定树

1
2
3
4
5
6
7
8
9
10
11
12
             sense(100, 500, 30s)

┌───────┴───────┐
gaps3 > 20 且 gaps3 ≤ 20
zeros > 2% │
│ ┌─────┴─────┐
PRESSURE-LIMITED high_cv > 0.3
SMALL BUFFER 或 overshoot > 1.35
(≤16KB) 或 rise_samples > 3
│ │
LARGE BUFFER MEDIUM
(≥ 64KB)

实验验证:KB16 在 sense 阶段 gaps3=50、zeros=2.6%,被正确分类为 small;KB64/KB256/DEFAULT 均被分类为 large。large 内部(64 KB vs 256 KB vs 6 MB)因 B 端 relay 背景噪声(~800-1000 KB/s,σ ≈ 100-200 KB/s)无法进一步区分,但对速率校准而言不需要区分。


3. 速率校准方法

3.1 稳定性条件

率对 $(R_{low}, R_{high})$ 稳定的必要条件:在半个周期内 buffer 不被填满。

$$ R_{high} < R_{drain} + \frac{B}{T_{half\_period}} $$

对于 period=800 ms($T_{half}=400$ ms)、$R_{drain} \approx 300$ KB/s:

  • KB16: $R_{high} < 300 + 40 = 340$ KB/s → 理论最优 high ≈ 350
  • KB64: $R_{high} < 300 + 160 = 460$ KB/s → 可承受 high=400 甚至 500

3.2 low 下界:保持管道温热

$R_{low}$ 过低会导致 Tor circuit 进入 idle、token bucket 过度节流、L→H 转换变慢。经验下界为:

$$ R_{low} \geq 150\text{-}200 \text{ KB/s} $$

实验证据:low=100→200 后,KB16 的 L→H 平均窗口从 2.1 降至 1.1,DEFAULT 从 3.8 降至 2.3。

3.3 high 上界:转换时间约束

high 的选择不能仅追求更大的 separation,还需满足 L→H 转换时间不超过半周期的合理比例:

$$ T_{LH}^{obs}(R_{low}, R_{high}, B) < \beta T_h, \quad \beta \approx 0.5 $$

综合目标函数:

$$ J(R_l, R_h) = S(R_l, R_h) - \lambda_z P_{zero} - \lambda_g N_{gap3} - \lambda_t \frac{T_{LH}^{obs}}{T_h} - \lambda_o(\text{overshoot} - 1) $$

3.4 推荐参数

Buffer 级别 推荐 (low, high) Score Separation 说明
Small (≤16 KB) (200, 350) 100.7 1.81 窄范围避免断流
Large (≥64 KB) (200, 400) 101.4-110.1 2.89-3.51 宽范围最大化分离度

200/400 是跨所有 buffer 的安全默认值:在 KB16/KB64/KB256/DEFAULT 下 score 均 ≥ 95。

3.5 Buffer Sweep 完整数据

Preset rmem_max 最佳 low 最佳 high Score Separation zeros% gaps3
KB16 16 KB 200 350 100.7 1.81 0.3% 4
KB64 64 KB 200 400 110.1 2.89 0.3% 2
KB256 256 KB 150 400 98.8 1.82 0.3% 5
DEFAULT 6 MB 200 400 101.4 3.51 0.2% 8

4. TD2 编码实验结果(200/400 KB/s 下)

基于感知与校准结论,以 low=200 KB/s, high=400 KB/s 为固定参数,在不同 slot 时长下测试 TD2 趋势编码的可解码性。B 端 buffer 为 DEFAULT(6 MB 自动调优)。E20260520_002(slot=300 ms)因解码结果异常被排除,下表中 slot_ms 为实际 slot 时长(= encoder_slot_ms × 2)。

encoder_slot_ms 实际 slot_ms bit_accuracy block_accuracy hamming ≤1 rate
200 400 98.50% 90.00% 98.00%
300 600 99.38% 96.00% 99.00%
400 800 99.63% 97.00% 100.00%
500 1000 99.38% 95.00% 100.00%

:E20260520_002(encoder_slot_ms=250, 实际 slot=500 ms)因 encoding_bit_accuracy=74.2%、td2_trend_presence_accuracy=95.5%、block_exact_match=71.0%,显著低于同系列其他实验,已从 slot charts 中排除。该实验的 baseline_threshold(1754 KB/s)明显低于其他实验(2240-2270 KB/s),初步判断为 B 端背景流量异常或 Tor circuit 状态不一致。

4.1 关键发现

  1. slot ≥ 600 ms 时解码可靠:block_accuracy ≥ 96%,hamming ≤1 rate ≥ 99%,汉明码纠错后可达 100% 正确率。
  2. slot = 400 ms 仍有实用价值:bit_accuracy=98.5%,block_accuracy=90.0%,适合需要更高嵌入速率的场景。
  3. slot = 800 ms 表现最佳:三项指标均达到或接近 100%,是当前参数下的推荐 slot 时长。
  4. slot > 800 ms 出现边际递减:block_accuracy 从 97% 略降至 95%,可能由过长的 slot 增加了 Tor circuit 状态漂移的影响。

4.2 结果图

bit_accuracy

图 1: 不同 slot 时长下的 bit accuracy

block_accuracy

图 2: 不同 slot 时长下的 block accuracy

block_accuracy_hamming_le_1_rate

图 3: 不同 slot 时长下的 hamming ≤1 rate(汉明码可纠错比例)


5. 总结与下一步

  1. Buffer 感知可行:通过 100/500 KB/s 的 30s 方波探测,可以可靠区分小 buffer(≤16 KB)与大 buffer(≥64 KB)。感知的物理基础是 TCP 接收缓冲区的 fill-drain 动力学和转换惯性差异。

  2. 速率校准有理论支撑:low=200 KB/s 保证管道温热,high=350-400 KB/s 在稳定性条件和转换时间约束之间取得平衡。200/400 是通用安全默认值。

  3. 200/400 + slot ≥ 600 ms 可实用:在 DEFAULT buffer 下,slot=600 ms 即可达到 block_accuracy=96%、hamming ≤1 rate=99%。slot=800 ms 达到最优。

下一步计划:

  • 在 KB16(小 buffer)条件下测试 200/350 + 各 slot 时长的 TD2 表现
  • 将 buffer 感知集成至正式实验流程作为前置探测步骤

参考文献

  • 理论推导与实验报告:/root/sound/docs/buffer_sensing_theory.md/root/sound/docs/buffer_sensing_report.md
  • Sweep 实验数据:/root/sound/results/SWEEP_20260516_120620/sweep_summary.json
  • TD2 编码说明:/root/flowctl_client/docs/TD2_METRICS_GUIDE.md
  • Slot charts 数据:/root/flowctl_client/analysis_C/reports/E20260520_slot_charts/