TCP NewReno 模型动态演示

经典 AIMD 拥塞控制:慢启动指数增长、拥塞避免线性增长、3 个重复 ACK 触发快速重传 + 快速恢复(NewReno 改进 partial ACK 处理),以及 RTO 超时后的完整重启。包含交互式序列图展示 TCP 三次握手与数据传输过程。

状态机与链路动画

SLOW START指数增长
CONG AVOID线性增长 AIMD
FAST RECOVNewReno 恢复
TIMEOUTRTO 重启

实时变量

Mode
SLOW START
指数增长
cwnd
10 pkt
发送窗口
ssthresh
∞
慢启动 / 拥塞避免边界
dupACK count
0
3 个触发快速重传
Throughput
0 Mbps
ACK 滑窗估计
RTT / Inflight
0 ms / 0
队列会推高 RTT
Total Retx
0
快速重传 + 超时重传
Recovery round
-
partial ACK 处理

TCP 交互序列图(三次握手 + 数据传输 + 快速重传)

窗口曲线

cwnd / inflight (pkt) cwndinflight

吞吐量

Throughput (Mbps) throughput

RTT 曲线

RTT (ms) sampleRTTSRTT

NewReno 核心流程

1. 慢启动 (Slow Start) 每收到 1 个 ACK,cwnd += 1(每 RTT 翻倍)。当 cwnd ≥ ssthresh 进入拥塞避免。
2. 拥塞避免 (Congestion Avoidance) 每收到 1 个 ACK,cwnd += 1/cwnd(每 RTT 增加约 1 MSS)。经典 AIMD 的 AI 部分。
3. 快速重传 & 快速恢复 (NewReno) 3 个 dupACK 触发:ssthresh = cwnd/2,cwnd = ssthresh + 3。
后续每个 dupACK:cwnd += 1(窗口膨胀)。
Partial ACK:确认了部分丢失数据但不是全部 → 重传下一个未确认段,不退出恢复。
Full ACK:确认所有恢复前数据 → cwnd = ssthresh,退出恢复。
4. RTO 超时 ssthresh = cwnd/2,cwnd = 1,回到慢启动。这是最严重的惩罚。

事件日志

与其它算法的对比

NewReno vs Reno:Reno 在 Fast Recovery 期间收到 partial ACK 会立即退出恢复再重新触发,导致多次减半;NewReno 保持在恢复状态并逐个重传,窗口只减半一次。
NewReno vs CUBIC:NewReno 使用线性增长(每 RTT +1 MSS),CUBIC 使用三次函数,高 BDP 链路下 CUBIC 能更快探回丢包前的窗口。
NewReno vs BBR:NewReno 是 loss-based(丢包驱动),BBR 是 model-based(带宽-RTT 模型驱动),BBR 不依赖丢包来调整速率。
  • RFC 6582: The NewReno Modification to TCP's Fast Recovery Algorithm
  • RFC 5681: TCP Congestion Control (Slow Start, Congestion Avoidance, Fast Retransmit/Recovery)
  • core/internal/congestion/utils.go: quic-go 默认路径使用的 reno 即为 NewReno 变体