网络拥塞现象是由于网络流量或交通量超过网络信道额定容量引起的,致使网络的吞吐能力急剧下降。引起拥塞的原因可能是多方面的,如接收节点的缓冲区溢出、线路拥挤以及带宽不足等。当发生网络拥塞现象时,必须通过适当的拥塞控制措施来疏导网络交通。
拥塞控制主要用于保证网络通畅地传送数据,它涉及网络中所有与之相关的主机和路由器的发送和转发行为,是一种全局性的控制措施。拥塞控制算法大致可分成开环控制和闭环控制两大类:
开环控制算法是通过良好的网络系统设计来避免拥塞问题的发生,在网络运行过程中,何时接受新分组、何时丢弃分组以及丢弃哪些分组都是事先规划好的,并不考虑当前的网络流量状况。
闭环控制算法通过反馈机制来调整当前网络流量,使网络流量与网络可用资源相协调,从而使网络拥塞问题得到解决。由于闭环控制算法能根据当前网络状况对流量进行动态控制,因而具有较高的效率。
闭环控制算法的关键技术主要有三种。
(1)能够随时发现拥塞问题的检索机制:根据当前网络状况来监视网络是否发生了拥塞。判断的依据或基准参数主要有:因缺少缓冲区空间而丢弃的分组数量、平均分组队列长度、超时重发分组的数量、平均分组延迟时间等。如果基准参数超过临界值,则意味着可能发生了网络拥塞。
(2)能够将发生拥塞的信息传送到适当控制点的反馈机制:将发生拥塞的信息从检查点传送到控制点。反馈方式有显式反馈和隐式反馈两种:显式反馈由检查点向控制点反馈一个警告分组来通告网络已发生了拥塞。隐式反馈由控制点(源端)通过观察应答分组返回所用时间进行推断的方式来判断网络是否发生了拥塞。
(3)能够通过调整系统操作来排除拥塞问题的调整机制:通过检查点和控制点相互协作来共同解决拥塞问题。控制点通过降低载荷(即降低分组发送速率)来缓解拥塞;检查点通过载荷脱落(即丢弃某些分组)来疏导交通,或者通过增加系统资源(如增加附加线路或提高线路带宽)来提高流量通过能力。
1.慢开始算法和拥塞避免算法
为了实现拥塞控制,每个TCP连接,除了接收方设置一个通告窗口(rwnd)外,还在发送方设置一个根据网络拥塞程度而定的发送窗口限制——拥塞窗口(cwnd)。实际的发送窗口的大小上限,应该取通告窗口和拥塞窗口两者中的小者。
当rwnd<cwnd时,是接收端的接收能力限制发送窗口的最大值。
当cwnd<rwnd时,则是网络的拥塞限制发送窗口的最大值。
(1)慢开始算法。
首先将拥塞窗口cwnd设置为一个MSS(最大报文段的数据字节数)。以后,每收到一个对新的报文段的确认后,将拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送端的拥塞窗口cwnd,也就时逐步增加发送端的发送能力。慢开始门限的初始值设置为16个报文段,即ssthresh=16。
为了讨论慢开始算法,假定接收端窗口足够大,因此现在发送窗口的数值等于拥塞窗口的数值。在不出现拥塞的情况下:
第一次发送后,由于收到一个ACK,cwnd增加1个MSS,即一次具有发送2个MSS大小的报文段的能力;
第二次发送后,由于收到两个ACK,cwnd增加2个MSS,即一次具有发送4个MSS大小的报文段的能力;
……
在慢开始阶段,拥塞窗口的大小按指数增长。当拥塞窗口cwnd增长到慢开始门限值ssthresh时(即当cwnd=16时),就改为执行拥塞避免算法,如图4-28所示。
图4-28 采用慢开始算法和拥塞避免算法的TCP拥塞窗口的变化(www.xing528.com)
(2)拥塞避免算法。
拥塞避免算法中,每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,使拥塞窗口cwnd按接近线性规律缓慢增长。这种增长方式叫作“加法增大”(Additive Increase)。
假定拥塞窗口的数值增长到24时,网络出现超时(表明网络拥塞了)。此时,将门限值ssthresh设置为当前拥塞窗口值的一半(但不能小于2MSS),比如:ssthresh设置为12,然后重新开始执行慢开始算法。
拥塞避免算法不能够完全避免网络拥塞,通过控制拥塞窗口的大小只能使网络不易出现拥塞。
2.快重传和快恢复算法
快重传算法规定,发送端只要一连收到三个重复的ACK即可断定有分组丢失了,就应立即重传丢失的报文段而不必继续等待为该报文段设置的重传计时器的超时。快重传并非取消重传计时器,而是在某些情况下可更早地重传丢失的报文段。
快恢复算法:
(1)当发送端收到连续三个重复的ACK时,就重新设置慢开始门限ssthresh。
(2)与慢开始不同之处是拥塞窗口cwnd不是设置为1,而是设置为ssthresh+3MSS。
(3)若收到的重复的ACK为n个(n>3),则将cwnd设置为ssthresh+n * MSS。
(4)若发送窗口值还容许发送报文段,就按拥塞避免算法继续发送报文段。
(5)若收到了确认新的报文段的ACK,就将cwnd缩小到ssthresh。
快重传可以提高网络的吞吐量,而快恢复算法相当于拥塞避免算法的后半恢复部分的优化。
快恢复算法与快重传算法配合使用:
(1)当发送方收到三个连续确认时,就执行“乘法减小”算法,把“慢开始门限”减半,注意接下来不会执行慢开始算法。
(2)由于此时没有发送网络阻塞(要是发生阻塞的话就不会连续收到4个确认),因此,此时不执行慢开始算法,并不会将拥塞窗口的值置为1,而是将它置为慢开始门限的一半,然后再实行拥塞避免算法,每次收到确认之后+1。
随堂练习
1.TCP的连接是怎样实现的?
2.TCP解决拥塞问题有哪些算法?
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。