今天我想要来谈谈tcp的拥塞控制
一.拥塞控制的方法
1.慢开始
2.拥塞避免
3.快重传和快恢复
二.慢开始
慢开始的思路是这样的,当发送端一开始发送数据的时候,并不知道当前的网路状况是个什么样子的,这时候倘若要是一下子传输较大的数据字节,就有可能出现拥塞的情况,因此,慢开始将cwnd(拥塞窗口)的值置为一,然后设置一个ssthresh值(慢开始门限)。当第一个数据字节被成功传输了之后,慢开始就将cwnd的值成指数增长,1变成2,2变成4,4变成8,一直增长,只要cwnd的值小于等于ssthresh,所以,慢开始并不一定是真的慢,他只是起点低,但它成指数增长。
当cwnd的值等于或大于ssthresh的值的时候,拥塞控制就抛弃到这个慢方法,而使用拥塞避免。
三.拥塞避免
拥塞避免的原理就是,通过缓慢的增加cwnd,然后缓慢的增加ssthresh,其操作的目的就是为了在没有丢包的情况下,记住上一次最好的那个窗口值。
算法就是:当达到ssthresh时,cwnd的值将不是成指数增长,而是每次通过一个往返时间RST,就让cwnd的值增加1.
拥塞避免的算法一直到下一个报文超时重传了,然后客户端就会判定,是拥塞了,然后就取消拥塞避免,将ssthresh的值置为一半,然后将cwnd的值置为一,重新开启慢开始,如此亦复。
四.因为拥塞避免的问题而引进的快重传和快恢复
首先,我们来看看,拥塞避免是只要一判定超时,就开启慢开始,而不问原因,倘如要是是因为一个报文段并不是因为网路拥塞,是因为一不小心丢失了呢?这样,本来不拥塞的情况硬是被判定成了拥塞,所以就造成了资源的浪费,使得效率降低。
这时候我们就需要确认到底是网络拥塞了还是报文丢失了而引发的超时问题:
这时候,我们的快重传就体现出来功能的强大了,我举个例子可以很好的解释什么是快重传:
首先,快重传的一个关键就是连续发送三个确认报文,什么意思呢?当客户端在发送报文的时候,发一个m1,服务器端收到了,然后告诉你,发一个m1的确认报文给你,然后客户端发m2,服务器端收到也发一个m2的确认报文,然后,客户端发一个m3,服务器端呀没收到,这下尴尬了,于是服务器端重发一个m2的确认报文,这时候客户端不理会,继续发m4,m5,服务器端也继续重发m2的确认报文,累计三个,于是客户端有反应了,给它重发一个m3的报文段过去。于是这时候就不会被判定为拥塞,
接下来就会启动快恢复而不是慢开始
五.快恢复
快恢复的意思就是快速恢复到拥塞避免的那种情况下,
算法就是,将ssthresh的值置为一半,将cwnd的值等于慢开始门限,然后进入拥塞避免。
Tcp通过这几种方法的综合,就很好的进行了拥塞控制。