TCP拥塞控制

来源:互联网 发布:aws 阿里云 价格 编辑:程序博客网 时间:2024/05/16 08:24

1、对资源需求的总和>可用资源:资源拥塞!!!
资源拥塞–>网络性能变坏–>网络的吞吐量随着输入负荷的增大而下降
ps:正常情况下,网络的吞吐量随着输入的增大而上升

2、流量控制与资源拥塞的区别:
流量控制仅是发送端接收端之间的点对点通信量的控制问题,是一种避免接收方资源过载的端到端的控制机制。
ps:抑制发送方发送数据的速率,以便使接收端来得及接受
拥塞控制是一个全局性的问题,是一种避免网络资源过载的端到端的控制机制。

3、拥塞控制的分类
a、开环控制方法:设计网络的时候,实现考虑到发生拥塞的因素,从而避免这些因素,不产生拥塞。
b、闭环控制方法:允许用色的发生,待拥塞发生时,采用一定的方法解决。
ps:就像数据库中采用封锁的方式解决并发执行有可能造成的问题时,事务之间就可能发生死锁,解决死锁的方法就有两种:1、避免死锁的发生(顺序封锁法、一次封锁法)2、允许死锁的发生(超时法、等待图法)

这里写图片描述

4、拥塞控制的四种算法
主机–>确定发送端的速率–>1、流量控制(接收方来得及接受)–>2、拥塞控制(网络不发生拥塞)
TCP要求发送端维护两个窗口:
1、接收端窗口(rwnd):接收端将现在自己接受缓存所允许的窗口值放在TCP报文的窗口字段中通知发送端。
ps:接收端–>告诉发送端–>发送窗口大小。(流量控制)
2、拥塞窗口(cwnd):发送端根据自己估计的网络拥塞程度而设置的窗口值,反映了网络的当前容量。
ps:发送端自己估摸着来。(网络拥塞)
这时:嘿嘿嘿,发送端就得到了两个窗口值,那么取哪一个嘞?显而易见,取小的那个啦!
发送窗口的上限值=Min[rwnd,cwnd]
ps:一般来说(现实生活中),发送窗口大小 = cwnd

5、接收端窗口大小:TCP报文首部窗口字段决定,那么发送端是怎么估摸着拥塞窗口取多大嘞?
a、慢开始算法
主机在开始发送报文段时将拥塞窗口cwnd设置为1,即cwnd=1;
一般而言,cwnd这时远小于rwnd,所以发送端只能发送一个报文段;MSS=1;
算法开始啦!cwnd=1,发送端每收到一个新的报文段的确认后,将cwnd=cwnd+1;
这样第一次只能发一个,收到一次确认,cwnd=2;发送两个报文段,收到两个确认,cwnd=4…
1、2、4、8、16….
慢开始算法就是这样的,一开始慢,之后慢慢增大。
这时大家就要问了,增大到啥时候为止啊?
其实,慢开始算法我们给它设置了一个门限,就是MAX最大值,当达到此值时,我们就不用这个算法来计算窗口大小了,改用拥塞避免算法。
b、拥塞避免算法
慢开始门限(ssthresh)
cwnd小于ssthresh:使用慢开始算法
cwnd>ssthresh:拥塞避免算法
cwnd==ssthresh:两种算法随便啦!
拥塞退避算法是啥嘞?很简单,就是当cwnd==ssthresh时,再增长时,我们把cwnd+1就行了,一点一点加,不这样cwnd=cwnd+cwnd了。
c、到达拥塞时咋办?
不论在慢开始算法中还是拥塞退避算法中,只要出现了拥塞:
ssthresh = 出现拥塞时发送窗口大小值/2;
cwnd = 1;(开始执行慢开始算法)

哈哈,简单吧,宝宝已经说得很清楚了,不过还是把图拿出来大家再深入理解一下( ̄へ ̄)
这里写图片描述

6、快重传算法
拥塞窗口到达了网络拥塞值,有些报文丢失了,这时接收方收不该报文,那么接收方收到失序的报文段后,就对丢失的报文段发送重复确认,重复确认三次时,发送方就立即重传丢失报文。

7、快恢复算法
雷同于拥塞避免算法,就是上面的图啦
区别在于:
ssthresh = 发生拥塞时发送端窗口值大小/2;
cwnd = ssthresh;(不等于1啦,这样恢复太慢啦)
按照拥塞避免算法,cwnd++;

8、四种算法总结
拥塞控制的四种算法:慢开始算法:指数增长,增长到一定程度,拥塞避免算法(快恢复算法)、快重传算法。
快重传可以提高网络的吞吐量。
快恢复算法相当于拥塞避免算法的后半恢复部分的优化.

原创粉丝点击