linux内核源代码中tcp拥塞控制状态机在哪里

公平

公平是当拥塞发生时,每个

源(或由同一源建立的不同TCP连接或UDP数据报)可以共享相同的网络资源(如带宽、缓存等。)相当。同一级别的源应该获得相同数量的网络资源。生产

公平的根本原因是拥塞必然导致丢包,从而导致数据流之间对有限网络资源的竞争,竞争能力弱的数据流受到的损害更大。

所以,没有拥塞,就不存在公平问题。

TCP层的公平性问题表现在两个方面:

(1)?

面向连接的TCP和无连接的UDP在拥塞发生时对拥塞指示的响应和处理不同,导致网络资源的不公平使用。当拥塞发生时,TCP具有拥塞控制反应机制

数据流将按照拥塞控制步骤进入拥塞避免阶段,从而主动减少发送到网络中的数据量。但是对于无连接的数据报UDP,因为没有端到端的拥塞控制机制,即使网络发出了拥挤

插头指示(如数据包丢失、重复收到ACK等。),UDP不会像TCP一样减少发送到网络的数据量。结果服从拥塞控制的TCP数据流获得的网络资源越来越少,

没有拥塞控制的UDP会获得越来越多的网络资源,导致网络资源在各个来源的分配严重不公平。

网络资源分配不公平

过来会加重拥堵,甚至可能导致拥堵崩溃。因此,如何在发生拥塞时判断每个数据流是否严格遵守TCP拥塞控制,如何“惩罚”不遵守拥塞控制协议的行为。

介绍了当前拥塞控制研究的一个热点。解决传输层拥塞控制公平性问题的根本途径是充分利用端到端的拥塞控制机制。

(2)部分TCP连接也存在公平性问题。出现问题的原因是一些TCP在拥塞前使用了较大的窗口大小,或者它们的RTT较小,或者数据包比其他TCP大,所以它们也会占用更多的带宽。

RTT不公平

AIMD拥塞窗口更新策略

也有一些不足。总和型增加策略在往返延迟(RTT)内将发送方数据流的拥塞窗口增加一个分组。因此,当不同的数据流影响网络瓶颈带宽时,

当线路竞争时,RTT较小的TCP数据流的拥塞窗口会比RTT较大的TCP数据流增长得更快,从而占用更多的网络带宽资源。

附加说明

中美之间线路质量不太好,rtt长,经常丢包。TCP协议成功就丢包,失败就丢包。TCP的设计目的是解决不可靠线路上的可靠传输问题,也就是解决丢包问题,但是丢包大大降低了TCP的传输速度。HTTP协议在传输层使用TCP协议,所以网页下载的速度取决于TCP单线程下载的速度(因为网页是单线程下载的)。

TCP传输速度因丢包而大大降低的主要原因是丢包重传机制,TCP拥塞控制算法是控制机制。

Linux内核中提供了几套TCP拥塞控制算法,加载到内核中的可以通过内核参数net . IP v4 . TCP _ available _ congestion _ control看到。

维加斯

1994

Brakmo提出了一种新的拥塞控制机制TCP?

维加斯,另一个角度的拥堵治理。从前面可以看出,TCP拥塞控制是基于丢包的。一旦发生丢包,拥塞窗口被调整。然而,丢包不一定是由

网络已经进入拥塞,但是由于RTT值与网络运行密切相关,TCP?

Vegas利用RTT值的变化来判断网络是否拥塞,从而调整拥塞控制窗口。如果发现RTT增加,Vegas认为网络拥塞,并开始减少拥塞窗口。

如果RTT变小,Vegas认为网络拥塞逐渐缓解,因此再次增加拥塞窗口。因为Vegas不是通过丢包来判断网络的可用带宽,而是通过RTT变化来判断,所以可以更准确的检测网络的可用带宽,从而达到更好的效率。但是Vegas有一个缺陷,可以说是致命的,最终影响到TCP。

维加斯在互联网上的应用并不广泛。问题是使用TCP Vegas的流的带宽竞争力不如不使用TCP Vegas的流。

