1. 拥塞控制
1.1 什么是拥塞
- 拥塞:在某段时间,若对网络中某⼀资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫作拥塞(congestion)。
- 计网中的链路容量(带宽)、交换节点中的缓存和处理机等都是网络资源。
- 两条马路合并成一条,那么当两条路车流量都很大时,汇聚时会造成拥堵。
- 计网中的链路容量(带宽)、交换节点中的缓存和处理机等都是网络资源。
- 拥塞控制是⼀个全局性的过程:
- 涉及到所有的主机、路由器,以及与降低⽹络传输性能有关的所有因素。
- 是需要靠所有节点共同努力的结果。
- 防止过多的数据注入到网络中,使网络能够承受现有的网络负荷。
- 流量控制是一个点对点通信的控制,是接收端对发送端的控制,不涉及链路中的资源控制;
而拥塞控制涉及整条链路。
1.2 拥塞控制的常用算法
- 概述
慢开始(slow start,慢启动)、拥塞避免(congestion avoidance)
快速重传(fast retransmit)、快速恢复(fast recovery) - 几个缩写
- cwnd(congestion window):拥塞窗⼝
- rwnd(receive window):接收窗⼝
- swnd(send window):发送窗⼝,swnd = min(cwnd, rwnd)
1.2.1 慢开始
- cwnd 的初始值比较小,随着收到确认包ACK后:
- cwnd *= 2,指数级增长。
1.2.2 拥塞避免
- ssthresh(slow start threshold):慢开始阈值,cwnd达到阈值后,以线性方式增加,也就是“加法增大”。
- 拥塞避免(加法增大):拥塞窗口缓慢增大,防止网络过早拥塞。
- 乘法减小:只要网络出现拥塞,ssthresh /= 2,阈值减小为拥塞峰值的一半,接着执行慢开始算法,拥塞窗口恢复到初始值。
- 当网络出现频繁拥塞时,ssthresh值就下降的很快。
1.2.3 快重传
- 接收方
- 每收到⼀个失序的分组后就立即发出重复确认。
- 使发送方及时知道有分组没有到达。
- 而不要等待自己发送数据时才进行确认。
- 发送方
- 只要连续收到三个重复确认(总共4个相同的确认),就应当立即重传对方尚未收到的报文段。
- 而不必继续等待重传计时器到期后再重传。
1.2.4 快恢复
- 当发送方连续收到三个重复确认,说明网络出现拥塞:
- 就执行“乘法减小”算法,把 ssthresh 减为拥塞峰值的⼀半。
- 与慢开始不同之处是现在不执行慢开始算法,即cwnd现在不恢复到初始值:
- 而是把 cwnd 值设置为新的ssthresh值(乘法减小后的值,也就是拥塞峰值的一半)。
- 然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。