一种基于rtt的tcp网络拥塞控制方法

文档序号:1204352 发布日期:2020-09-01 浏览:17次 >En<

阅读说明:本技术 一种基于rtt的tcp网络拥塞控制方法 (TCP network congestion control method based on RTT ) 是由 张建川 涂燕晖 陈一昕 于 2020-04-28 设计创作,主要内容包括:本发明公开一种基于RTT的TCP网络拥塞控制方法,TCP网络拥塞控制方法基于拥塞窗口变化率与RTT变化率的比值变化来判断当前网络数据量是否达到饱和状态;以此作为调整数据流量的依据。该方法可以根据网络状态自适应的以不同速率增加或者减小拥塞窗口大小,减少了基于传统算法出现断崖式变化的概率。(The invention discloses a TCP network congestion control method based on RTT, which judges whether the current network data volume reaches a saturation state based on the ratio change of the congestion window change rate and the RTT change rate; this is used as the basis for adjusting the data flow. The method can adaptively increase or decrease the size of the congestion window at different rates according to the network state, and reduces the probability of cliff-type changes based on the traditional algorithm.)

一种基于RTT的TCP网络拥塞控制方法

技术领域

本发明属于网络流量控制技术领域,尤其涉及一种基于RTT的TCP网络拥塞控制方法。

背景技术

TCP拥塞控制比较经典的算法有Tahoe、Reno、NewReno、SACK、Vegas以及显示控制算法ECN,下面是对这几种算法的简单阐述:

Tahoe算法源于20世纪80年代末期在加州大学伯克利分校的4.2版本的UNIX系统中被提出,它在连接之初处于慢启动阶段,若检测到丢包,不论由于超时还是快速重传,都会重新进入慢启动阶段;这种方法带来的一个问题是,对于有较大BDP的链路来说,会使得带宽利用率低下。

针对cwnd启动的初始值设置过小这一问题,又有了Reno算法,即在快速重传的条件下设置cwnd值为当前窗口一半并重新执行拥塞避免过程,这称为快速回复;而快速恢复带来的一个问题是,当一个传输窗口出现多个数据包丢失时,一旦其中一个包重传成功,发送发就认为已完成重传,但是丢失的其他数据包可能并未完成重传,这称为局部ACK,于是就引入了NewReno算法。

NewReno算法对快速恢复做了改进,只有在该窗口内丢失的所有数据包都得到重传之后才退出快速恢复阶段,将拥塞窗口置为当前一半并进入拥塞避免阶段。虽然NewReno可以解决大量数据包遗失的问题,但是NewReno在每个RTT内只能重传一个数据包,为了处理大量数据包遗失的问题,另一个解决方法是让发送端知道哪些数据包已经被接收端收到,于是SACK应运而生。

TCP SACK在TCP Reno基础上增加了选择确认(SACK)和选择重传,SACK中加入的SACK选项允许接收端在返回重复ACK时,将已经收到的数据区段返回给发送端,数据区段与数据区段之间的间隔就是接收端没有收到的数据。发送端知道了哪些数据包已经收到,哪些该重传,因此SACK发送端在一个往返时延RTT时间内可以重传多个数据包。

TCP Vegas算法于1994年被提出,它是TCP协议发布后的第一个基于延迟的拥塞控制方法。Vegas算法首先估算了一定时间内网络能够传输的数据量,然后与实际传输能力进行比较。若本该传输的数据并没有被传输,那么它有可能被链路上的某个路由器挂起。在拥塞避免阶段,Vegas算法测量每个RTT中所传输的数据量,并将这个数除以网络中观察到的最小延迟时间。算法维护了两个阈值α和β。当吞吐量与预期不同时,若得到的吞吐量小于α,则将拥塞窗口增大;若吞吐量大于β,则将拥塞窗口减小。吞吐量在两个阈值之间,拥塞窗口保持不变。显示拥塞控制是运行在IP协议和TCP协议中的一种可选拥塞控制策略,运行通过数据标识来代替丢包的方式来告知网络拥塞控制状态。

ECN的实现需要在建立连接的时候通讯双方进行协商,协商成功,相应的路由器可以通过路由设定IP数据包的标志位来通知拥塞,而连接的双方也可以通过TCP/IP数据包中的相应标识位来进行拥塞窗口控制。当通讯双发协商好采用ECN后,通讯双发发送出来的IP数据报就被标记为ECT(0)或者ECT(1),然后当该数据报经过支持ECN的路由器时候就会对数据进行控制,当网络达到可能要发生拥塞的时候就会采取对数据包进行标记来取代丢包,当通讯一端接收到报文的时候,就可认为该网络发生了拥塞,并通过TCP报文将拥塞信息回显,通知发送端。

