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/2cwnd = ssthresh + 3
后续每个 dupACK:cwnd += 1(窗口膨胀)。
Partial ACK:确认了部分丢失数据但不是全部 → 重传下一个未确认段,不退出恢复
Full ACK:确认所有恢复前数据 → cwnd = ssthresh,退出恢复。
4. RTO 超时 ssthresh = cwnd/2cwnd = 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 变体