一.拥塞控制的概念
? ? ? ? 某一时间下,若网络对某一资源的需求超过了该资源所能提供的,这就会带来网络性能的下降,这就叫做拥塞。那么为了避免网络产生拥塞,此时拥塞控制的概念就被提出,拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。
二.拥塞控制的四个算法
??????TCP主要使用四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。
注:发送方需要维护一个叫做拥塞窗口(cwnd )的状态变量,注意拥塞窗口与发送方窗口的区别:拥塞窗口只是一个状态变量,实际决定发送方能发送多少数据的是发送方窗口。
? ?1.慢开始
? ? ? ? 慢开始算法主要是当发送方发送数据时,试探性的由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。这样避免了不清楚当前网路的状态就立即把大量数据字节注入到网络,那么可能会引起网络阻塞。
????????发送最初执行慢开始,令 cwnd = 1 ,发送方只能发送 1 个报文段;当收到确认后,将 cwnd 每次以2倍增长,因此之后发送方能够发送的报文段数量为:2 、4 、8 ...。如图所示:
???2.拥塞避免?
? ? ? ? 拥塞避免则是为当前的慢开始设置一个门限值(ssthresh),当慢开始的cmnd>=ssthres,cmnd就不会以2倍增长,而是做当前的cmnd值每轮加一(加法增长)的操作。当网络产生了超时,则令ssthresh=cmnd/2,进行快恢复。
???3.快重传
????????在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
? ? ? ?举个🌰:?如图下图所示,发送方的M2数据包丢失了发送,接收方接连收到不连续的数据包M2,M4,就已经发现丢失了M3 ,可采用快重传的方式。
???4.快恢复
? ? ? ? 快恢复指的是当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限值ssthresh 减半。在TCP Reno版本,cmnd就会以当前新的门限值ssthresh直接做拥塞避免,因为 发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd 现在不设置为 1。如图所示:
在此小编建议读者朋友一定要理解最后一张快恢复的图,理解掌握了拥塞控制就掌握了!!!
?
|