TCP拥塞控制算法

背景

在某段时间,若对网络中某一资源的需求超过了该资源所提供的可用部分,网络的性能就要变坏,这种情况就叫拥塞。单纯增加资源无法解决问题,比如增加某节点处理能力但输出链路处理速度没有变化,更多的数据包会超时重传从而引发更严重的拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。TCP的拥塞控制算法主要有四种:慢开始拥塞避免快重传快恢复
TCP的拥塞控制基于窗口,发送方维持一个拥塞窗口 cwnd的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化,发送方让自己的发送窗口等于拥塞窗口。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就可以更大一些;只要网络出现了拥塞,就把拥塞窗口减小一些。判断网络是否拥塞的依据是超时

慢开始

慢开始算法的思路是,当主机开始发送数据时,并不确定网络负载,如果立即把大量数据注入网络,可能引起网络拥塞。因此需要先进行探测,从小到大逐渐增大拥塞窗口的值。

慢开始算法规定,定义发送方的最大报文段为SMSS。

if  SMSS > 2190Bytes
	init cwnd = 2*SMSS
else if SMSS > 1095
 	init cwnd = 3*SMSS
 else 
 	init cwnd = 4*SMSS

每收到一个对新的报文段的确认后,可以把拥塞窗口最多增加一个SMSS的数值,
拥塞窗口cwnd每次的增加量= min (N, SMSS),其中N是原先未被确认的,但现在刚收到的确认报文段所确认的字节数。

慢开始算法的原理如下,为简单起见,使用报文段个数作为窗口大小的单位。
一开始的时候发送方设置cwnd=1,发送第一个报文段M1,接收方收到后确认M1,发送方收到对M1的确认后,把cwnd从1增大到2,于是发送方接着发送M2和M3两个报文段。接收方收到后发回对M2和M3的确认。发送方每收到一个对新报文段的确认就使发送方的拥塞窗口加1,因此发送方在收到两个确认后,cwnd就从2增大到4,并可发送M4-M7的报文段。因此,使用满开始算法后,每经过一个传输轮次,拥塞窗口cwnd就加倍。
慢开始算法流程

满开始算法中的慢并不是说cwnd的增长速率慢,而是指TCP开始发送报文时先设置cwnd=1,然后逐步增加cwnd。这比开始设置很大cwnd向网络注入许多报文段要慢。

TCP实际运行中,发送方每次收到对一个报文段的确认,拥塞窗口cwnd立即加1,并立即发送新的报文段,而不需要等这个轮次所有确认后再发送新的报文段。

为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置慢开始门限ssthresh状态变量。用法如下:

if cwnd < ssthresh
	使用慢开始算法
else if cwnd > ssthresh
	使用拥塞避免算法
else
	使用慢开始算法,或者使用拥塞避免算法

拥塞避免

拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1。因此在拥塞避免阶段就有加法增大的特点。这表明在拥塞避免阶段,拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢的多。

拥塞避免算法的过程如下,假设慢开始门限值为16个SMSS。(1)在执行慢开始算法算法时,发送方每收到一个对新报文段的确认,就把拥塞窗口加1,然后开始下一轮的传输。
(2)当拥塞窗口cwnd增长到慢开始门限值ssthresh时,就改为执行拥塞避免算法,拥塞窗口按照线性规律增长。
(3)当拥塞窗口cwnd=24时,网络出现了超时,发送方判断为网络拥塞,于是调整门限值ssthresh=cwnd/2=12,同时设置拥塞窗口cwnd=1,进入慢开始阶段。如图12的位置。
(4)按照慢开始算法,发送方每收到一个对新报文段的确认,就把拥塞窗口加1,当拥塞窗口cwnd=12,改为执行拥塞避免算法,拥塞窗口按线性规律增大。
(5)当拥塞窗口为16时,发送方一连收到3个对同一个报文段的重复确认(3-ack)。
拥塞避免算法流程
3-ack问题,有时个别报文会在网络中丢失,但实际网络并未发生拥塞,如果发送方迟迟收不到确认,就会产生超时,从而误认为发生了拥塞。然后开启慢开始算法,修改cwnd为1,这样就会降低传输效率。采用快重传算法可以让发送方尽早知道发生了个别报文段的丢失。

拥塞避免是说拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞。它并不能完全避免拥塞。

快重传

快重传的原理是,首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要立即发出对已经收到的报文段的重复确认。
(1)如图,接收方收到了M1和M2后都分别及时发出了确认。现在假设接收方没有收到M3但却收到了M4,本来接收方可以什么都不做,但是按照快重传算法,
(2)接收方必须立即发送对M2的重复确认,以便让发送方及早知道接收方没有收到报文段M3,
(3)发送方接着发送M5和M6.接收方收到后也仍要再次分别发出对M2的重复确认。这样,发送方共收到了接收方的4个对M2的确认,其中后3个都是重复确认。
(4)快重传算法规定,发送方只要一连收到3个重复确认,就知道接收方确实没有收到报文段M3,因而应当立即进行重传,这样就不会出现超时,发送方也就不会误认为出现了网络拥塞。
快重传算法

快恢复

快恢复的原理是,当接收方发送了三个重复确认之后,发送方知道有报文丢失了,发送方不启动慢开始,而是执行快恢复算法,此时。发送方调整门限值为ssthresh为一半,同时设置拥塞窗口为最新的ssthress值,并开始执行拥塞避免算法。如图横轴21的位置。
拥塞避免算法流程

小结

在拥塞避免阶段,拥塞窗口是按照线性规律增大的,这常称为加法增大AI,而一旦出现超时或者3个重复确认,就把门限制设置为当前拥塞窗口的一半,并大大减小拥塞窗口的数值,这成为乘法减小MD。二者合在一起称为AIMD算法。
使用拥塞控制算法使得TCP的性能有明显的改进。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值