TCP拥塞控制

TCP的拥塞控制包括慢开始、拥塞避免、快重传和快恢复四个算法。慢开始从较小的拥塞窗口开始逐渐增大;拥塞避免阶段窗口线性增长;快重传在连续收到三个重复确认时立即重传,避免超时;快恢复在确定无拥塞时,通过调整门限和窗口大小快速恢复传输。整个过程通过AIMD算法动态调整窗口大小,防止网络拥塞。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设接收方总是有足够大的缓存空间,因而发送窗口的大小由网络的拥塞程度来决定,发送方让自己的发送窗口等于拥塞窗口。因此拥塞窗口cwnd的大小由网络的拥塞程度来决定,并且动态地在变化。
发送方控制拥塞窗口的的原则:
只要网络没有出现拥塞,拥塞窗口就能再增大一些,这样可以把更多的分组发送出去,提高网络的利用率。但只要网络出现拥塞或者是可能出现拥塞,就必须把拥塞窗口减小一些,减小注入到网络中的分组数,以便缓减网络出现的拥塞。
判断网络拥塞的依据:
当网络发生拥塞时,路由器就要丢弃分组。因此只要发送方没有按时收到应该到达的确认报文,也就是说只要出现了超时,就猜想是网络出现了拥塞。因此网络拥塞的依据就是出现了超时。

TCP拥塞控制

TCP进行拥塞控制有四个核心的算法:慢开始、拥塞避免、快重传和快恢复。

慢开始

主机开始发送数据时,并不清楚网络的负荷情况,所以由小到大逐渐增大拥塞窗口数值。慢开始规定:在每收到一个对新的报文段的确认后,可以把拥塞窗口增加以下数值:
拥塞窗口cwnd每次的增加量 = min(N,SMSS),N是原先未被确认的,但现在被刚收到的确认报文段所确认的字节数,SMSS是最大报文段。
使用满开始算法,每经过一个传输轮次,拥塞窗口cwnd就加倍。
一个传输轮次就是把拥塞窗口cwnd所允许发送的报文段都陆续发送出去,并收到对以发送的最后一个字节的确认所经历的时间。
【注意】在TCP实际运行中,发送方只要收到一个对新报文段的确认,其拥塞窗口cwnd就立即加一,并可以发送新的报文段,而不需要等这个轮次中所有的确认都收到后再发送新的报文段。
为了不避免拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh,如果cwnd < ssthresh,则使用慢算法;cwnd > ssthresh,使用拥塞避免;cwnd = ssthresh,既可以使用慢开始又可以使用拥塞避免。

拥塞避免

拥塞避免算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不像慢开始阶段那样加倍增长。在拥塞避免阶段有“加法增大(AI)”的特点,即按线性规律缓慢增长。

快重传

有时,有些报文段会在网络段丢失,但实际上并没有发生拥塞,如果发送方迟迟收不到确认就会认为超时,误认为发生了拥塞,导致发送方错误地开启了慢开始,把拥塞窗口又设置为1,降低了传输效率。采用快重传可以让发送方尽早知道了个别报文段的丢失。快重传算法首先要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段也要利机发出对已收到的报文段重复确认。快重传算法规定:发送方只要一连收到3个重复确认,就应该立即重传,这样不会超时,发送方就不会误以为出现了网络拥塞,使用快重传可以使整个网络的吞吐量提高约20%。

快恢复

通过快重传发送方知道了网络并没有发生拥塞,于是不启动慢开始,而是执行快恢复算法,发送方调整门限值ssthresh为当前cwnd值的一半,同时设置拥塞窗口为ssthresh,并开始执行拥塞避免算法。
【补充】
在拥塞避免阶段,拥塞窗口是按照线性规律增大的,被称为加法增大(AI),而一旦出现拥塞或者三次重复确认,就要把门限值设置为当前拥塞窗口的一半,大大减少拥塞窗口的数值,被称为乘法减小(MD),二者合在一起就是AIMD算法。

TCP拥塞控制流程图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值