拥塞
网络边缘主机发送到网络中的负载超出了网络的承载能力,即导致拥塞
u 网络拥塞的特征
Ø 时延增大
— 由于在路由器缓存中排队而导致
Ø 数据包丢失
— 由于路由器的缓存溢出而导致
u 随着网络负载的增加
Ø 传输时延增大
Ø 吞吐量下降
拥塞控制:开环方法
u 通过对于传输协议的精心设计来避免拥塞
u 和拥塞控制相关的策略
Ø 重传策略:合理设计超时定时器
Ø 滑动窗口协议:选择重传ARQ 比连续ARQ协议更有助于避免拥塞;
Ø ACK策略:捎带确认或者累积ACK可以减少网络负载;
Ø 丢弃策略:对于某些应用(例如话音业务),适量丢弃数据包;
Ø 接纳控制(Admission control):在建立连接时可以使用接纳控制来限制源主机的发送速率,以避免拥塞。
拥塞控制方法:闭环方法
检测拥塞,在可能出现拥塞时,调整主机的发送速率以避免或缓解拥塞
TCP拥塞控制方法
u 端到端的拥塞控制
Ø 发送端检测拥塞,通过减少拥塞窗口长度来降低发送数据率
u 拥塞窗口(cwnd)
Ø 由发送端维护的一个变量
Ø 表示最多可以向网络中发送的字节数
u 发送端的发送窗口长度
Ø Min (接收窗口, 拥塞窗口)
u 有效发送窗口长度
u 当定时器超时或收到3个重复ACK时,即认为有数据丢失
u 发送端随即降低发送速率(降低cwnd)
慢启动(Slow Start)阶段
u 启动速率很低
u TCP连接建立时, 拥塞窗口 = 1 MSS
Ø 示例: MSS = 1000 字节, RTT = 200 ms
Ø 启动速率 = 5k 字节/秒
u 按指数级增加发送速率,直至发现数据丢失
Ø 每收到1个ACK,cwnd+1
Ø 每一轮发送(窗口内的数据全部发完),cwnd增加为原来的2倍
u 增长到何时?
Ø 达到一个预先设定的阈值
Ø 或者,出现数据丢失
拥塞避免(CA)阶段
拥塞窗口达到阈值
Ø 降低发送速度的增长,按线性增长
Ø AI: Additive Increase,按加法增长
Ø 每收到一个ACK,
Ø 一轮结束,cwnd+1
u 增长到何时?
Ø 出现数据丢失
出现数据丢失:MD
u MD:Multiplicative Decrease,按乘法减小
u 出现重发定时器超时
Ø 阈值=当前拥塞窗口的一半
Ø 拥塞窗口减为1
Ø 开始新的“慢启动”
u 收到3次重复的ACK
Ø 阈值=当前拥塞窗口的一半
Ø 拥塞窗口=阈值
Ø 开始新的AI,快速恢复
依据:
3个重复ACK表示网络还能够传输一些报文段;定时器超时则表示拥塞告警
快速重传机制
u 超时重传等待时间过长
Ø 传输效率低
u 快速重传:通过收到重复的ACK来发现报文段丢失
Ø 在报文段丢失时,发送端往往会收到多个重复的ACK
Ø 如果发送端收到3个重复的ACK,则立刻重传对应的报文段,而不必等待定时器超时
TCP拥塞控制策略小结
u 在拥塞窗口大小cwnd未达到阈值之前,发送端处于慢启动阶段,窗口按指数级增长
u 当cwnd达到阈值之后,发送端处于拥塞避免阶段,窗口按线性增长
u 当收到3个重复的ACK,新阈值=cwnd/2 ,cwnd=新阈值
u 当定时器超时,新阈值=cwnd/2 ,cwnd =1