这是因为只要路由器在网络中缓冲数据,就会导致RTT变大。如果缓冲区不溢出,就不会发生拥塞。然而,缓冲数据将导致处理延迟,因此RTT将改变。

大,特别是在带宽相对较小的网络中,只要一开始传输数据,RTT就会急剧增加,这在无线网络中尤为明显。在这种情况下,TCP?

Vegas减少自己的拥塞窗口,但是只要没有丢包,从上面可以看出,标准TCP是不会减少自己的窗口的,所以两者开始不公平,以此类推,TCP。

维加斯效率很低。其实如果所有TCP都采用Vegas拥塞控制模式,流之间的公平性会更好,竞争力不是Vegas算法本身的问题。

适用环境:互联网上难以大规模应用(带宽竞争力低)。

2.里诺

Reno是应用最广泛、最成熟的算法。该算法包含的慢启动、拥塞避免、快速重传和快速恢复机制是许多现有算法的基础。从雷诺运算机制中很容易看出,为了维持动态平衡,必须周期性地产生一定量的丢失,而AIMD机制——快减慢增,特别是在大窗口环境下,一个数据报丢失造成的窗口收缩需要很长时间才能恢复,这样带宽利用率不可能很高,而且随着网络链路带宽的不断提高,这种劣势会越来越明显。在公平性方面,据统计,Reno的公平性已经得到了相当的肯定,能够在更大的网络范围内理想地维护公平性原则。

Reno算法因其简单、有效、鲁棒性强而成为主流,被广泛应用。

但是它不能有效地处理从同一个数据窗口丢失多个数据包的情况。新的雷诺算法解决了这个问题。

基于丢包反馈的协议

近年来,随着高带宽延迟产品网络的普及,出现了许多新的基于丢包反馈的TCP协议改进,包括HSTCP、STCP、BIC-TCP、CUBIC和H-TCP。

一般来说,基于丢包反馈

该协议是一种被动的拥塞控制机制,根据网络中的丢包事件来判断网络拥塞。即使网络中的负载很高,只要没有拥塞和丢包,协议也不会主动降低自身。

发送速度。该协议可以充分利用网络的剩余带宽,提高吞吐量。但是,由于基于丢包的反馈协议在网络接近饱和状态下的激进性,一方面大大提高了网络的带宽利用率;另一方面,对于基于丢包反馈的拥塞控制协议来说,大幅度提高网络利用率意味着下一次拥塞丢包事件不远了,所以这些协议增加了网络带宽利用率,间接增加了网络丢包率,导致整个网络的抖动增加。

友好的天性

BIC-TCP,

基于丢包反馈的协议,如HSTCP和STCP,虽然大大提高了自身的吞吐量,但也严重影响了Reno流的吞吐量。基于丢包反馈的协议产生了如此差的TCP友好性。

主要原因是这些协议算法积极的拥塞窗口管理机制。这些协议通常认为只要网络中没有丢包,就一定有多余的带宽,以此来不断提高自己的传输速率。

从时间的宏观角度来看,其传输速率呈现凹形发展趋势,越接近网络带宽,峰值传输速率增长越快。这不仅带来了大量的拥塞和丢包,还恶意吞噬了网络。

网络中其他* * *流的带宽资源导致整个网络的公平性下降。

3.高速传输控制协议

HSTCP(High-speed Transmission Control Protocol,高速传输控制协议)是一种基于AIMD(Additive Growth and multiply Reduction,加性增长乘性减少)的高速网络拥塞控制算法,能够有效提高高速长时延网络的网络吞吐量。通过修改标准TCP拥塞避免算法的增减参数,实现了窗口的快速增大和缓慢减小,使窗口保持在足够大的范围内以充分利用带宽,在高速网络中可以取得比TCP更好的性能。

Reno具有更高的带宽,但是它具有严重的RTT不公平性。公平意味着共享同一网络瓶颈的多个流占用相等的网络资源。

TCP发送方通过网络的期望丢包率动态调整HSTCP拥塞窗口的增量函数。

