整形看似只是调整包长与发送节奏,但要做得既有效又不伤性能,必须回答三个原理性问题:填充到什么程度、什么时候介入、与拥塞控制谁优先。
消除长度特征最直觉的做法是把所有数据包填充到同一长度。这样长度维度确实被抹平,但代价被转移到带宽上:原本 200 字节的小包被填到 1400 字节,有效载荷比例从百分之八十多降到百分之十几。在高流量场景下这个代价无法接受。
更关键的是,统一长度本身构成了一种新特征。真实的加密会话因为内容长度不同,包长必然呈现一定分布;把所有包长抹平成一条线,在统计上同样反常。这相当于用一个显眼的特征替换了另一个显眼的特征。
替代方案是按目标分布做概率性调整:先确定目标分布的形态,再判断当前包量是否明显偏离,只在偏离超过阈值时才介入。这样在流量本身形态已接近目标时,几乎不产生额外开销。
这里的关键是阈值设定。阈值过松,偏离已经明显却仍不介入,整形形同虚设;阈值过紧,正常情况下也要频繁调整,开销上升且可能引入新的规律性。实践中的做法是按滑窗统计偏离程度,用滞回逻辑避免在阈值附近反复触发。
调整手段有两种:把小包填充变长,或把长包拆分变短。前者增加带宽消耗,后者增加处理次数。引擎按当前带宽余量选择:带宽充裕时偏向填充,带宽紧张时偏向保持原样、只做轻度调整。
整形改变发送节奏,拥塞控制也改变发送节奏。两者目标不同:整形追求外观规整,拥塞控制追求不丢包、不过载。如果整形强度不随链路状态调整,就可能与拥塞控制相互干扰——链路已经拥塞,整形还在按固定节奏发送,结果是丢包增加。
因此优先级必须明确:稳定性高于外观规整。当链路出现拥塞迹象时,整形降低强度,让拥塞控制正常发挥作用;拥塞缓解后再恢复。这个切换带有滞后设计,避免在阈值附近反复跳变。
| 档位 | 适用条件 | 策略取向 |
|---|---|---|
| 标准档 | 带宽充裕 | 整形强度较高,获得更规整的外观 |
| 均衡档 | 一般场景 | 在开销与规整之间取中 |
| 宽松档 | 带宽紧张 | 只做最小必要调整,优先保证有效吞吐 |
档位在客户端状态页可见。若你观察到平均速度低于预期,先确认当前档位——在带宽紧张的环境中引擎会主动放宽整形,这是设计行为而非异常。
整形处理的是包级特征,对会话持续时长、总流量体量这类行为特征没有作用。把整形效果理解为"整体更隐蔽"是扩大了它的范围。准确的表述是:它让数据包在长度与时序两个维度上更接近参照分布,其余维度不在覆盖范围内。