TCP拥塞控制

假设接收方总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度来决定,发送方让自己的发送窗口等于拥塞窗口。因此拥塞窗口cwnd的大小由网络的拥塞程度来决定,并且动态地在变化。
发送方控制拥塞窗口的的原则:
只要网络没有出现拥塞,拥塞窗口就能再增大一些,这样可以把更多的分组发送出去,提高网络的利用率。但只要网络出现拥塞或者是可能出现拥塞,就必须把拥塞窗口减小一些,减小注入到网络中的分组数,以便缓减网络出现的拥塞。
判断网络拥塞的依据:
当网络发生拥塞时,路由器就要丢弃分组。因此只要发送方没有按时收到应该到达的确认报文,也就是说只要出现了超时,就猜想是网络出现了拥塞。因此网络拥塞的依据就是出现了超时。

TCP拥塞控制

TCP进行拥塞控制有四个核心的算法:慢开始、拥塞避免、快重传和快恢复。

慢开始

主机开始发送数据时,并不清楚网络的负荷情况,所以由小到大逐渐增大拥塞窗口数值。慢开始规定:在每收到一个对新的报文段的确认后,可以把拥塞窗口增加以下数值:
拥塞窗口cwnd每次的增加量 = min(N,SMSS),N是原先未被确认的,但现在被刚收到的确认报文段所确认的字节数,SMSS是最大报文段。
使用满开始算法,每经过一个传输轮次,拥塞窗口cwnd就加倍。
一个传输轮次就是把拥塞窗口cwnd所允许发送的报文段都陆续发送出去,并收到对以发送的最后一个字节的确认所经历的时间。
【注意】在TCP实际运行中,发送方只要收到一个对新报文段的确认,其拥塞窗口cwnd就立即加一,并可以发送新的报文段,而不需要等这个轮次中所有的确认都收到后再发送新的报文段。
为了不避免拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh,如果cwnd < ssthresh,则使用慢算法;cwnd > ssthresh,使用拥塞避免;cwnd = ssthresh,既可以使用慢开始又可以使用拥塞避免。

拥塞避免

拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不像慢开始阶段那样加倍增长。在拥塞避免阶段有“加法增大(AI)”的特点,即按线性规律缓慢增长。

快重传

有时,有些报文段会在网络段丢失,但实际上并没有发生拥塞,如果发送方迟迟收不到确认就会认为超时,误认为发生了拥塞,导致发送方错误地开启了慢开始,把拥塞窗口又设置为1,降低了传输效率。采用快重传可以让发送方尽早知道了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要利机发出对已收到的报文段重复确认。快重传算法规定:发送方只要一连收到3个重复确认,就应该立即重传,这样不会超时,发送方就不会误以为出现了网络拥塞,使用快重传可以使整个网络的吞吐量提高约20%。

快恢复

通过快重传发送方知道了网络并没有发生拥塞,于是不启动慢开始,而是执行快恢复算法,发送方调整门限值ssthresh为当前cwnd值的一半,同时设置拥塞窗口为ssthresh,并开始执行拥塞避免算法。
【补充】
在拥塞避免阶段,拥塞窗口是按照线性规律增大的,被称为加法增大(AI),而一旦出现拥塞或者三次重复确认,就要把门限值设置为当前拥塞窗口的一半,大大减少拥塞窗口的数值,被称为乘法减小(MD),二者合在一起就是AIMD算法。

TCP拥塞控制流程图

TCP拥塞控制_第1张图片

你可能感兴趣的:(网络通信)