上述现有技术存在以下问题:

1、基于检测丢包的拥塞控制方法Tahoe、Reno、NewReno拥塞窗口变化较大,会带来较大的传输延迟,在拥塞避免阶段拥塞窗口会一直增大,直到出现丢包或收到三次重复ACK,此时拥塞窗口会出现断崖式的下降,不能动态的适应变化的网络;设置慢启动阈值有可能远小于网络实际的可承载能力,后期拥塞避免阶段拥塞窗口增加过慢,不能充分利用网络带宽

2、基于时延的拥塞控制方法TCP Vegas的主要缺点是网络中Vegas与其它算法共存的情况下,基于丢包的拥塞控制算法会尝试填满网络中的缓冲区,导致Vegas计算的RTT增大,进而降低拥塞窗口,使得传输速度越来越慢。

发明内容

为了解决上述本领域中存在的技术问题,本发明提供了一种基于RTT的TCP网络拥塞控制方法,该方法可以根据网络状态自适应的以不同速率增加或者减小拥塞窗口大小,减少了基于传统算法出现断崖式变化的概率。

为了实现以上目的,本发明采用以下技术方案:

本发明专利是基于拥塞窗口变化率与RTT变化率的比值变化来判断当前网络数据量是否达到饱和状态。当TCP连接建立之初,拥塞窗口较小,进入到网络中的流量远小于网络的最大传输能力,数据包可以很快得到传输。随着拥塞窗口的增加,当进入到网络中的流量小于网络的传输能力的时候,RTT变化非常小,远小于拥塞窗口的增长速率。当拥塞窗口增加到链路饱和的时候,RTT的变化速率会与拥塞窗口的增长速率相同。此时,若在继续增加流入网络中的流量到一定值后,RTT的变化速率会急剧增加,远大于拥塞窗口的增长速率,这时候即发生严重网络拥塞。此方案就是根据在网络中流量达到饱和时,拥塞窗口增长速率与RTT变化速率相等提出的。逻辑梳理如下:

步骤1:在慢启动阶段cwnd以指数函数形式增长,即每收到一个ACK就将拥塞窗口增加1,假设现在拥塞窗口有K个SMSS(最大段大小),则慢启动阶段拥塞窗口的变化速率为1/K,随时观察拥塞窗口的变化速率与RTT的变化速率。

步骤2:当拥塞窗口的增长速率与RTT的增长速率相等时,即认为网络已经达到了它的最大吞吐量已经饱和了,此时记录RTT值为RTTk,进入到拥塞避免阶段。

步骤3:随时观察RTT值的变化,当RTT∈[RTTk-α,RTTk+β]时,网络性能没有大的变化,保持拥塞窗口不变;当RTT的值超过了RTTk+β时,网络性能变差,此时就应该减小拥塞窗口以减少进入网络中的数据;当RTT的值变小到RTTk-α以下时,我们就认为网络性能变好,此时应该探测更大的窗口以充分利用网络带宽。

步骤1包括如下步骤:

步骤1.1:TCP建立之初进入慢启动阶段,每收到一个ACK即将拥塞窗口加1,此时拥塞窗口变化速率为1/K(K为当前拥塞窗口大小)

步骤1.2:记录上一次往返时间RTTk-1以及本次往返时间RTTk,并做计算

Figure BDA0002471489540000041

其中,dRTT表示第K个报文的往返时间相对于第K-1个报文的往返时间变化率;

步骤1.3:记录上一次拥塞窗口cwndk-1以及本次拥塞窗口cwndk,并做计算

Figure BDA0002471489540000042

其中,dcwnd表示第K个报文拥塞窗口相对于第K-1个报文拥塞窗口的变化率;

步骤1.4:计算γ=dcwnd/dRTT

其中,γ表示拥塞窗口变化率与往返时间变化率的比值,用来判断网络中所传输的数据是否已经达到饱和。

步骤2包括如下步骤:

步骤2.1:随时观察γ值的变化,当γ∈[1-ε,1+ε]时,网络达到饱和,记录此时的RTTk,进入拥塞避免阶段

步骤3包括如下步骤:

拥塞避免阶段观察RTT变化:

步骤3.1:当RTT∈[RTTk-α,RTTk+β]时,我们认为网络性能没有发生变化,cwnd保持不变;

步骤3.2:当RTT<RTTk-α时,我们认为网络性能变好,动态的进入线性增加阶段,尝试更大窗口;

线性增加阶段即cwnd线性增加至γ∈[1-ε,1+ε],此时的拥塞窗口变化率与往返时间变化率相等,网络进入饱和状态,其中的ε为γ可容忍的小变化范围,记录这一时刻的RTTk,进入拥塞避免阶段;

