TCP拥塞控制

TCP拥塞控制,第1张

我们看到TCP连接的双方都包含一个接收缓冲区,一个发送缓冲区和几个变量(LastByteRead,rwnd等)。 TCP拥塞控制机制运行在发送者对拥塞窗笑模口的跟踪上。 拥塞窗口(表示为cwnd)对TCP发送方可以发送到网络的速率施加约束。具体而言,发送者含运的未确认数据量不得超过cwnd和rwnd之间的较小值:

ssthresh 慢启动阈值(show start threshold)

别被“慢启动”这个名字所迷惑了,实际上这是cwnd增长最快的阶段。

在慢启动状态下,cwnd的值从1 MSS开始,并且当每个被传输的报文段第一次ACK时,cwnd都会+1MSS

在进入拥塞避免状态时,cwnd的值大约是上次遇到拥塞时的值的一半

在慢启动阶段每个RTT都会将cwnd值加倍,而在拥塞避免阶段TCP采用更保守的方法,并且每个RTT只增加cwnd一个MSS的谈升梁值[RFC 5681]。 这可以通过几种方式实现。 一种常见的方法是TCP发送器在新的确认到达时通过MSS字节(MSS / cwnd)增加cwnd。 例如,如果MSS是1,460字节而cwnd是14,600字节,则在RTT内发送10个段。 每个到达的ACK(假设每个段一个ACK)将拥塞窗口大小增加1/10MSS,因此,当10个段都ACK后,cwnd才累计增加了一个MSS。

在快速恢复中,对于导致TCP进入快速恢复状态的丢失段的每个重复ACK,cwnd的值增加1 MSS。 最终,当丢失的段的ACK到达时,TCP在 放空cwnd 后进入拥塞避免状态。 如果发生超时事件,则执行与慢启动和拥塞避免相同的 *** 作后,快速恢复将转换为慢启动状态:cwnd的值设置为1 MSS,ssthresh的值设置为值的一半。

快速恢复是TCP [RFC 5681]的推荐但不是必需的组件。 有趣的是,早期版本的TCP(称为TCP Tahoe)无条件地将其拥塞窗口切换为1 MSS,并在超时指示或三重复ACK指示丢失事件后进入慢启动阶段。 较新版本的TCP,TCP Reno,整合了快速恢复。

TCP tahoe 无快速恢复

TCP reno 有快速恢复

忽略连接开始时的初始慢启动时段并假设丢失由三次重复ACK而不是超时触发的,TCP的拥塞控制包括每个RTT 1个MSS的cwnd线性(附加)增加然后减半 (三次重复ACK事件)的cwnd的(乘法减少)。 出于这个原因,TCP拥塞控制通常被称为加法增加,乘法减少(AIMD)形式的拥塞控制。AIMD拥塞控制引起了“锯齿”行为,如图3.54所示,这也很好地说明了我们早期对TCP“探测”带宽的直觉 - TCP线性增加了它的拥塞窗口大小(以及它的传输速率),直到 发生三重复ACK事件。 然后它将拥塞窗口大小减少两倍,然后再次开始线性增加,探测是否有额外的可用带宽。

如前所述,许多TCP实现使用Reno算法[Padhye 2001]。已经提出了Reno算法的许多变体[RFC 3782RFC 2018]。 TCP Vegas算法[Brakmo 1995Ahn 1995]试图在保持良好吞吐量的同时避免拥挤。 Vegas的基本思想是(1)在发生丢包之前检测源和目的地之间的路由器中的拥塞,以及(2)当检测到即将发生的丢包时,线性地降低速率。通过观察RTT预测即将发生的分组丢失。数据包的RTT越长,路由器的拥塞就越大。 Linux支持许多拥塞控制算法(包括TCP Reno和TCP Vegas),并允许系统管理员配置将使用哪个版本的TCP。 Linux版本2.6.18中的TCP的默认版本设置为CUBIC [Ha 2008],这是为高带宽应用程序开发的TCP版本。有关TCP的许多风格的最新调查,请参阅[Afanasyev 2010]。 TCP的AIMD算法是基于大量的工程洞察力和运营网络中的拥塞控制实验而开发的。

在某段时间内,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做拥塞。茄伏

可以通过拥塞控制方法来进行控制,控制的是发送窗口的大小,也就是一次性可以发送多少字节,如果趋向于拥塞,就少发送,如果不发生拥塞,就多发送。

拥塞的危害:

若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降

原理:

根本原理是当拥塞发生时就将发送窗口减小,当没有发生拥塞时就将发送窗口增大,而是否发生拥塞是通过是否发送超时重传决定的。

假定条件:

概念:

说明:

说明:

有个别报文段在网络中丢失,但是实际上网络并未发生拥塞,此时的发送方超时重传会导致网络误以为发生了拥塞并丛芦启动拥塞控制算法,这样就降低了发送效率。因此需要采用快重传。

原理: 快重传算法的根本原理就是让发送方尽早知道发生了个别报文段的丢失,而不需要启动超时重传机制

作用: 提高了传输效率,快重传可以使整个网络的吞吐量提高约20%

说明:

在快重传后如何进行拥塞窗口的控制呢?

发送方一旦受到3个重复确认报文,就知道现在只是丢失了个别的报文段,而不是发生了拥塞,所以就启动快恢复算法。

算法过程:

拥塞控制有两种,一种是超时重传后进入到慢开渗纳带始阶段,一种是收到3个重复确认报文后开始的快恢复阶段。

过程说明:

1、首先进行慢开始算法,cwnd指数增长

2、一直增长到cwnd>=ssthreesh,也就是达到了慢开始门限阈值,开始进行拥塞避免算法

3、拥塞避免算法是cwnd+1

4、当发生超时重传时,cwnd=1,ssthresh = cwnd/2 = 12

5、此时继续进行慢开始算法,指数增长

6、cwnd达到12后开始拥塞避免算法,cwnd = cwnd+1

7、当cwnd = 16时,收到3个重复确认,此时就需要进行快重传

8、快重传就是ssthresh = cwnd/2 = 16/2 = 8,而cwnd = ssthresh

9、在这个基础上继续开始快恢复。这里的快恢复直接就开始了拥塞避免算法


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12542772.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存