基于被动侦听与数据帧调度的拥塞控制方法

2018-08-01 08:06夏洁李付勇姜胜明
现代计算机 2018年19期
关键词:吞吐量信道阈值

夏洁,李付勇,姜胜明

(上海海事大学信息工程学院,上海 201306)

0 引言

传统TCP拥塞控制是因特网中一种端到端的拥塞控制方法[1],其中源节点通过收到的ACK分组来了解网络的拥塞状况,自适应地调节拥塞窗口,从而实现拥塞控制。多跳无线网络是一种具有无固定基础设施、数据多跳传输等特点的无线网络[2]。多跳无线网络中信道质量的不稳定性、无线信道的竞争性、节点的移动性和能供的波动性等因素常常造成对网络的拥塞状况做出误判,并错误地触发了拥塞控制机制来降低发送窗口,从而造成网络性能的下降。在这种情况下,发送节点无法及时或者正确获取拥塞状况,所以传统的TCP不适用于多跳无线网络的拥塞控制[3]。

针对上述问题,提出了一种新的协议Semi-TCP协议[4]。Semi-TCP重新分配了传统TCP的功能,在运输层只保留端到端数据传输的可靠性控制,即丢包重传。而将拥塞控制功能下放到数据链路层,可由媒体访问控制协议(Media Access Control,MAC)层具体实现逐跳拥塞控制[5],发送节点能够及时或者正确获取拥塞状况,提高了TCP在无线多跳网络中的性能。所以MAC层的拥塞控制技术是Semi-TCP的关键技术。目前研究人员已经提出了一些应用于Semi-TCP拥塞控制的方法,这些方法在一定程度上提高了网络性能,但是其对MAC协议的修改,增加了MAC层的复杂度,降低了Semi-TCP的适用性。且发送节点在竞争信道时或之后才能做出拥塞控制,造成了信道资源的浪费。

因此,本文提出了一种用于Semi-TCP的基于被动侦听与数据帧调度的拥塞控制方法。本算法在不改变原有的MAC协议的情况下,使得未配置Semi-TCP功能的节点能和已配置的节点兼容,提高了Semi-TCP的适用性,更快速地掌握网络的拥塞情况,减少了信道资源的浪费。

1 算法的设计与实现

本文对活跃度的定义为侦听到的节点在单位时间内发送数据的能力大小。可以理解为:对于具有相同缓存大小的节点,固定时间内发送的数据帧越多,即节点活跃度越高,说明其处理缓存中数据帧的能力越大,其释放自身拥塞的能力越大,进而可以认为其发生拥塞的可能性越小,以此作为量化拥塞的依据。

1.1 算法中拥塞判断的方法

当侦听节点侦听到周围节点发送的数据帧时,使用基于被动侦听的方法来进行拥塞状况判断。以发送节点A为例,节点A正常发送数据帧的同时,也被动侦听周围节点发送的数据帧,解析这些数据帧,得到这些数据帧的发送节点地址,统计这些发送节点的活跃度来量化节点的拥塞状态,具体步骤如下[6]:

(1)节点A正常发送数据帧的同时侦听周围节点发送的数据帧,解析这些数据帧,得到发送这些数据帧的节点的地址,在固定时间Ts内,每解析出相同发送节点如节点B的数据帧,NB(A)加1,NB(A)指的是Ts时间内节点A侦听到节点B发送数据帧的个数,其初始值为0,一般场景下,Ts取25ms;

(2)发送节点A统计最近m个Ts时间内,节点A侦听到节点B发送数据帧的个数分别为{NB[1],...,NB[m]},,并计算其平均值N^B(A),其中NB[1]指最近一次完整Ts时间内统计的值,这里将m定义为统计窗口,只保留最新的m个NB(A)进行计算,一般场景下,m取10;

(3)节点A计算最近一个Ts时间内,侦听到的周围节点发送数据帧次数的均值为N^au(A)=(NB[1]+NC[1]+…)/n,最近一次Ts时间内节点A正确解析出的数据帧,这些数据帧的发送节点数目为n;

(4)考虑到节点的拥塞状态由两个因素决定,一是网络状态的连续性,因而给出了节点相对于自身历史的活跃度;二是其他节点处理拥塞的能力,因而给出了节点当前相对于其他节点的活跃度。节点B相对于自身历史的活跃程度ηhB(A)如式(1)所示:

节点B相对于其他节点的活跃程度ηrB(A)如式(2)所示:

(5)对上述节点B相对于自身历史的活跃程度和相对于其他节点的活跃程度两种活跃度进行归一化,则节点A估计的节点B的拥塞量化值θB(A)如式(3)所示:

