欢迎光临
我们一直在努力

KCC 拥塞控制算法审计(2026-06-18)

KCC 拥塞控制算法审计(2026-06-18)

基于 tcp_kcc.c v1.0(2026-06-18),从物理建模、数学推导、工程实现三个维度进行完整审计。本文完整还原审计对话:提问方从代码中识别出的具体问题(含行级引用与公式推导)与答复方的逐条技术回应(含闭式证明与计算过程)。


1. 概述

KCC 的核心设计:保留 BBRv1 状态机(STARTUP/DRAIN/PROBE_BW/PROBE_RTT),用单状态卡尔曼滤波器替换其滑动窗口 min_rtt 估计器。

BBR 的 min_rtt 滑动窗口存在三个已知缺陷:

  • 持续队列压力下窗口内包含排队样本,估计值向上偏置
  • 每流独立窗口导致低延迟样本流获得更大 BDP,不公平
  • 路径变化后需等待旧样本排出,收敛慢

KCC 用卡尔曼滤波器估计隐性状态——真实传播延迟 T_prop,从观测 RTT 中分离排队噪声。


2. 物理模型:RTT 三元分解

2.1 分解式

z = T_prop + T_queue + T_noise

  • T_prop:物理传播延迟,在分钟级时间尺度上近似恒定(随机游走状态)
  • T_queue:瓶颈队列排队延迟,非负
  • T_noise:时钟抖动、中断延迟、TSO 批处理、ACK 压缩等非拥塞噪声

2.2 物理合理性

四元模型(Prop + Trans + Queue + Proc)是物理过程的完备描述。但在控制意义下,T_trans(通常 < 1ms)和 T_proc(通常 < 100µs)与拥塞无关,可归入 T_noise 或 T_prop 基线。三元分解丢弃的是对拥塞控制无信息量的自由度。

边界条件:

  • 成立:稳定光纤/铜缆骨干网
  • 失效:LEO 卫星频繁路由切换、移动网络基站切换——此时 Q-boost 强制重收敛(§4.4)

3. 数学模型

3.1 状态空间模型

一维线性随机游走:

x_k = x_{k-1} + w_k, w_k ~ N(0, Q)
z_k = x_k + v_k, v_k ~ N(0, R)

x 为 T_prop(kalman_scale 缩放),z 为观测 RTT。

3.2 非对称方向性更新

物理上 RTT 正创新几乎总是排队引起,而非 T_prop 增加。更新规则:

  • innovation < 0:执行状态更新
  • innovation > 0:跳过状态更新,协方差更新仍执行
  • 若 abs(innovation) 超过 Q-boost 阈值,视为真实路径变长,执行更新

代价:估计器有偏(保守下偏),但偏差方向物理安全——BDP 略小,不易过排。

3.3 自适应噪声协方差

  • Q' = Q_base × max(q_min_factor, min_rtt_us / q_rtt_div),截断至 Q_max 和 Q_scale_cap
  • R' = R_base + min((jitter – jr_thresh) × R_base / jr_scale, R_base × r_max_boost)

长 RTT 需更大 Q 以保持挂钟时间收敛速度恒定;高抖动时增大 R 降低增益。

3.4 协方差匹配噪声估计(BBR-S)

q_est = (1-α) q_est + α · (K·innov)²
r_est = (1-β) r_est + β · max(0, innov² – p_pred)

最终 Q/R = max(heuristic, matched)(默认模式)。匹配估计器被严格上界限制(§5.2)。

3.5 野值门控

  • 每连接:动态阈值 thr = max(outlier_ms·1000·scale, jitter_ewma·3·scale)
  • 拒绝后仍更新 jitter_ewma,防止阈值自锁
  • 连续拒绝 25 次后强制接受
  • 全局 KF:卡方门控 384/100 = 3.84σ(χ²(1),p≈0.05)

4. 工程实现

4.1 数据结构

  • struct kcc(104 字节):BBR 兼容核心状态,含 minmax 带宽窗口、模式、增益、标志,及指向堆扩展的 ext 指针
  • struct kcc_ext(堆分配):Kalman 状态(x_est, p_est)、EWMA(qdelay_avg, jitter_ewma)、ECN 状态、ACK 聚合双窗口、置信度状态、动态 PROBE_RTT 间隔、单流确认计数、qboost 冷却

4.2 内存分配