步骤3.3:当RTT>RTTk+β时,我们认为网络即将要发生拥塞,进入指数减小阶段,避免发生拥塞超时;

指数减小阶段即cwnd以指数形式减小至γ∈[1-ε,1+ε],记录此时的RTTk,进入拥塞避免阶段。

本发明实施的技术方案带来的有益效果至少包括:

1、现有技术提供的方法在拥塞避免阶段不能根据网络性能动态改变拥塞窗口,而是一直线性的增加拥塞窗口直至出现丢包。在拥塞避免阶段,拥塞窗口可以根据网络状态的变化自适应的调整大小。

2、现有技术提供的方法在慢启动阶段预估出的慢动阈值可能会与实际的网络性能有较大差距,不能充分利用链路带宽。而本发明在慢启动阶段不需要预先设置慢启动阈值,进入饱和状态后自动进入拥塞避免阶段。

附图说明

为了更清楚地说明本发明中的技术方案,下面将对本发明中所需要使用的附图进行简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,可以根据这些附图获得其它附图。

图1是本发明基于拥塞窗口与RTT变化率的拥塞控制流程图。

具体实施方式

为了使本发明的目的、技术方案和优点更加清楚,下面将结合说明书附图对本发明的实施方式做进一步地详细叙述。

图1是本发明基于拥塞窗口与RTT变化率的拥塞控制流程图,本发明专利是基于拥塞窗口变化率与RTT变化率的比值变化来判断当前网络数据量是否达到饱和状态。当TCP连接建立之初,拥塞窗口较小,进入到网络中的流量远小于网络的最大传输能力,数据包可以很快得到传输。随着拥塞窗口的增加,当进入到网络中的流量小于网络的传输能力的时候,RTT变化非常小,远小于拥塞窗口的增长速率。当拥塞窗口增加到链路饱和的时候,RTT的变化速率会与拥塞窗口的增长速率相同。此时,若在继续增加流入网络中的流量到一定值后,RTT的变化速率会急剧增加,远大于拥塞窗口的增长速率,这时候即发生严重网络拥塞。此方案就是根据在网络中流量达到饱和时,拥塞窗口增长速率与RTT变化速率相等提出的。逻辑梳理如下:

步骤1:在慢启动阶段cwnd以指数函数形式增长,即每收到一个ACK就将拥塞窗口增加1,假设现在拥塞窗口有K个SMSS(最大段大小),则慢启动阶段拥塞窗口的变化速率为1/K,随时观察拥塞窗口的变化速率与RTT的变化速率。

步骤2:当拥塞窗口的增长速率与RTT的增长速率相等时,即认为网络已经达到了它的最大吞吐量已经饱和了,此时记录RTT值为RTTk,进入到拥塞避免阶段。

步骤3:随时观察RTT值的变化,当RTT∈[RTTk-α,RTTk+β]时,网络性能没有大的变化,保持拥塞窗口不变;当RTT的值超过了RTTk+β时,网络性能变差,此时就应该减小拥塞窗口以减少进入网络中的数据;当RTT的值变小到RTTk-α以下时,我们就认为网络性能变好,此时应该探测更大的窗口以充分利用网络带宽。

步骤1包括如下步骤:

步骤1.1:TCP建立之初进入慢启动阶段,每收到一个ACK即将拥塞窗口加1,此时拥塞窗口变化速率为1/K(K为当前拥塞窗口大小)

步骤1.2:记录上一次往返时间RTTk-1以及本次往返时间RTTk,并做计算

步骤1.3:记录上一次拥塞窗口cwndk-1以及本次拥塞窗口cwndk,并做计算

步骤1.4:计算γ=dcwnd/dRTT

步骤2包括如下步骤:

步骤2.1:随时观察γ值的变化,当γ∈[1-ε,1+ε]时,网络达到饱和,记录此时的RTTk,进入拥塞避免阶段

步骤3包括如下步骤:

拥塞避免阶段观察RTT变化:

步骤3.1:当RTT∈[RTTk-α,RTTk+β]时,我们认为网络性能没有发生变化,cwnd保持不变;

步骤3.2:当RTT<RTTk-α时,我们认为网络性能变好,动态的进入线性增加阶段,尝试更大窗口;

线性增加阶段即cwnd线性增加至γ∈[1-ε,1+ε],记录此时的RTTk,进入拥塞避免阶段;

步骤3.3:当RTT>RTTk+β时,我们认为网络即将要发生拥塞,进入指数减小阶段,避免发生拥塞超时;

指数减小阶段即cwnd以指数形式减小至γ∈[1-ε,1+ε],记录此时的RTTk,进入拥塞避免阶段。

本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。

上述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

9页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:对时间敏感网络的调度及流量整形机制进行形式化分析方法

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!