若θB>1,则认为节点 B处于非拥塞状态,若θB∈(0.5,1),则认为节点 B 处于半拥塞状态,若θB∈(0,0.5),则认为节点B处于拥塞状态。

1.2 算法中拥塞控制的方法

现有的基于RTS/CTS的Semi-TCP拥塞控制算法依赖于发送节点接收CTS/nCTS,来获取接收节点的拥塞状态,并做出拥塞控制。基于确认帧(ACK)的Semi-TCP拥塞控制算法依赖于发送节点接收ACK/ACKC,来获取接收节点的拥塞状态,并做出拥塞控制。这两种算法都在发送节点竞争信道之后进行拥塞控制的,若当前数据帧的接收节点已经处于拥塞状态,这就降低了信道竞争的效率,造成资源的浪费。

本文的算法采用了一种基于数据帧调度的拥塞控制方法,节点可以在数据帧竞争信道之前及时做出拥塞控制,该方法中发送节点根据以下步骤对数据帧进行调度管理[6]:

(1)当前节点A先判断自身的拥塞状态,方式如下:若当前缓存内的数据帧个数即队列长度N小于节点缓存的拥塞阈值Th,则节点A判定自身处于非拥塞状态,正常发送数据帧;反之,节点A判定自身处于拥塞状态,执行下一步;

(2)若当前发送节点A已经拥塞,则判断当前待发送的数据帧的接收节点B的拥塞状态。若节点B处于非拥塞状态,则节点A直接发送数据帧;若节点B处于半拥塞状态,则节点A退避time backoff时间再发送,其中time backoff为发送一次数据帧的时间;若节点B处于拥塞状态,则节点A取消此次信道竞争,执行下一步骤;

(3)发送节点检查此数据帧的拥塞计数,拥塞计数是指每当数据帧竞争信道时其接收节点处于拥塞状态的次数;

(4)若拥塞计数小于节点预设的拥塞阈值th_cong,则将此数据帧移至队列中的第pos的位置排队等待,节点拥塞计数加1,并且令队列中下一个数据帧开始竞争信道。

(5)若拥塞计数大于或等于节点预设的拥塞阈值th_cong,则节点A将此数据帧返回上层,以告知上层其下的MAC层已经处于拥塞状态[7]。

2 实验结果与分析

本节将具体介绍基于被动侦听与数据帧调度的拥塞控制方法在EXata仿真平台上的实现与测试,重点分析了在不同场景中,拥塞控制方法的性能。同时与现有的两种方法(基于RTS/CTS的Semi-TCP拥塞控制算法[8]与基于确认帧(ACK)的Semi-TCP拥塞控制算法[9])对比[10]。

2.1 仿真参数

吞吐量和时延是网络性能的重要评判参数,在对Semi-TCP进行性能测试时,也使用这两个参数作为主要的评判标准。其中平均吞吐量为单位时间内,目的节点收到的源节点发送的数据包的总字节数。通过设置不同参数,不同场景中分析其对拥塞控制方法的性能的影响,选择了合适的参数。如表1所示在之后所述的多个场景中,以下场景参数固定,不再变动。

表1 固定场景参数

2.2 对比测试

下面将采用上述参数值进行仿真,与已有的基于RTS/CTS的Semi-TCP拥塞控制算法和基于确认帧(ACK)的Semi-TCP拥塞控制算法的仿真结果进行对比。为了方便起见,将上述两种算法分别称为Semi-TCP-RTSC/CTSC、Semi-TCP-ACKC,本文方法称为Semi-TCP-LP。

(1)静态场景测试

现将本文的Semi-TCP-LP算法与已有的Semi-TCP-RTSC/CTSC、Semi-TCP-ACKC算法在如图1所示的静态场景里进行仿真。在图1的静态场景中,设置由节点1到节点2,节点6到节点10,节点8到节点9的FTP应用,这三条数据流通过节点4中继,增加了节点4发生拥塞的频率。同时调整节点物理层发送功率,增加每个节点的发送范围,保证覆盖多个节点,从而增加信号被侦听的次数。

因为上述三种方法都依赖拥塞阈值作为拥塞判断的标准,因此将拥塞阈值作为横轴,将平均吞吐量作为竖轴,对多个数据流进行多次仿真比较,结果如图2所示。

图1 静态路拓扑场景

图2 平均吞吐量随拥塞阈值的变化

由图2可以看出,采用已有的两种Semi-TCPRTSC/CTSC、Semi-TCP-ACKC算法时,平均吞吐量随着拥塞阈值的增大而增大。而采用Semi-TCP-LP算法时平均吞吐量在取不同拥塞阈值时没有呈现规律的变化,且它的吞吐量基本低于已有的两种算法。这是因为静态场景中链路相对稳定,Semi-TCP-LP拥塞控制功能并不明显,尤其对于某些能及时恢复成非拥塞的节点仍然进行调度,而错失了合适的发送时机,一定程度上造成了吞吐量的下降。