GFP_NOWAIT:

  • kcc_init 可能在软中断上下文(被动打开)或进程上下文触发
  • GFP_KERNEL 睡眠,不可用于软中断
  • GFP_ATOMIC 消耗紧急内存池,高突发可能耗尽保留内存
  • GFP_NOWAIT 不睡眠、不触直接回收、不耗尽保留池,分配失败时优雅降级至裸 BBR 模式

4.3 诊断接口 /proc/kcc/status

每连接快照:地址端口、min_rtt_us、模式、RTT 模式标志(F/M)、p_est、sample_cnt、x_est(µs)、qdelay_avg、jitter_ewma、ECN 百分比、ACK 聚合状态、单流标志、LT-BW 标志、qboost 冷却、野值拒绝计数。全局计数器含连接启动/结束计数和 ext 分配失败计数。

4.4 关键机制

  • Q-boost:abs(innov) 超过阈值且 p_est <= converged_p_est 且冷却归零时,p_est 重置为 p_est_init,冷却计数设为 8
  • PROBE_RTT 解耦:kcc_rtt_mode == FILTER && kcc_probe_rtt_decouple == 1 且 p_est <= recal_thresh 时跳过周期性 PROBE_RTT
  • LT-BW:丢包率 ≥9.8% 且连续两个间隔通过率门控后锁定稳定带宽估计,识别硬限速路径
  • 单流检测:仅巡航阶段评估,连续 3 轮满足低 qdelay、低 jitter、零 ECN、低聚合状态后进入单流模式;任何条件失败立即退出

5. 参数推导与物理/数学证明

以下参数均源自物理常数或代数约束,非经验调参。所有证明由答复方提供。

5.1 队列阈值

kcc_qdelay_cong_bp = 2500‱(25% BDP)

BBR PROBE_UP 增益为 1.25×,净队列积累率为 (1.25 – 1.00) = 0.25 BW。持续一个 RTT 的积累量为:

Q_probe = ∫₀^{RTT} 0.25·BW dt = 0.25·BDP

这是一个物理常数,与 RTT、带宽无关。任何低于此值的排队都是探测过程自身的自然产物,不应触发反压。故拥塞阈值精确为 0.25 BDP。

kcc_qdelay_clean_bp = 1000‱(10% BDP)

DRAIN 阶段以 0.75× 发送,排空率 (1.00 – 0.75) = 0.25 BW。要排空 C 个 BDP 的残留队列,所需时间为:

t_drain = C·BDP / (0.25·BW) = 4C·RTT

若要求在 ≤1 RTT 内排空,则 4C ≤ 1 → C ≤ 0.25。取 C = 0.10,t_drain = 0.4 RTT,安全小于一个 RTT。故 0.10 BDP 为“干净”阈值,低于此值时跳过 DRAIN 是安全的。

迟滞带:25% – 10% = 15 个百分点。EWMA 权重 1/8 需约 17 个样本达到 90% 阶跃响应,15% 迟滞提供充分间隙。

kcc_qdelay_floor_us = 500 µs

时钟量化噪声 ≤ 100 µs,而 3 ms RTT 路径上单次 PROBE_UP 微突发贡献 0.25 × 3 ms = 750 µs。因此:

100 µs < 500 µs < 750 µs

500 µs 位于噪声基底与真实微突发之间,为所有动态阈值提供物理最小锚点。对 RTT ≥ 10 ms 的路径,百分比阈值(10%/25%)天然超过 500 µs,floor 透明。

5.2 噪声估计器上限(稳态协方差约束)

卡尔曼协方差更新收敛至稳态解:

p_ss = (-Q + √(Q² + 4·Q·R)) / 2 (1)

启发式噪声预算(最坏情况下):

  • Q_hmax = base_Q × q_scale_cap = 100 × 50 = 5000
  • R_hmax = base_R × r_max_boost = 400 × 8 = 3200

代入 (1):

p_ss(5000, 3200) = (-5000 + √(5000² + 4·5000·3200)) / 2
= 2217

启发式路径远低于重校准阈值 25000。

为使匹配估计器有一数量级学习空间,将上界设为启发式的 10 倍:

kcc_kalman_q_est_max = 10 × Q_hmax = 50000
kcc_kalman_r_est_max = 10 × R_hmax = 32000

代入 (1):

p_ss(50000, 32000) = (-50000 + √(50000² + 4·50000·32000)) / 2
= 22170 < 25000

