,当每100个数据包中如果发生丢包的总数超过或者等于15个时,认定为网络发生拥塞,处于拥塞状态的丢包为拥塞丢包。在不满足上述的拥塞的前提下,每10个数据包中如果有超过或者等于3个数据包丢包时,认定为网络发生轻微拥塞。不满足上述拥塞和轻微拥塞情况的丢包即为非拥塞丢包。但本发明的保护范围不限于本实施例列举的界定方式,凡是根据丢包率界定丢包性质的方法都包括在本发明的包括范围内。
[0029]所谓拥塞丢包是因为发送数据包量超过了网络链路能够缓存的量,而目前很多路由设备采取的都是尾部丢包策略,所以后续发送的数据包会被路由设备直接丢弃,带有明显的连续性。而非拥塞丢包是由于信号波动或者干扰引起的,带有明显的随机性。在无线应用中容易因为信号或者干扰的原因产生一些非拥塞丢包,如果不能很好的区分这些非拥塞丢包,会使协议经常性进入拥塞控制阶段,导致不能有效利用带宽。而本发明对不同的丢包情况均给予考虑,避免了使协议经常性进入拥塞控制阶段的问题,可以有效地利用带宽。
[0030]S12,若为非拥塞丢包,则继续执行TCP慢启动过程。即当确定为非拥塞丢包时,拥塞窗口 CWnd照常增加1个MSS大小,TCP协议的慢启动过程继续进行。
[0031]TCP协议的慢启动过程为:当新建连接时,拥塞窗口 CWnd初始化为1个最大报文段(Maxitum Segment Size, MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,CWnd就增加1个MSS大小。这样CWnd的值就随着网络往返时间(RoundTrip Time, RTT)呈指数级增长,直到产生第一个丢包时退出慢启动。
[0032]在有线网络环境中基本上不会发生非拥塞丢包,所以认为所有的丢包都是由于网络拥塞引起的,所以上述方法在有线网络环境中能够适用。但在无线网络中,有一部分丢包是因为非拥塞引起的,也就是说有可能在还没有达到最大拥塞窗口时就提前退出了慢启动阶段,造成带宽估计不准确。通过步骤S12,无论在有线和无线网络环境中都能准确的得到当前网络的拥塞窗口阀值,并通过该阀值准确计算出当前网络带宽,避免了无线网络环境下,因为非拥塞丢包而出现提早退出慢启动阶段,导致网络带宽不能充分利用的问题。
[0033]S13,若为拥塞丢包,则退出TCP慢启动过程,并记录当前发送窗口值111_dCWndSize,然后进入拥塞避免阶段。
[0034]进一步,所述控制网络拥塞的方法还包括在拥塞避免阶段实行的拥塞控制策略,如图2所示,所述拥塞控制策略包括:
[0035]S21,将最大拥塞窗口值m_issthresh设置为当前发送窗口值m_dCWndSize的90% ;
[0036]S22,利用公式 m_iBestSsthresh = m_issthresh-2Xm_dCffndSize/(10+m_dCffndSize)计算获得最佳拥塞窗口值m_iBestSsthresh ;
[0037]S23,控制当前发送窗口值在所述最大拥塞窗口值和所述最佳拥塞窗口值之间波动,具体如图3所示,包括:
[0038]S31,判断当前发送窗口值是否小于所述最佳拥塞窗口值减2,若是则将当前发送窗口值设置为所述最佳拥塞窗口值减2。本步骤的目的是为了防止所述当前发送窗口值超过区间下限,所以将当前发送窗口值设置为区间下限。本实施例提供一种步骤S31的具体实现方式,但本发明的保护范围不限于本实施例列举的具体实现方式,凡是根据步骤S31的原理实现的方式都包括在本发明的保护范围内。
[0039]例如:if(m_dCWndSize〈m_iBestSsthresh_2),则 m_dCWndSize = m_iBestSsthresh-2。
[0040]S32,否则继续判断当前发送窗口值是否大于所述最大拥塞窗口值,若是则下调当前发送窗口值。本实施例提供一种步骤S32的具体实现方式,但本发明的保护范围不限于本实施例列举的具体实现方式,凡是根据步骤S32的原理实现的方式都包括在本发明的保护范围内。
[0041]例如:elseif(m_dCWndSize>m_issthresh),则 m_dCWndSize_ = 0.1。
[0042]S33,否则继续判断当前发送窗口值是否小于或等于最大拥塞窗口值且大于或等于最佳拥塞窗口值,并且当前发送窗口值呈增加趋势,若是则增加当前发送窗口值。本实施例提供一种步骤S33的具体实现方式,但本发明的保护范围不限于本实施例列举的具体实现方式,凡是根据步骤S33的原理实现的方式都包括在本发明的保护范围内。
[0043]例如:elseif(m_dCWndSize〈 = m_issthresh+l&&m_bNextStep == ADD),
[0044]贝ljm_dCffndSize+ = m_dCffndSize/ (1000.0+m_dCffndSize)。
[0045]S34,否则继续判断当前发送窗口值是否小于或等于最大拥塞窗口值且大于或等于最佳拥塞窗口值,并且当前发送窗口值呈减小趋势,若是则减小当前发送窗口值。本实施例提供一种步骤S34的具体实现方式,但本发明的保护范围不限于本实施例列举的具体实现方式,凡是根据步骤S34的原理实现的方式都包括在本发明的保护范围内。
[0046]例如:elseif(m_dCWndSize> = m_iBestSsthresh&&m_bNextStep == INC),
[0047]贝ljm_dCffndSize- = m_dCffndSize/ (1000.0+m_dCffndSize)。
[0048]S35,否则继续判断当前发送窗口值是否大于所述最大拥塞窗口值且呈增长趋势,若是则将当前发送窗口值的趋势调整为减小趋势。本实施例提供一种步骤S35的具体实现方式,但本发明的保护范围不限于本实施例列举的具体实现方式,凡是根据步骤S35的原理实现的方式都包括在本发明的保护范围内。
[0049]例如:if(m_dCWndSize>m_issthresh+l&&m_bNextStep= = ADD),
[0050]贝Um_bNextStep == INC。
[0051]S36,否则继续判断当前发送窗口值是否小于所述最佳拥塞窗口值且呈减小趋势,若是则将当前发送窗口值的趋势调整为增加趋势,否则结束。本实施例提供一种步骤S36的具体实现方式,但本发明的保护范围不限于本实施例列举的具体实现方式,凡是根据步骤S36的原理实现的方式都包括在本发明的保护范围内。
[0052]例如:elseif(m_dCWndSize〈m_iBestSsthresh&&m_bNextStep == INC),
[0053]贝ljm_bNextStep == ADD。
[0054]本实施例中,当发送窗口 m_dCWndSize小于最佳拥塞窗口值m_iBestSsthresh时开始往上增加窗口,当发送窗口 m_dCWndSize达到最大拥塞窗口值m_issthresh时又开始往下减少窗口。利用这种波动方式让网络能在一个区间内达到一种动态平衡。
[0055]进一步,所述控制网络拥塞的方法还包括动态调整最大拥塞窗口值方法,如图4所示,所述动态调整最大拥塞窗口值方法包括:
[0056]S41,根据网络数据包的丢包率判断当前网络数据包的丢包性质是轻微拥塞丢包还是非拥塞丢包;
[0057]S42,若是轻微拥塞丢包,则利用公式
[0058]m_issthresh = m_issthresh_ (lossNumXm_issthresh) / (100+m_issthresh)
[0059]下调所述最大拥塞窗口值,其中lossNum为所述网络数据包的丢包数;
[0060]S43,若是非拥塞丢包,贝U利用公式 m_issthresh = m_issthresh+10/m_issthresh上调所述最大拥塞窗口值。
[0061]利用所述动态调整最大拥塞窗口值方法能够保证最大拥塞窗口能够根据实际的网络情况进行智能调节,不断摆动到一个动态的平衡状态。
[0062]观察实验发现,达到网络最大吞吐量的拥塞窗口值不是一个点值,而是一个区间值,例如:对于2M带宽的网络,使用50到55的发送窗口值都能达到2M带宽的最大吞吐量,区别在于50的时候可能没有丢包,而55的时候可能会有一定的丢包。所述动态调整最大拥塞窗口值方法就是基于上述这个前提,让网络在处于平衡态时保持一定的丢包率,但是这个丢包率不会导致网络出现拥塞,丢包部分能通过快速重传解决,可称之为一种良性的丢包率。网