避免拥塞的窗口增长模式:cwnd = cwnd+a(cwnd)/cwnd。

丢包后的窗口丢弃模式:cwnd = (1-b(cwnd))*cwnd。

其中a(cwnd)和

B(cwnd)是两个函数。在标准TCP中,a(cwnd)=1,b(cwnd)=0.5。为了实现TCP友好,在低窗口的情况下,也就是说在非。

在BDP的网络环境中,HSTCP使用与标准TCP相同的A和B来保证它们之间的友谊。当窗口较大时(临界值LowWindow=38),采用新的A。

和b以满足高通过量的要求。详情参见RFC3649文件。

4.美国著名游戏软件公司

在无线网络中,经过大量的研究发现tcpwestwood是一种理想的算法。其主要思想是通过在发送端连续检测ack的到达率来估计带宽,在拥塞发生时用带宽估计值调整拥塞窗口和慢启动阈值,并采用aiad(additive increase and

自适应拥塞控制机制。它不仅提高了无线网络的吞吐量,而且具有良好的公平性和与现有网络的互操作性。存在的问题是传输过程中不能很好的区分拥塞和无线丢包,导致拥塞机制的频繁调用。

5.H-TCP

H-tcp是高性能网络中的优秀算法,但存在rtt不公平、带宽不友好等问题。

6.BIC-TCP

BIC-TCP的缺点:首先,它有很强的抢占性。在小链路的短带宽延迟情况下,BIC-TCP的增长函数与标准TCP相比具有很强的抢占性。相当于在检测阶段重新启动一个慢启动算法,而TCP的窗口在稳定后一直线性增长,慢启动过程不会再执行。其次,将BIC-TCP的窗口控制阶段分为二进制。

Search增加,max探测,然后Smax和Smin的区分,这些值增加了算法实现的难度,也增加了协议性能分析模型的复杂度。在低RTT网络和低速环境下,BIC可能过于“活跃”,于是人们进一步改进了BIC,也就是立方。是Linux在采用立方之前的默认算法。

7.立方体的

立方在设计上简化了BIC-TCP的窗口调整算法,

在BIC-TCP的窗口调整中,会出现凹凸的增长曲线(这里的凹凸指的是数学意义上的凹凸,凹函数/凸函数),而CUBIC用的是三次函数(即

一个三次函数),三次函数曲线中还有一个凹凸部分,和BIC-TCP的曲线很像,所以这个部分代替了BIC-TCP的增长曲线。另外

此外,CUBIC中最关键的一点是,它的窗口增长函数只依赖于两个连续拥塞事件的时间间隔值,因此窗口增长完全独立于网络时延RTT。如前所述,HSTCP具有严重的RTT不公平性,而CUBIC的RTT独立性使得CUBIC在共享瓶颈链路的TCP连接之间保持良好的RTT公平性。

CUBIC是TCP(传输控制协议)的拥塞控制协议,也是Linux中当前默认的TCP算法。

该协议修改线性窗口

现有TCP标准的增长函数是三次函数吗?

为了提高TCP在快速和长距离上的可扩展性?

网络。它还实现了更公平的带宽分配。

具有不同RTT(往返时间)的流,方法是

窗口增长将独立于RTT——因此这些流量增长?

他们的拥挤窗口也是同样的速度。稳态期间,立方?

当窗口远离。

饱和点,并且当它接近时缓慢地上升

达到饱和点。该功能允许

立方是非常可扩展的,当带宽和延迟的产品。

网络是大的,同时又是高度稳定和公平的?

到标准的TCP流。

8.STCP

可扩展的TCP协议.

STCP算法是由Tom Kelly在2003年提出的。它通过修改TCP窗口增减参数来调整发送窗口大小,以适应高速网络环境。该算法具有较高的链路利用率和稳定性,但该机制的窗口增加与RTT成反比,这在一定程度上是存在的。

RTT是不公平的,当它与传统的TCP流一起存在时,它占用了太多的带宽,并且它的TCP友好性很差。