TCP协议是一个面向连接的、可靠的传输层协议,当网络拥塞时,为了保证它的可靠性传输,TCP协议使用拥塞控制来减少数据的发送。
TCP协议进行拥塞控制的算法有四种:慢开始、拥塞避免、快重传、快恢复。
当然,在拥塞控制的过程中,必须得提到拥塞窗口,这是拥塞控制中不可或缺的一个状态变量,而发送方维持着这个窗口,其值取决于网络的拥塞程度,并且动态变化,只要网络没有出现拥塞,拥塞窗口就扩大一点,但是只要网络中出现拥塞,拥塞窗口就减小。
慢开始
由于发送方第一次发送数据,还不清楚网络中的负荷状况,所以最好的解决办法就是先探测一下,从小到大的去发送数据,因此发送方的发送窗口从1开始,以指数形式不断增大,直到达到慢开始门限,慢开始停止,执行拥塞避免。
拥塞避免
为了防止慢开始过度增长,因此设置了慢开始门限,一旦拥塞窗口值达到慢开始门限,执行拥塞避免算法。每传输一次数据,门限值+1,直到网络中发生拥塞时,拥塞避免阶段停止,触发重传机制。
快重传
当发送方接收到了来自接收方发送的3个连续的确认信号时,说明此时网络中发送数据丢失,接收方没有收到发送方的某一次发送,此时发送方立即重新发送对方尚未收到数据,并执行快恢复算法。
快恢复
当发送方收到三个重复的确认时,此时新的门限值等于拥塞窗口值减半,并从新的门限值开始执行拥塞避免算法,这便是快恢复算法。一般快重传和快恢复算法配套使用。
注意:
在最早的TCP Tahoe版本(已废弃不用)中,当网络中发生超时,此时执行的是:超时重传,门限值等于此时拥塞窗口值减半,拥塞窗口值恢复为1,重新执行慢开始,当网络中出现三个连续的确认信号时,才执行快恢复算法。
在TCP Reno版本中,不管是网络中出现超时还是快重传,都执行快恢复算法。原因是当网络中发生拥塞时,不再执行超时重传,而是执行快速重传,并执行快恢复算法。