(2)动态场景测试

下面将Semi-TCP-LP算法与已有的Semi-TCPRTSC/CTSC、Semi-TCP-ACKC拥塞控制算法在如图3所示的动态场景里进行仿真结果对比。动态场景中,不仅扩大了节点的通信范围,增加侦听的数据帧的多样性,而且赋予了节点随机移动性,增加了路由的不确定性,使得场景与移动自组织网络更加相似,其中红旗表示节点的移动轨迹。且仿真时间设为30s,节点3和节点5按一定速率移动。发送,从而造成吞吐量的下降。而当拥塞阈值较大时,缓存较慢达到拥塞阈值,需要节点进行调度的机会较少,对吞吐量的影响降低了。

图3 动态链路拓扑场景

仍然将拥塞阈值作为横坐标,对多个数据流统计了其平均吞吐量进行比较,结果如图4所示。

图4 平均吞吐量随拥塞阈值的变化

图5 平均吞吐量随拥塞阈值的变化

由图4可以看出,当拥塞阈值小于50时,采用本文的Semi-TCP-LP算法时的性能比Semi-TCP-RTSC/CTSC算法的性能更好。但没有Semi-TCP-ACKC算法好。当拥塞阈值大于50时,采用Semi-TCP-LP算法时性能的优势比较明显。

为了进一步讨论该算法在移动自组织网络中的性能,将增大节点3和节点5的移动速率,分析平均吞吐量与拥塞阈值的关系,结果如图5所示。

由图5可以看出,由于增加了节点的移动速率,进一步恶化了网络状况,上述三种算法的性能都有所下降。但是Semi-TCP-LP算法的平均吞吐量随着拥塞阈值的增大逐渐优于其他两种算法。

鉴于拥塞阈值决定了拥塞的判断,当拥塞阈值较小时,缓存较快达到拥塞阈值,超过阈值时开始进行拥塞控制,对于Semi-TCP-ACKC和Semi-TCP-RTSC/CTSC算法而言,若拥塞规模较小,可及时利用接收节点回复的信息恢复发包。但是Semi-TCP-LP算法将已经判断为拥塞的接收节点的数据包取消竞争并滞后

(3)混合场景测试

测试Semi-TCP-LP算法与未配置的Semi-TCP的节点兼容运行,来提高网络的性能。还是用图3中的动态场景,配置两个对照组,一组节点全部使用TCP Lite,另一组中只将节点3和节点4设为TCP Lite,其他节点使用Semi-TCP-LP。TCP Lite与Semi-TCP-LP的拥塞控制机制不同。对多个数据流统计了其平均吞吐量进行比较,结果如图6所示。

图6 TCP Lite与混合TCP的平均吞吐量对比图

由图6可以看出,采用Semi-TCP-LP的混合场景比只使用TCP Lite的平均吞吐量大幅提高。因为信道质量不足引起的丢包被TCP Lite错判为拥塞,因而错误的触发了拥塞机制,降低了发送窗口,限制了网络性能。而Semi-TCP-LP通过侦听与探测估计节点的拥塞程度来进行拥塞控制,减缓了拥塞的发生,提高了网络的平均吞吐量。

3 结语

本文提出了一种用于Semi-TCP的基于被动侦听与数据帧调度的拥塞控制方法。并在EXata仿真平台对其进行了仿真分析。在静态与动态场景中,对比已有的Semi-TCP-ACKC和Semi-TCP-RTSC/CTSC算法,发现当拥塞阈值较大时,本文提出的方法有一定的优势。同时在未配置Semi-TCP节点通信的混合场景中,吞吐量有较大的提高。本算法在不改变原有的MAC协议的情况下,使得未配置Semi-TCP功能的节点能和已配置的节点兼容,提高了Semi-TCP的适用性,更快速地掌握网络的拥塞情况,及时进行拥塞控制,减少了信道资源的浪费。

猜你喜欢
吞吐量信道阈值
土石坝坝体失稳破坏降水阈值的确定方法
基于小波变换阈值去噪算法的改进
信号/数据处理数字信道接收机中同时双信道选择与处理方法
采用红细胞沉降率和C-反应蛋白作为假体周围感染的阈值
一种高效多级信道化数字接收机的设计与实现
一种无人机数据链信道选择和功率控制方法
2017年3月长三角地区主要港口吞吐量
2016年10月长三角地区主要港口吞吐量
2016年11月长三角地区主要港口吞吐量
基于导频的OFDM信道估计技术