TCP的拥塞控制是如何实现的?
创始人
2025-07-09 16:51:10
0

面试官:请说一下,TCP的拥塞控制是如何实现的?

流量控制是避免发送方的数据填满接收方的缓存。但计算机网络一般都处在一个共享的环境,因此也有可能会因为其他主机之间的通信使得网络拥堵。在网络出现拥堵时,如果继续发送大量数据包,可能会导致数据包丢失或者时延增大,这时TCP就会重传数据,而一重传就会导致网络的负担更重,于是会导致更大的延迟和更多的丢包。

图片图片

图片图片

图片图片

TCP的拥塞控制机制可以根据网络链路的实时状态,自动调整发送速度,降低发送的数据量,从而避免发送方的数据填满整个网络。

图片图片

图片图片

图片图片

TCP通过拥塞窗口来约束发送速度,拥塞窗口跟接收窗口类似,同样规定了发送方此刻能够发送出去的字节数,只不过它是通过评估网络链路的拥塞程度,并由一定的算法计算而来的。发送方的发送窗口大小由接收窗口和拥塞窗口共同决定,取拥塞窗口和接收窗口中的最小值。

图片图片

TCP通过慢启动、拥塞避免、拥塞发生和快速恢复四种算法来进行拥塞控制。

图片图片

1、慢启动

TCP连接刚建立时,对网络链路的运行状况一无所知,慢启动就是TCP启动后的发送速度慢慢的进行提速,便于感知网络的状况。

图片图片

慢启动算法将拥塞窗口cwnd初始化为1,然后每收到一个ACK,cwnd就会加 1,假设每个报文段都会回复ACK确认,在没有丢包的情况下,第一个分组被确认后,cwnd就变成了2,接下来,TCP可以发送2个报文段。如果这2个报文段均顺利送到,可以收到2个ACK确认,cwnd增大到 4,以此类推。因此,慢启动期间cwnd是呈指数增长的。

图片图片

图片图片

2、拥塞避免

当cwnd超过慢启动门限ssthresh时就会进入拥塞避免算法。在拥塞避免阶段,TCP以更慢的速度扩张拥塞窗口,每当成功发送跟拥塞窗口大小等量的数据并收到ACK确认后,cwnd就加1。例如,假设当前拥塞窗口大小为k,这时可以发出k个报文段。当这k个报文段均发出并收到确认后,才给cwnd加1,所以拥塞避免阶段,cwnd是呈线性增长的。

图片图片

图片图片

3、拥塞发生

进入拥塞避免阶段后,窗口保持缓慢增长,当遇到网络拥塞发送丢包时,TCP就会进行重传。如果是发生超时重传,慢启动门限ssthresh会被设置为当前拥塞窗口值的一半,cwnd恢复为初始化值1,然后重新开始前面的慢启动过程。如果是发生快速重传(重复ACK),ssthresh和cwnd都会变为当前拥塞窗口值的一半,然后进入到快速恢复阶段。

图片图片

图片图片

图片图片

图片图片

4、快速恢复

在快速恢复阶段,发送方会重传丢失的数据包,此时发送方已收到了3个重复的ACK,所以cwnd加3,如果再收到重复的 ACK,那么cwnd增加 1,如果收到新的ACK,表明重传的包成功了,将cwnd设置为当前的慢启动门限ssthresh值,然后再次进入到拥塞避免阶段。

图片 图片

相关内容

热门资讯

PHP新手之PHP入门 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的...
网络中立的未来 网络中立性是什... 《牛津词典》中对“网络中立”的解释是“电信运营商应秉持的一种原则,即不考虑来源地提供所有内容和应用的...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
什么是大数据安全 什么是大数据... 在《为什么需要大数据安全分析》一文中,我们已经阐述了一个重要观点,即:安全要素信息呈现出大数据的特征...
如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
P2P的自白|我不生产内容,我... 现在一提起P2P,人们就会联想到正在被有关部门“围剿”的互联网理财服务。×租宝事件使得劳...
Intel将Moblin社区控... 本周二,非营利机构Linux基金会宣布,他们将担负起Moblin社区的管理工作,而这之前,Mobli...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...