首先我们先了解Tcp协议,它是面向连接的,可靠的传输层协议。传输数据前,必须建立连接。
TCP面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的报文段);
TCP具备“可靠性传输”、“流量控制”、“拥塞控制”等功能;
接下来重点讲述下TCP的拥塞控制功能;
拥塞控制:从其字面意思就可以知道,它是为了减少网络拥塞的,TCP主要通过慢开始、拥塞避免、快重传、快恢复等四个算法来避免产生拥塞。
慢开始:
发送最初执行慢开始,令 cwnd = 1,发送方只能发送 1 个报文段;当收到确认后,将 cwnd(拥塞窗口) 加倍,之后发送方能够发送的报文段数量为:2、4、8 ...指数倍增长。
拥塞避免:
慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd >= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd加 1,降低拥塞窗口的增长速度。如果出现了超时,则令 ssthresh = cwnd / 2,然后开始执行快恢复。
快重传:
在接收方,要求每次接收到报文段都应该对最后一个已收到的有序报文段进行确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
快恢复:
当发送端收到连续三个重复的确认时,就执行“乘法减小”算法,把慢开始门限 ssthresh减半。
由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,即拥塞窗口 cwnd现在不设置为 1 。而是将cwnd当前值减半作为新的慢开始门限 ssthresh值,并让cwnd的值等于这个新的慢开始门限ssthresh值。随后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。 这便是快恢复算法。
快恢复是配套着快重传使用的,快恢复是相对于慢开始算法而言的。使用快恢复算法时,cwnd从较大值开始,通过拥塞避免算法逐渐线性增大,经过较短时间便能恢复比较快的传输速度;使用慢开始算法时,cwnd从1开始,需要较常时间才能达到较快的速度。
以上便是TCP拥塞控制的过程。