题目
简述TCP拥塞控制的基本目标与核心机制
信息
- 类型:问答
- 难度:⭐
考点
拥塞控制目的,慢启动原理,拥塞避免机制
快速回答
TCP拥塞控制的核心目标是防止网络过载,通过动态调整发送速率来避免路由器丢包和网络瘫痪。主要机制包括:
- 慢启动(Slow Start):初始指数级增长窗口大小,快速探测可用带宽
- 拥塞避免(Congestion Avoidance):达到阈值后线性增长窗口,谨慎避免拥塞
- 拥塞检测:通过丢包事件(超时/重复ACK)触发窗口调整
一、核心目标与原理说明
网络拥塞发生在路由器缓冲区溢出导致数据包丢失时。TCP拥塞控制通过发送窗口动态调整实现:
- 目标1:最大化网络吞吐量
- 目标2:保证网络公平性
- 目标3:避免全局同步(所有连接同时降速)
二、核心机制详解
1. 慢启动(Slow Start)
连接建立时,拥塞窗口(cwnd)从1 MSS开始:
- 每收到一个ACK,cwnd增加1 MSS
- 实际效果:每轮次(RTT)窗口大小翻倍
- 终止条件:达到慢启动阈值(ssthresh)或检测到丢包
# 伪代码示例
cwnd = 1 # 初始拥塞窗口(单位:MSS)
ssthresh = 16 # 慢启动阈值
while cwnd < ssthresh:
send(cwnd) # 发送cwnd个报文
for each ACK received:
cwnd += 1 # 指数增长2. 拥塞避免(Congestion Avoidance)
当cwnd ≥ ssthresh时:
- 每收到一个ACK,cwnd增加 1/cwnd
- 实际效果:每轮次(RTT)窗口增加1 MSS
- 数学公式:cwnd = cwnd + 1/cwnd (per ACK)
# 伪代码示例(接慢启动阶段)
while no_packet_loss: # 无丢包时持续
send(cwnd)
for each ACK received:
cwnd += 1/cwnd # 线性增长三、拥塞检测与响应
- 超时重传:cwnd重置为1,ssthresh减半
- 重复ACK(快速重传):cwnd减半后直接进入拥塞避免
四、最佳实践
- 初始ssthresh设置:现代TCP通常设为较高值(如10-16 MSS)
- 公平性保障:所有TCP连接使用相同算法实现带宽公平分配
五、常见错误
- 误认为慢启动很慢(实际增长是指数级的)
- 混淆流量控制(接收方控制)与拥塞控制(网络状态控制)
- 忽略RTT对窗口增长速度的影响
六、扩展知识
- TCP Tahoe:基础版本(含慢启动+拥塞避免)
- TCP Reno:增加快速恢复机制
- 现代变种:CUBIC(Linux默认)、BBR(Google)
- 拥塞窗口与接收窗口关系:实际发送窗口 = min(拥塞窗口, 接收方通告窗口)