前言
计算机网络中的带宽、交换节点中的缓存和处理机等,都是网络的资源,在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这样的情况就叫做拥塞。
所谓拥塞控制,就是防止过多的数据注入到网络中,从而使网络中的路由器或链路不致过载。要注意用拥塞控制与流量控制的差别,拥塞控制是一个全局性的过程,涉及到全部的额主机、路由器,以及与减少网
拥塞控制的算法有:慢開始、拥塞避免、快重传、快恢复四种。
慢開始和拥塞避免
发送方维持一个拥塞窗体的状态变量,其大小取决于网络的拥塞程度,动态地变化,而发送窗体一般取拥塞窗体和对方给出的接收窗体的最小值(为了便于描写叙述,后面的分析中假定对方给出的接收窗体足够大,这样将发送窗体等于拥塞窗体就能够了)。
慢開始算法的核心是从小到大逐渐增大发送窗体,也就是说,从小到大逐渐增大拥塞窗体的数值。通常在刚開始发送报文段时,先把拥塞窗体设置为一个最大报文段MSS的数值,而在每收到对上一轮报文段(,每次加倍后的报文段的个数,可能不止一个报文段)的确认后,就把拥塞窗体的数值加倍。
为了防止拥塞窗体增长过大引起网络拥塞,还须要维护一个慢開始门限的状态变量,当拥塞窗体的值小于慢開始门限时,使用慢開始算法,一旦拥塞窗体的值大于慢開始门限的值,就改用拥塞避免算法。
拥塞避免算法的思路是让拥塞窗体缓慢地增大,收到每一轮的确认后,将拥塞窗体的值加1,而不是加倍,这样拥塞窗体的值依照线性规律缓慢增长。
不管是在慢開始阶段还是在拥塞避免阶段,仅仅要发送方推断网络出现拥塞(没有按时收到确认),就把慢開始门限设置为出现拥塞时发送窗体值的一般,但最小不能小于2个MSS值,而后把拥塞窗体的值又一次设置为1个MSS,运行慢開始算法。
快重传和快恢复
快重传算法首先要求接收方每收到一个失序的报文段后就马上发出反复确认(反复发送对前面有序部分的确认),而不是等待自己发送数据时才进行稍待确认,也不是累积收到的报文发送累积确认,假设发送方连续收到三个反复确认,就应该马上重传对方未收到的报文段(有收到反复确认,说明后面的报文段都送达了,仅仅有中间丢失的报文段没送达)。
快恢复算法与快重传算法配合使用,其过程有例如以下两个要点:
1、当发送方连续收到三个反复确认时,就把慢開始门限减半,这是为了预防网络发生拥塞。注意,接下来不运行慢開始算法。
2、因为发送方如今觉得网络非常非常可能没有发生特别严重的堵塞(假设发生了严重堵塞的话,就不会一连有好几个报文段到达接收方,就不会导致接收方连续发送反复确认),因此与慢開始不同之处是如今不运行慢開始算法(即拥塞窗体的值不设为1个MSSS),而是把拥塞窗体的值设为慢開始门限减半后的值,而后開始运行拥塞避免算法,线性地增大拥塞窗体。