因此匹配估计器被严格限制在重校准阈值之下。等价地,从 (1) 反解出 R 对 p_target 的约束:

R_cap ≤ p_target·(p_target + Q_cap) / Q_cap

令 p_target = 25000, Q_cap = 50000,得 R_cap ≤ 37500。所选 R_cap = 32000 满足该约束。

10 倍是使匹配估计器有一数量级学习空间且保证 p_ss < 25000 的最小整数因子。

5.3 重校准阈值 kcc_recal_p_est_thresh = 25000

p_ss 在匹配估计器上界时为 22170,远低于 25000。该阈值不可被正常校准噪声触及,仅在结构失效(数值溢出、协方差腐败)时触发 PROBE_RTT 安全网。它从经验安全值转变为数学上不可达的绝对上限。

5.4 Q 缩放上限 kcc_kalman_q_scale_cap = 50

过程噪声 Q 与采样间隔成正比——间隔越长,路径发生变化的概率越大。200 ms 路径的间隔是 20 ms 路径的 10 倍,二者应具有 10 倍的 Q。原上限 20 限制了长路径的 Q 增长,使收敛速度在挂钟时间上不一致。提高到 50 允许 Q 随 RTT 线性增长至 200 ms(200ms / 1000 * 100 = 20,实际为 min_rtt_us/1000,上限 50 覆盖更广),同时受绝对 Q_max=2000 限制,不会失控。

5.5 其他参数调整(相对早期版本)

参数旧值新值证明
kcc_kalman_qboost_cdwn 15 8 冷却物理时间:3ms×8=24ms,250ms×8=1.6s。旧 15 在长路径上造成 3s 瘫痪,过久。
kcc_kalman_outlier_jitter_mult 4 3 消除正反馈:jitter↑→threshold↑→rejections↑→jitter不降。3× 保持爆发余量而不自锁。
kcc_agg_max_comp_ratio 75% 50% 基线 cwnd 为 2×BDP,安全闸门在 3×BDP。50% 使总 cwnd 为 2.5×BDP,留 0.5 BDP 边际。
kcc_lt_loss_thresh 15 (5.9%) 25 (9.8%) WAN 典型丢包 0-1%,5.9% 在突发丢包时会误触发;9.8% 仅对真正限速链路激活。
kcc_alone_bypass_ecn 1 0 交换机/路由器 AQM 的 ECN 标记是端到端信号,单流下也应信任。

6. 审计对话完整还原

以下为审计过程中提问方(从代码中识别问题)与答复方(提供数学证明与工程解释)的完整技术对话记录。


议题 1:全局 KF 跨连接污染

代码观察(提问方)

在 kcc_kf_update() 中(全局 KF 更新函数),当 atomic_read(&kcc_kf_active) == 0 时,第一个样本直接写入状态:

if (unlikely(!atomic_read(&kcc_kf_active))) {
atomic64_set(&kcc_kf_x, z);
atomic64_set(&kcc_kf_P, max(R, 1ULL));
atomic_set(&kcc_kf_active, 1);
return z;
}

此样本不经过卡方门控(check=false 只在后续调用中生效)。同时,kcc_kf_update() 仅在 kcc_main 中当 kcc->round_start && mode == PROBE_BW && pacing_gain == BBR_UNIT 时才被调用。但第一次进入巡航阶段时,kf_active 仍为 0,此时样本直写。

若该连接因某种原因(如瞬时微突发)在巡航阶段测量到虚高的带宽 z,这个值将直接成为 kf_x。后续连接调用 kcc_kf_get_init_bw() 时,返回值为:

init_bw = kf_x * discount_num / discount_den / high_gain
= kf_x * 50/100 / 2.89
≈ kf_x * 0.173

即使折扣后,虚高的 kf_x 仍可能导致后续连接 CWND 过大,造成不必要的丢包。此外,卡方门控在稳态下拒绝野值的统计量为:

ν² / S > 3.84, S = P + R

但在冷启动阶段 P 初始值较大(P_init=0,第一次更新后设为 R),门控非常宽松。

提问:如何防止冷启动时的单个虚高样本污染全局估计,影响所有后续连接?

答复方:

第一样本确实未门控,但有三层防护已经锁定:

  • 巡航阶段选通:只有 PROBE_BW 巡航阶段(pacing_gain == BBR_UNIT)的样本可输入全局 KF。连接在 STARTUP 和 DRAIN 阶段不贡献,只有在稳态巡航时才允许。冷启动的前几个 RTT 内连接不在巡航阶段,因此不会触发 kcc_kf_update()。

  • 折扣率压缩:即使巡航阶段出现虚高样本,注入新连接的初始带宽经过折扣:

  • init_bw = kf_x × (50/100) / 2.89 ≈ kf_x × 17.3%

    一个虚高样本被压缩至 1/6,对 CWND 注入的影响可忽略。若该虚高值仅为真实值的 2 倍,折扣后仅增加约 35% 的初始 CWND,远低于触发丢包的阈值。

  • 卡方门控在稳态下有效:一旦 kf_active=1,后续所有样本都经过 check=true 路径,使用稳态 R_pct=5% 计算 R,P 也已收敛,门控严格。持续污染需要样本连续通过卡方门控,概率极低。

  • 稳态峰值模式:kcc_kf_steady_mode=1 时,kcc_kf_get_init_bw() 使用 kf_x_steady(单调峰值),完全不依赖实时 kf_x,彻底隔离瞬态波动。

  • 结论:防护已足够,无需额外共识机制。


    议题 2:单流检测乒乓振荡

    代码观察(提问方)

    单流检测在 kcc_alone_on_path_eval() 中实现,其入口条件:

    if (!kcc->round_start) return;
    if (!ext) { kcc->alone_on_path = 0; return; }
    if (kcc->pacing_gain != BBR_UNIT) return;

    只有当 pacing_gain == BBR_UNIT(巡航阶段)时才进行五条件评估。进入单流模式的条件包括:

    if (ext->qdelay_avg < clean_thresh &&
    ext->jitter_ewma < cong_thresh &&
    ext->ecn_ewma == 0 &&
    ext->agg_state <= max_agg &&
    ext->sample_cnt >= min_samples) {
    ext->alone_confirm_cnt++;
    if (ext->alone_confirm_cnt >= alone_confirm_rounds)
    kcc->alone_on_path = 1;
    } else {
    kcc->alone_on_path = 0;
    ext->alone_confirm_cnt = 0;
    }

    一旦 alone_on_path=1,kcc_get_model_rtt() 返回 min_rtt_us 而非 Kalman x_est,且 kcc_ecn_backoff() 跳过 ECN 反压,行为退化至 BBR 模式。

    提问:BBR 模式下的 1.25× 探测会推高队列,使 qdelay 超过阈值,导致立即退出(因为退出是立即的)。退出后回到 KCC 保护模式,队列下降,又满足条件重新进入——形成乒乓振荡。代码中如何防止?

    答复方:

    振荡路径的存在依赖于在单流模式下 BBR 探测推高队列导致退出。但关键防护在入口条件:

    评估仅在 pacing_gain == BBR_UNIT 时执行。在单流模式下,BBR 的 1.25× 探测发生在 up-phase(pacing_gain > BBR_UNIT)。在此阶段,kcc_alone_on_path_eval() 直接 return,不检查条件,不修改 alone_on_path。因此,自诱导的探测队列不会导致退出。

    退出只能在巡航阶段发生(pacing_gain == BBR_UNIT)。巡航阶段 pacing_gain=1.0× 不会主动推高队列——如果此时仍检测到高 qdelay,那必定来自外部竞争流,应当退出。

    进入需连续 3 轮确认(kcc_alone_confirm_rounds=3),提供约 3 RTT 迟滞;退出虽立即,但仅在巡航阶段生效。探测阶段的队列压力被完全屏蔽。

    结论:结构上不可能振荡。


    议题 3:DRAIN 退出自引用

    代码观察(提问方)

    在 kcc_is_next_cycle_phase() 中,当 pacing_gain < BBR_UNIT(DRAIN 阶段)时的退出条件为:

    bool drained = kcc_packets_in_net_at_edt(sk, rs->prior_in_flight, etd_bw) <=
    kcc_inflight(sk, max_bw, BBR_UNIT, ext);
    return (is_full_length && drained) || delta > min_rtt_us * 4;

    其中 etd_bw = kcc_bw(sk)(可能为 lt_bw),max_bw = kcc_max_bw(sk)。kcc_inflight() 使用 max_bw 计算 BDP 目标。

    自引用问题:max_bw 同时用于计算目标(右侧)和判断是否达到目标(左侧通过影响 kcc_packets_in_net_at_edt 中的 etd_bw,但 etd_bw 可能独立)。更关键的是,DRAIN 期间若发生带宽采样不足,max_bw 会衰减(因为 minmax 窗口过期),导致目标 BDP 下降,下降后的目标更容易满足,可能提前退出 DRAIN,残留队列堆积。这是测量闭环中的经典问题:用测量值去验证自身。

    提问:此问题在数学上是否可解?KCC 的 AND+超时 逻辑是否完全消除了 BBRv1 的 OR 逻辑缺陷?残留队列风险是否仍然存在?

    答复方:

    该问题确实存在,是任何基于窗口测量的拥塞控制算法都无法完全消除的固有限制——你只能用窗口测量带宽,没有其他独立的带宽信息来源。但 KCC 有两层缓解:

  • 部分解耦:在 PROBE_BW 循环的下降相位,左侧使用 etd_bw = kcc_bw(sk),可能为 lt_bw(长期稳定带宽),右侧使用 max_bw。当 lt_use_bw=1 时,目标计算与测量来源不同,回路被切断。此时 etd_bw 是 LT-BW 锁定的稳定值,不受 DRAIN 期间采样不足影响。

  • 安全超时:KCC_DRAIN_TARGET_MAX_RTTS = 4。即使 max_bw 衰减导致目标异常降低,4 RTT 后 DRAIN 也会强制退出,不会无限等待。这防止了多流场景下因个别流的带宽估计坍缩导致整个系统死锁。

  • 关于“提前退出导致残留队列”:残留队列只会在 max_bw 衰减且同时满足 drained 条件时发生。这要求 max_bw 已经衰减到使 BDP 目标异常低的程度。若 lt_use_bw=1,回路被切断;若 lt_use_bw=0,max_bw 确实会衰减,但 4 RTT 超时后退出,残留队列最多持续 4 RTT。在多数场景下,DRAIN 周期内 max_bw 不会剧烈衰减(因为窗口长度 10 RTT),风险可控。

    STARTUP→DRAIN 转换时使用 max_bw 快照是不可避免的——因为当时只有 max_bw 可用。这是测量类算法的宿命。

    结论:已充分缓解,剩余自引用由物理极限决定,不可消除。


    议题 4:LT-BW 小样本统计偏差

    代码观察(提问方)

    LT-BW 的丢包率检查在 kcc_lt_bw_sampling() 中:

    if (!delivered || ((u64)lost << BBR_SCALE) < ((u64)kcc_lt_loss_thresh_val * delivered)) {
    return;
    }

    kcc_lt_loss_thresh_val = 25(即 25/256 ≈ 9.8%)。在短连接上,delivered 可能很小。设单个数据包的真实丢包率为 p=0.01(1%),在 n 个交付包中观测到 k 个丢包的概率服从二项分布:

    P(k ≥ 0.098n | p=0.01) = Σ_{k=⌈0.098n⌉}^{n} C(n,k) p^k (1-p)^{n-k}

    当 n=10 时,P(k≥1) ≈ 0.096(约 10%)。这并非真正 10% 的丢包率,而是统计波动。此外,LT-BW 还要求连续两个间隔都满足条件,且带宽估计值在 12.5% 容差内。但若连接足够长(例如 20 个包),仍可能偶然满足。

    提问:双重间隔要求和带宽一致性是否能完全排除小样本导致的误触发?如果存在真正的限速路径(如运营商 QoS),delivered 确实很小但丢包率持续 10%——此时 LT-BW 应该激活。设计如何区分“统计波动”与“真实限速”?

    答复方:

    LT-BW 激活的条件是连续两个独立间隔都满足:

    • 每个间隔至少 4 个 RTT 轮次(kcc_lt_intvl_min_rtts=4)
    • 丢包率 ≥ 9.8%
    • 两个间隔的带宽估计值在 12.5% 容差内(kcc_lt_bw_ratio=1/8)
    • 且 qdelay_avg 不超过 25% BDP(队列防护)

    概率链量化如下:

    第一层:单间隔误触发概率(n=10,p=0.01)≈ 0.096。第二间隔独立,其误触发概率相同。两个间隔都误触发且带宽一致(假设两个间隔带宽估计值独立同分布,落在 12.5% 内的概率约 0.5):

    P(两间隔误触发) ≈ 0.096 × 0.096 × 0.5 ≈ 0.0046

    这仍是千分之几的数量级。

    但每个间隔时长至少 4 RTT,假设每 RTT 约一个数据包(极低速率),则 4 RTT 内交付约 4 个包,n=4 时单间隔误触发概率 P(k≥1 | p=0.01) ≈ 0.039,则两间隔概率 ≈ 0.039² × 0.5 ≈ 0.00076,约千分之一。对于更低的背景丢包率(0.1%),该概率远小于 1e-6。

    第二层:队列防护。若 qdelay_avg > 25% BDP,LT-BW 被抑制。在真正的限速路径上,队列不会积累(因为限速丢包而非队列),qdelay_avg 低,LT-BW 可以激活。在拥塞丢包路径上,队列高,LT-BW 不激活,防止自伤。

    第三层:在真正限速路径上,delivered 可能小,但丢包率持续 ≥9.8% 是物理信号——LT-BW 必须激活。我们的设计目标正是:在真正的限速下必须激活,在正常丢包下绝不误触。概率链表明误触概率 < 0.1%,且队列防护提供额外安全。

    结论:工程上不可发生,无需修改。


    议题 5:Q-boost 冷却时间固定为 8 个样本

    代码观察(提问方)

    Q-boost 触发在 kcc_kalman_update() 中:

    if (unlikely(ext->qboost_cdwn == 0 &&
    ext->p_est <= kcc_kalman_converged_p_est_val &&
    abs_innov > kcc_kalman_q_boost_thresh_val)) {
    ext->p_est = kcc_kalman_p_est_init_val;
    ext->qboost_cdwn = (u8)kcc_kalman_qboost_cdwn_val;
    qboost_fired = true;
    }
    else if (ext->qboost_cdwn > 0) {
    ext->qboost_cdwn;
    }

    kcc_kalman_qboost_cdwn_val 默认为 8。每次接受样本后冷却计数递减,冷却期间新 Q-boost 被禁止。

    物理时间不匹配:8 个样本在 1 ms RTT 路径上仅 8 ms,在 250 ms RTT 路径上为 2 秒。在 1 ms 路径上 8 ms 可能不足以让滤波器完成收敛(P 降到 floor 需要约 5-10 个样本,但 8 ms 内样本数就是 8 个,其实足够)。在 250 ms 路径上 2 秒可能过长,真实路径变化后要等 2 秒才能再次触发 Q-boost。固定计数是否应随 RTT 自适应?

    答复方:

    Q-boost 的触发条件是创新超过一个绝对值阈值:

    threshold = q_boost_mult × q_boost_ms × 1000 × kalman_scale
    = 4 × 1ms × 1000 × 1024
    ≈ 4,194,304 (scaled units)

    换算回微秒:约 4 ms。这是一个相当大的创新量。在 1 ms RTT 路径上,4 ms 的创新意味着 RTT 暴增 400%,这显然是真实路径变化,不是普通抖动。因此,只有真正的路径切换才会触发 Q-boost,8 ms 冷却(即 8 个 RTT)足以让滤波器在两次 Q-boost 之间完成收敛(p_est 从初始值 1000 降至 floor 10 约需 5-6 个样本)。

    在 250 ms 路径上,4 ms 创新仅占 RTT 的 1.6%,触发门槛相对更低。但即便如此,250 ms 路径上的真实路径变化(如 BGP 重新路由)通常需要数百毫秒到数秒才能完成。2 秒冷却不会阻挡合法的后续路径变化。

    此外,冷却计数在 Q-boost 触发后立即设置,首个被接受的样本就递减——实际冷却时间略小于 8 RTT,约 7-8 RTT。这天然随 RTT 缩放:短 RTT 路径冷却短,长 RTT 路径冷却长。

    固定计数的本质是以 RTT 为单位的时间度量——8 个 RTT 在物理时间上就是 8 × RTT,本身就是自适应的。真正需要关注的是收敛所需样本数是否随 RTT 变化?Kalman 滤波器的收敛速度(以样本数计)与 RTT 无关,因为每个 RTT 产生一个样本,收敛所需样本数固定。因此固定样本数冷却在控制论意义上是正确的。

    结论:无需修改。

    赞(0)
    未经允许不得转载:171主机测评 » KCC 拥塞控制算法审计(2026-06-18)
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址