一、什么是拥塞
我们知道传输数据的链路带宽是有限的,但是这个时候网络中的主机都需要用到某一链路的时候,都涌向该链路,这个时候传输数据的数据链路就会出现类似堵塞的情况,成为拥塞。拥塞引起的重传并不会缓解网络拥塞,反而会家居网络的拥塞。TCP长时间没有接收到确认报文会判定为超时而进行重传。
二、什么是拥塞控制
拥塞控制就是为了方式数据过多注入到网络中,协调所有使用网络资源的所有主机,通过主机之间的协调就可以防止过多的数据注入到网络当中,从而减轻网络的拥塞情况。
三、流量控制与拥塞控制的区别
流量控制是使用在两个通信主机之间为了防止接收端对于太多的发送端发送的数据来不及处理而进行的流量操作,拥塞控制在操作上也是限制发送端的数据传输不要太多,但是针对的对象不是某台接收端主机而是相对于整个计算机网络中的数据链路所能承受的负载(网络繁忙)(多台主机向一台主机发送数据大于数据链路的传输带宽)。流量控制是一种端到端的概念,当出现数据来不及接收的时候知道自己该控制谁,但是拥塞是好几台主机所造成的。流量控制是发送端发送数据过快自己来不及处理而引入的手段,拥塞控制则是多台主机发送的数据堵在传输线路上,数据迟迟发送不到接收端
四、拥塞控制的四种算法
- 慢开始 + 拥塞避免
刚开始的拥塞窗口设置为1,随着传输轮次的增加,拥塞窗口的大小也指数型增长(慢开始部分)进行网络探查,当到ssthresh(慢开始门限值)时,拥塞窗口呈线性增长发送报文。当cwnd到达24的时候发生拥塞,拥塞窗口大小立即缩小到1,随后再指数型增长,要注意的是慢开始的门限值这个时候是上一次发生拥塞的时候拥塞窗口的大小的一半(24到12),到达新的门限值时再开始拥塞避免线性增长拥塞窗口。
- 快重传 + 快恢复
快重传和快恢复组合实现拥塞避免的思想是如果发送端收到来自接收端的三个冗余确认报文,这个时候执行快重传算法。
首先要解释什么是冗余确认报文,如上A、B两端进行通信传输报文,A向B传输了五个报文,但是第二个报文M2丢失了,在此之后接收端返回ack期待报文是M2,当接收到M3的时候,接收端返回的确认报文仍然表达的是要接收M2,M3、M4、M5被接收到的时候,接收端返回的确认报文都是ack期待接收M2,这时发送端收到三个冗余确认报文(快重传部分)。发现M2报文丢失后,于是执行快重传算法重传丢失的M2报文,但是此时的拥塞窗口并不是立即减小到1,而是变小到 收到三次冗余确认报文的轮次的拥塞窗口大小的一半(快恢复部分) 然后拥塞窗口再线性增长。(M2丢失的原因有可能是网络出现了拥塞所导致的丢包,所以为了不出现丢包,所以引入了这些拥塞控制算法)。
快重传:发送方只要连续收到3个重复确认,就知道接收方没有收到某个报文段,应该立即进行重传。可以让发送方尽早知道发生了个别报文段的丢失。 快恢复:发送方知道丢失了个别报文段之后,启动快恢复算法,发送方调整慢开始门限ssthresh=cwnd/2,同时设置拥塞窗口cwnd=ssthresh,并开始执行拥塞避免算法。
\