对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏
,这种情况就叫作拥塞
。
首先,先对比流量控制与拥塞控制
流量控制:以接收方的接收能力
控制发送方(源点)的发送速率只与特定的点对点通信的发送方和接收方之间的流量有关
拥塞控制:源点根据各方面因素
,按拥塞控制算法自行控制发送速率
全局性问题,涉及网络中所有的主机、路由器等总结:流量控制是接收方限制发送方的流量,拥塞控制是根据全局的情况,设置了拥塞窗口,限制发送.
从控制论的角度分类,可分为开环控制和闭环控制
开环控制:
当网络的流量特征可以准确规定且性能要求可以事先获得时,适合使用开环控制。
闭环控制:
当网络的流量特征不能准确描述或者当网络不提供资源预留时,适合使用闭环控制。因特网采用的就是闭环控制方法。
衡量网络拥塞的一些指标:
根据拥塞信息的反馈形式,可将闭环拥塞控制算法分为显示反馈算法和隐式反馈算法.
显示反馈算法:从拥塞节点(即路由器)向源点
提供关于网络中拥塞状态的显式反馈信息。
隐式反馈算法:源点自身
通过对网络行为的观察(例如超重传或往返时间RTT)来推断网络是否发生了拥塞。TCP采用的就是隐式反馈算法
。
拥塞控制并不仅仅是运输层要考虑的问题。显式反馈算法就必须涉及网络层。虽然一些网络体系结构(如ATM网络)主要在网络层实现拥塞控制,但因特网主要利用隐式反馈在运输层实现拥塞控制。
慢开始,拥塞避免,快重传,快恢复
为了集中精力讨论拥塞控制算法的基本原理,假定如下条件
1.数据是单方向传送的,而另一个方向只传送确认。
2.接收方总是有足够大的接收缓存空间,因而发送方的发送窗口的大小仅由网络的拥塞程度来决定,也就是不考虑接收方对发送方的流量控制。
3.以TCP最大报文段MSS(即TCP报文段的数据载荷部分)的个数作为讨论问题的单位,而不是以字节为单位(尽管TCP是面向空节流的)
首先,先来认清概念swnd,cwnd,rwnd
图解:
发送窗口的大小由接收窗口和拥塞窗口共同决定 |
加入慢开始门限
最开始的拥塞窗口为cwnd=1,防止一开始数据传输量过大,造成拥塞.
假设慢开始门限值ssthresh=16,也就是说cwnd增大到16之后,切换算法为拥塞避免算法.
慢开始算法开始的过程:指数增长,一个传输轮次结束,也就是一个RTT的时间结束,cwnd由1变2,2变4,4变8…
拥塞避免算法开始的过程:线性增长,不同与慢开始算法的指数增长,拥塞避免每次只+1.
假如,出现了部分报文段丢失的情况,重传计时器超时,此时拥塞窗口变为1,重新开始慢开始算法,同时慢开始门限值/2.
总结:直观图如下:
图解:
“慢开始”是指一开始向网络注入的报文段少,而并不是指拥塞窗口cwnd的值增长速度慢。 “拥塞避免”也并非指完全能够避免拥塞,而是指在拥塞避免阶段将cwnd值控制为按线性规律增长,使网络比较不容易出现拥塞。 |
快重传算法有什么用?
指使发送方尽快(尽早)进行重传,而不是等重传计时器超时再重传
。
接收方不
要等待自己发送数据时才进行捎带确认,而是要立即发送确认
,即使收到了失序的报文段
也要立即
发出对已收到的报文段的重复确认
。发送方
一旦收到3个连续的重复确认
,就将相应的报文段立即重传
,而不是等该报文段的重传计时器超时再重传。
图解:
对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞而错误地把拥塞窗口cwnd的值减为1。实践证明,使用快重传可以使整个网络的吞吐量提高约20%。 |
快恢复算法有什么用?
收到3个重复确认
,就知道现在只是丢失了个别的报文段,于是不启动慢开始算法,而是执行快恢复算法
。
发送方将慢开始门限ssthresh的值和拥塞窗口cwnd的值都调整为当前cwnd值的一半,并开始执行拥塞避免算法
。总结:直观图如下: