APP下载

基于前向纠错的自适应网络传输机制

2021-03-18*

计算机应用 2021年3期
关键词:传输速率时延比例

*

(1.江苏方天电力技术有限公司,南京 211102;2.南京大学计算机科学与技术系,南京 210023;3.南京大学金陵学院信息科学与工程学院,南京 210089)

0 引言

传输控制协议(Transmission Control Protocol,TCP)是可靠的、面向连接的拥塞控制协议,其广泛应用于各类网络,包括有线网络、无线网络和容器集群网[1]等。TCP 是一种传输层协议,可确保数据段的有序交付,从而补充了网络层的Internet 协议。TCP 主要是为有线网络设计的,当应用于无线场景时,它会面临性能下降的问题。因此,了解无线网络中的TCP行为以及用于增强TCP性能的方法是一项重大挑战[2]。

无线网络中,网络传输发生数据丢包的概率会因网络不稳定而变大,如移动设备与无线路由器之间有障碍物或两者距离较远时。文献[3-4]的研究表明,通过无线网络进行高速数据传输,会因为各种原因产生1%~10%的丢包。TCP 协议为确保数据传输的可靠性,接收端检测到丢包后会要求发送端重传报文,这将大大增加数据传输时延,并占用额外带宽重传数据,影响到后续数据段的传输。因此,减少丢包重传对于提升网络传输速率具有重要意义。

前向纠错[5]是解决丢包重传问题的有效方法,其核心是通过冗余数据段,降低重传的概率。通过前向纠错机制,接收端即使发现了丢包,仍然可以基于接收到的冗余数据段,恢复丢失的信息,避免报文重传。基于前向纠错的TCP 传输机制工作于TCP 层与IP 层之间,报文在TCP 层根据最大报文长度(Maximum Segment Size,MSS)形成待发送的数据段后,通过前向纠错编码生成一个或多个冗余数据段,并可通过设定纠错编码的参数调节冗余数据段的比例。冗余段与有效数据段的比值越大,丢包恢复能力越强,但传输相同数量有效数据需要的额外带宽也越多;反之,则丢包恢复能力越低,额外传输代价也相对较低。

冗余段比例与数据段完成传输的时间关系比较复杂,不是简单的线性关系。如何确定冗余段比例是设计前向纠错机制的难点问题。对于一组连续的数据段而言,丢失的数据段越多,重传花费的时间就越长,并影响后续的连续数据段传输。提高冗余段比例能够减少丢包的概率,减少重传,进而减少数据段的传输时间。但是由于可用带宽是有限的,冗余段比例增加会使得冗余段占用的带宽增加,有效数据段可用的带宽减少,又会使得数据段完成传输的时间变长。因此为了最大限度地对传输时间进行优化,需要在增强冗余恢复以及减少冗余段之间找到最佳平衡点,即找到最优冗余段比例。

针对上述问题,目前已有研究工作针对不同的应用场景研究确定前向纠错的冗余比例[6-9]。文献[6-7]关注应用的最小传输速率,即在达到最小速率之后使用较低的冗余段比例以减少冗余数据占用的额外带宽,提升有效数据的传输效率。文献[8-9]则针对网页访问等时延敏感的应用,提出以较高的冗余段比例保证最少的重传。这些研究重点关注提高冗余段比例来降低丢包,而忽略了冗余段本身占用带宽带来的影响。在连续数据段的数据量远小于传输带宽时,提高冗余段可有效提升传输性能。但当连续数据段的数据量较大时,如文件传输协议(File Transfer Protocol,FTP)下载或多媒体应用,单纯提高冗余数据比例会影响传输速率。因此,现有方法难以适应多变的网络环境和应用类型。

对此,本文研究提出了一种动态的自适应调整的前向纠错机制,可根据网络状况以及发送端发送数据的速率调整冗余段比例以最小化连续数据段传输的时间。具体而言,首次对求解TCP 传输的冗余段比例问题进行建模,在已知一组数据段长度的情况下,以数据段完成传输的时间为优化目标,以降低前向纠错后的丢包率为约束条件。在这基础上,设计一种两段式前向纠错机制,先通过梯度下降法高效求出最优冗余段比例,再根据网络状况动态更新冗余段比例,以优化传输性能。为了最小化参数确定过程引入的计算时延,利用相邻多组TCP 段面临的网络状况相似的特点,通过将周期性建模求解与基于接收端反馈调整的自适应参数确定算法相结合,在降低优化问题的求解频率同时保证冗余段比例的最优。本文主要工作可概括如下:

1)本文首次对前向纠错机制设计中求解TCP传输的最优冗余段比例问题进行建模,该模型精确刻画了前向纠错不同的冗余段比例对网络传输带来的影响,能够在保证连接传输稳定的情况下最小化数据段传输的时间。

2)本文提出了一种两段式的基于前向纠错的自适应传输机制(Adaptive transmission mechanism based on Forward Error Correction,AdaptiveFEC)。该机制首先通过周期性求解优化问题,精确确定传输过程中的最优冗余段比例,并能利用反馈机制根据周期之间的网络状况变化进行冗余段比例的调整,使TCP连接上的数据传输的成功率维持在较高水平。

3)实验结果表明,与静态的前向纠错机制相比,本文提出的自适应网络传输机制能大幅提升传输速率,仿真实验中平均提升了42%,真实通信实验中将传输速率至少提升至原先的2倍。

1 相关工作

在不稳定的网络环境中,丢包是无法避免的。前向纠错机制是解决丢包重传问题的有效方法。当前,已有很多研究工作针对不同的应用场景设计不同的前向纠错机制,以提升网络传输性能。根据不同的应用类型,现有研究工作大致可以分为两大类:时延敏感类应用研究和时延不敏感类应用研究。

1)时延敏感类应用研究。时延敏感类应用研究如实时视频对传输的时延要求比较高,这类应用在应用层将数据帧划分为多个应用层数据包并对数据包进行冗余,之后将数据包发往传输层处理。此时,帧的失真率以及数据传输速率对应用体验影响较大。如何设置应用层冗余数据包比例以保证关键帧的最小失真,同时能保证最小传输速率是实时视频应用的关键问题。文献[10-11]使用扩展窗口的前向纠错编码对视频流传输的冗余比进行实时调整;文献[12]基于决策树为不同网络状况下的视频流传输调整冗余比;文献[13]利用基于低密度奇偶检查(Low-Density Parity-Check,LDPC)码的前向纠错编码为视频监控系统传输提供前向纠错。以上文献利用网络状况进行冗余比例调整,但是没有考虑到数据段的特征,导致当应用于一般应用时效果较差。文献[14]根据360 度视频流中视场角(Field Of View,FOV)不同调整不同帧的冗余比;文献[15-17]利用当前接收端对帧接收率的反馈为下一时刻传输调整冗余比;文献[18]通过应用层的速率控制以及应用层数据包冗余减小视频失真率;文献[19]根据不同应用的服务质量(Quality of Service,QoS)需求为传输设定冗余比。以上文献利用了视频帧的特有信息,导致这些工作不能应用于一般应用。

2)时延不敏感类应用研究。时延不敏感类应用对传输时延不敏感,如文档传输、网络聊天等。这类应用多数是基于用户数据报协议(User Datagram Protocol,UDP),而UDP 数据包的成功传输是可以消除因重传带来的高时延,进而提高数据传输的效率。此时传输时延以及吞吐量对冗余比的影响较大。文献[20]中将网络环境变化建模成马尔可夫过程来调整受限制的应用协议(Constrained Application Protocol,CoAP)协议传输过程的冗余比,该研究针对低速率、低带宽环境设计算法,当应用于需要提高传输速率的场景中时优化效果较差。文献[21]将前向纠错作为扩展加入到快速UDP 网络连接(Quick UDP Internet Connection,QUIC)协议中,但并没有针对于网络状况以及连接上的数据量等因素对冗余段比例进行动态调整。

综上,现有研究工作设计的机制要么是静态的,要么多是针对特定的应用进行优化,即时延敏感类应用或者低速率情况下的时延不敏感应用,而对高速率情况下的应用如大文件传输涉及得较少。因此,亟须设计动态的自适应前向纠错机制,来有效地提升机制应用的广泛性。

2 预备知识

本章对基于前向纠错的TCP 传输过程进行描述,为下一步问题建模打下基础。

纠删码(Erasure Code)[22-23]是前向纠错技术核心技术之一,其基本思想在于通过对数据进行一定量的冗余,使得原数据发生丢失时能够通过冗余数据进行数据恢复。相较于多副本复制的方法来说,纠删码的数据冗余度更小,但是同时纠删码的编码方式也较为复杂,需要的计算量较大。纠删码主要包括三大类:阵列纠删码、里德-所罗门类纠删码[24-25]和奇偶校验纠删码[26-27],后两者更多应用于网络传输中。

为减少冗余编码时间,现有研究中多使用奇偶校验的方式进行冗余编码。由于奇偶校验编码只能产生一个冗余段,且有效数据段的数量必须为整数,使得冗余段比例的可行解集合较小,不利于获得性能较好的解。对此,本文采用里德-所罗门类纠删码,其能够对任意的有效数据段数量生成任意数量的冗余段,丢失的少于冗余段数量的任意报文段均恢复。

基于前向纠错的网络传输过程可细分为三个模块:重新划分报文段的模块、控制模块以及前向纠错模块,三个模块及传输过程示意图如图1 所示。报文形成待发送的数据段后,进入重新划分报文模块进行缓存。每过一段时间,重新划分报文模块将等待发送的数据段信息发送给控制模块,之后控制模块确定当前的最优冗余段比例,即有效数据段以及冗余数据段数量,分别发给重新划分报文模块以及前向纠错模块。重新划分报文段模块重新划分出长度相等的报文段后,将编码信息存放在头部的额外空间中,再将添加完头部的报文段封装成IP 数据包发送到接收端。接收端收到报文段后,若发生报文段丢失,则尝试利用冗余段信息进行报文段恢复,之后将原始TCP段传递给上层,若无法对丢失的报文段进行恢复,则由发送端进行重传。

控制模块中如何确定冗余段比例是前向纠错机制设计的难点所在,也是本文研究的关键问题。下一章,将对该问题进行建模,并基于此设计自适应前向纠错机制。

图1 基于前向纠错的网络传输过程Fig.1 Network transmission process based on forward error correction

3 问题建模

首先介绍建模涉及的数学符号及其表示意义。假设TCP连接上的第i时刻端到端的网络丢包率为λ,连接上端到端时延为d,可用带宽为B,发送端当前积累的未编码数据段的数量为s,这些数据段的总长度记为ltotal,从产生首个数据段到产生最后一个数据段所经过的时间为T,前向纠错的数据段以及冗余段数量分别用n和m表示,冗余段比例即为m与n的比值。在每一轮的数据传输中,重新划分报文模块将冗余前等待发送的长度为ltotal的数据平均划分为n个数据段,编码后产生m个冗余段,将共(n+m)个数据段发送至接收端,lheader为接收端所需要的前向纠错编码信息的长度,前向纠错信息被添加到所有数据段以及冗余段的头部位置,这些数据段的数据总长度为L。

冗余段比例与丢包率、端到端时延以及连续数据段的数据量有关。提高冗余段比例能够减少数据段的重传,进而减少由于重传对数据段传输时间的影响。但是提高冗余段比例会增加冗余数据量,数据传输时间也会相应增加。因此冗余段比例的改变会对连接上首次传输数据段和冗余段的时间以及重传的额外时间都造成影响。本文通过刻画首次传输需要的时间和重传的额外时间来表征冗余段比例对传输效率的影响,并以此为优化目标,寻找最佳冗余段比例,以提升数据传输效率。

首次传输的时间包括数据段在TCP协议栈中被处理的时间和数据段在链路上传输的时间。数据段在TCP协议栈中被处理的时间包括数据段等待编码的时间以及编码后进行发送的时间,因此首次传输的时间为上述三段时间的和。

如第2 章所述,重新划分将所有数据段分为相同长度,因此每个划分数据段需要发送的数据长度ltotal被平分后取整再加上头部长度,因此数据段总长度可以可表示成如下形式:

为了不在网络中引发拥塞,每个时间单位中发出的数据量应当不超过连接的可用带宽Bi,因此为了将总长度为L的数据发出,发送端数据的所需要的时间tdelay为:

首个数据段从产生到被发送端发出,经过的时延为T,由于在高速的数据传输过程中,数据段是连续到来的,可以近似认为数据是匀速产生的,即每个数据段的等待时延按照数据段到来的时间间隔均匀减小。因此发送端等待数据段的平均时间可计算为:

综上,首次传输的时间计算为ttransfer+tdelay+d。

单次重传数据段需要的额外时间包括重传信号返回的时间和重传的数据段在链路上的传输时间,即2d+tdelay。同时注意到,单次重传所需额外时间与需要重传的概率有关。假设接收端成功恢复数据段的概率为P,则单次重传数据段的额外时间可计算为(1-P) ×(2d+tdelay)。

正如第2章所述,采用的里德-所罗门类纠删码能够在丢失的数据段个数少于冗余段数量的情况下对任意丢失的数据段进行恢复,即一组数据段不需要重传的条件为接收端收到的数据段及冗余段数量大于或等于n。对于无线网络中的传输过程来说,网络中的丢包往往是由于信号强度不够导致接收端错误接收了信号或信号丢失,这样产生的多次丢包之间往往是没有关联的,因此可以将数据段的丢失看成独立的随机事件。使用随机独立实验的相关推论计算接收端成功恢复数据段的概率P如式(4)所示:

综上,数据段的传输时间D为首次传输的时间和单次重传时间之和,即:

本文目标是最小化数据段的传输时间D,寻找冗余段比例,优化问题见式(6)~(12)。条件(7)表示数据发送时,单个数据段加上头部后的大小不能超过最大传输单元(Maximum Transmission Unit,MTU)的大小,否则会在网络层被分片,增加额外的时延,这是由网络的基本属性决定的。条件(8)表示TCP 连接上发生丢包时,拥塞窗口会发生一定程度的缩小,若一组数据段成功传输的概率低,则连接上会发生较为频繁的丢包,拥塞窗口可能会在恢复原有值之前再次缩小,导致拥塞窗口无法增大,并因此限制TCP连接的传输速率,优化目标中的传输时间没有反映这种情况,因此通过条件(8)表明希望丢包率维持在较低的水平,其中M代表线路上的最大报文段长度。若有效数据段的值过大,由于划分后每个数据段的长度为总长度平分后的均值,经过重新划分报文的重新划分后每个数据段的长度可能过小,此时数据段前添加的头部所占的比重就会过大,会占用过多的额外带宽,因此两个数量有所限制,如条件(9)~(10)所示。条件(11)~(12)表明前向纠错需要确定的参数n和m均为整数,且m可以为0,m为0即表示此时不需要进行冗余。

通过对上述优化问题的最优解进行求解,便能够得到当前连接的最优冗余段比例。

4 机制设计

网络数据传输时,通常在一段时间内传输是较为稳定的,此时的最优冗余段比例大致是相同的。因此,多组数据段之间通常不需要频繁地对优化问题进行求解。降低优化问题的求解频率,能够进一步减少在数据传输过程中引入的时延。但网络不可避免地会发生网络波动,当网络状况变差时,原先的最优冗余段比例难以保证数据段的稳定传输,会导致丢包概率增大,触发拥塞窗口缩小,使得传输速率下降,此时需要针对网络状况动态调整冗余比例。

基于上述认识,本文提出了一种两段式的自适应调整传输机制,实现针对不同的网络状况动态调整冗余段比例,优化网络传输效率。该机制包含两模块:第一个模块为最优冗余段比例确定算法,用于求解最优冗余段比例。第二模块是通过基于丢包率统计的冗余段比例调整算法,用于对前向纠错的参数进行动态设置。整体的基于前向纠错的自适应传输机制结构示意图如图2 所示,最优冗余段比例确定算法按照一定时间间隔对最优化问题进行求解,为了保证这段时间里最优化算法是有效的,再通过基于反馈的调整机制对m和n进行调整。下面分别介绍两个算法。

图2 基于前向纠错的自适应网络传输机制Fig.2 Adaptive network transmission mechanism based on forward error correction

4.1 最优冗余段比例确定算法

对优化问题的目标进行观察可以发现,在每组数据段即将发送时,排队时延以及链路的时延已经确定,数据段的发送时延以及接收端成功恢复数据的概率P都是随着冗余段数量增加而递增的。因此先确定n的大小,之后计算m的大小。算法伪代码见算法1。

首先通过约束条件(7)以及约束条件(9)计算得出n。确定n之后,再对m进行求解。求解m时先对原问题中的整数条件进行放松。在m为非整数条件下概率P中的以及求和函数没有意义,因此在求和函数以及中用m替代m,得到放松后的概率函数P如式(13):

放松后的P虽然不连续,但是在每个连续区间内是可导的,在每个连续区间内P的导数如式(14):

将概率函数以及式(2)代入目标函数,由上述分析可知,此时目标函数是在个别点不可导,但是在每个连续区间内可导,可得每个m取值处的导数

但是通过对函数二次求导可以发现目标函数可能是非凸的,不能使用凸优化的相关方法进行优化,因此选择适用梯度下降的方法对目标函数进行优化,通过选择合适的学习率,梯度下降算法能够通过多轮迭代找到非凸问题的局部最优解,对应算法的第3)步。第3)步中求解得到解最优解m',此时得到的m'可能不满足原问题中对m的整数约束,需要对m'向上取整和向下取整,取使得D最小同时满足约束条件的解,作为每个n取值对应的最优解,该步对应算法的第4)步。最后取不同n对应的最优解中的最优解作为算法整体的最优解,该步对应算法的第6)步。

算法1 最优冗余段比例确定算法(Optimal Redundant Segment Ratio Determination Algorithm)。

输入:缓存队列总长度ltotal、网络丢包率λ、接收端数据恢复成功率P;

输出:数据块数量n,冗余块数量m。

1)求解约束(7),得到n的范围,将n的最小值计为nmin,n的最大值计为nmax;

2)FOR(n=nmin;n≤nmax;n++)DO

3)对原问题的整数约束条件进行放松,根据式(14)对目标函数求导,利用梯度下降的方法对原问题的目标函数进行优化,得到局部最优解m';

4)对m'向上取整以及向下取整,分别对目标函数值进行计算,取能够使目标函数取到较小值的m作为算法这一轮的最优值

5)ENDFOR

6)取每一轮的最优值中目标函数最小的结果的n和m作为算法的输出

4.2 基于丢包率统计的冗余段比例调整机制

为了应对网络情况的变化对冗余比例进行调整,首先需要对网络状况的变化进行感知,网络状况的变化主要通过丢包率的变化来表示,因此需要先对TCP连接上的丢包率进行计算。

通过利用TCP协议自带的丢包重传机制对TCP连接的丢包率进行计算。由于前向纠错是针对即将发送的TCP 数据段,接收端的TCP 协议栈收到的是尝试恢复之后的数据段。一组数据段如果能够在接收端被成功恢复,发送端的TCP 协议栈是不会对数据段进行重传的,其只会对接收端未成功恢复的部分数据段进行重传。当发生重传时,表明本轮计算时使用的丢包率低于真实丢包率,此时需要提高数据段的冗余比例。具体的丢包率计算方法见算法2。

算法需要对重传数据段进行判断,由于TCP 数据段都有数据段序号,对重传数据段的判断可以通过数据段序号进行。对于每个统计丢包率的时间间隔,记录下该时间间隔中第一个到达的数据段的序号,作为这个时间间隔中的最小序号与最大序号的初始值,根据后续数据段的序号更新该时间间隔内最大序号的值,并统计该时间间隔内的数据段总数,即算法2 第2)和3)步。显然,如果发出的数据段的序号在当前的最大序号和最小序号之间,根据TCP 数据段的编号规则可以得知当前发出的数据段是重传数据段,需要对丢失的数据段的数量进行更改,即算法2第5)步。在时间间隔结束时,发送端将时间间隔内发送的总数据段与成功传输的数据段的数量进行统计,计算得到链路的丢包率,即算法2第6)步。在高速数据传输的TCP 连接上,由于每个时间间隔内发出的数据段数量很多,通过在每轮数据段发送时调用算法2,计算得出的丢包概率与真实丢包概率相近。数据发送速率越高,调用算法2的频率就越高,即算法2得出瞬时丢包率会越高。

算法2 丢包率估计算法(Packet Loss Rate Estimation Algorithm)。

输入:当前序号区间(Smin,Smax),当前发送包的序号S,丢包数量nloss,发送包数量nsend;

输出:瞬时丢包率λ。

完成了对网络状况的估计后,再根据网络状况的变化调整冗余比例。为了能够在较小的时间粒度对网络状况作出反应,算法每过一个较小的时间间隔就根据当前的丢包概率进行冗余比例的调整。考虑到TCP在高速传输时数据到来的速度较快,一个时间间隔内每轮的数据量相差不大,因此n的最优值不需要进行改变,只需要通过改变m的值来调整纠错能力,即冗余段比例。具体的调整算法见算法3。

当网络状况变差时,需要提高数据传输的冗余比例,考虑到每一轮数据的丢包具有随机性,因此不能只根据一个时刻的丢包率上升就提高冗余比例。通过实验发现,连续三个时刻丢包率上升时,能够比较准确地反映出网络状况变差的情况,因此当连续3 个时刻丢包率都上升时增加冗余数据段的数量,即算法3 第1)步的判断。当网络状况变好时,TCP 连接是较为稳定的,且丢包率较低,此时需要降低冗余比例来提高数据传输的有效速率。但由于丢包率较低时缺少明显的可用特征,通过在长时间的稳定传输之后尝试减少冗余段比例来提高传输速率,即算法3 中第2)步的判断。算法3 会使用到算法2 的输出,考虑到发送速率越高,算法2 得出瞬时丢包率会越高,所以使用丢包率序列的长度T1来做判断,能够比较快地对网络变化做出反馈。设置T1>180是一个经验性的参数设置,通过实验验证了这一设置效果良好。当上述情况均不满足,认为当前的网络状况与之前变化不大,即维持之前的冗余段比例进行传输。

算法3 基于丢包率的冗余段比例调整算法(Packet Loss Rate-based Redundant Segment Proportional Adjustment Algorithm)。

输入:t时刻统计的连续丢包率序列(λt,λt-1,λt-2),丢包率阈值λ′,低于阈值的最大连续丢包率序列长度T1,当前冗余段数量m;

输出:下一时刻冗余段数量m'。

1)如果(λt,λt-1,λt-2)均大于λ′,且满足λt≥λt-1或者λt≥λt-2,则m'=m+1

2)如果当前时刻的丢包率低于丢包率阈值λ′,且满足T1>180,则m'=m-1

3)如果上述条件均不满足,则m'=m

4)返回m'

4.3 性能分析

假设算法1在每一轮循环里的梯度下降的迭代轮数为k,最坏情况下求得局部最优解后由于局部最优解不满足约束条件要不断调整直到mmax,因此算法在最坏情况下的总的复杂度为O(nmmaxk)。假设在每一轮数据发送时使用里德-所罗门编码进行数据的冗余编码,由于里德-所罗门编码的编码时间与数据块的数目有关,编码次数与数据块的大小有关,因此在使用某一冗余比例进行编码的时间复杂度为O((m+n) ×算法2 在每次计算过程中,只需要少量的过去信息以及固定次数的运算,因此算法的复杂度为O(1)。同理,算法3的复杂度也为O(1),使用某一冗余比例进行编码的时间复杂度同样为O((m+n) ×

由于本文降低了优化问题的求解频率,一组数据段发送时大多数情况下通过算法2与算法3来确定最优冗余段比例,两个算法的时间复杂度为O(1),因此在大部分情况下,自适应机制的时间复杂度是O((m+n) ×

5 实验与结果分析

本章通过实验来验证本文设计的自适应网络传输机制的性能。

5.1 实验设置和实验方法

实验通过两台服务器实现,服务器的硬件参数是64 GB内存,24 个Intel Xeon CPU,每个CPU 2.1 GHz。服务器的操作系统是Linux。两台服务器进行网络通信,使用网络测试工具iperf3 产生网络流量,网络状况模拟使用Linux 自带的流量控制功能模块以及防火墙实现。为了模拟无线网络中的网络能力,特将网络带宽限制不超过10 MB/s。实验数据均是100次求平均所得。

为验证本文提出的AdaptiveFEC 的性能,将在不同的情况下测试TCP 连接传输效率。首先,通过仿真实验模拟网络流量和状况的变化,来测试机制性能。再通过真实网络通信设置来测试实际效果。同时,为验证动态调整策略的优越性,将本文机制与现有的静态前向纠错机制进行比较,包括三种算法。在仿真实验中限制每个数据段的长度为512,以防止不切分数据段的前向纠错加上前向纠错信息后由于数据段长度过长而在IP层发生分段。

1)None:即不使用前向纠错的机制;

2)StaticA(n,m):即使用不切分数据段的静态前向纠错机制且冗余参数为(n,m),这种机制每n个数据段生成m个冗余数据段;

3)StaticB(n,m):使用切分数据段的静态前向纠错机制且冗余参数为(n,m),这种机制每过0.25 个往返时延(Round-Trip Time,RTT)将待发送的数据段平分为n个数据段,并生成m个冗余数据段。

5.2 仿真实验验证

实验时,首先在两端启用自适应传输机制,并在其中一端启动iperf3 服务端程序,再在另一端使用iperf3 向服务端程序进行120 s 的TCP 数据发送。数据发送时平均数据段长度设为512 B,每过120 s就对端到端的丢包概率进行调整,用以测试自适应丢包恢复机制在网络环境变差时能否保持速率稳定。在发送过程中使用Linux 的流量控制模块和防火墙对于网络状况进行模拟,每次实验记录下数据传输速率、冗余比例等数据。

首先将AdaptiveFEC 与None 比较。图3 展示的是在20 ms的网络延迟环境中,不同丢包率的情况下两种机制的平均传输速率的比较。图3 中可以看到,当网络情况较好,即丢包率较低时,TCP 连接的数据传输速率能够达到平均6 MB/s左右,没有达到10 MB/s的限制速度。主要是因为网络传输时需要传输包括TCP 以及IP 协议头部等信息,同时接收方的接收窗口大小也是有限的,这些都对TCP的传输速率造成影响。当丢包率上升时,相较None,AdaptiveFEC 能有效提升传输速率,最高能够达到40 倍的速率提升。对None 机制而言,在发生丢包时,TCP 的传输性能急剧下降,即使只有1%的丢包概率,TCP 的平均传输速率也降低了接近80%。这主要是由于TCP自身的慢启动拥塞机制导致的。

图3 不同丢包率情况下AdaptiveFEC与None的比较Fig.3 Comparison between AdaptiveFEC and None under different packet loss rates

图4 和图5 是在网络时延为20 ms 的情况下AdaptiveFEC分别与StaticA(n,m)和StaticB(n,m)的比较。比较时设置不同的丢包率和冗余段比例。可以看出(图5(a)),静态的前向纠错技术对于传输速率的改善效果有限,在丢包概率低于5%时还能保持相对较好的传输速率,但当丢包概率高于5%时,连接的传输速率发生快速的下降,而AdaptiveFEC 却能始终保持较好的传输速率,性能提升平均达42%。主要原因是,随着丢包率的增大,AdaptiveFEC 能根据网络状况动态调整冗余段比例,传输性能能保持相对稳定,而静态的前向纠错机制的冗余段比例一直不变,丢包率大的情况下冗余恢复有限,使数据重传概率增大,传输性能也就受影响。

同时可以看出(图5(b)),AdaptiveFEC 能根据网络状况动态调整冗余段比例,而静态的前向纠错机制的冗余段比例一直处于稳定状态。在丢包率较高时,AdaptiveFEC 的动态调整冗余段比例可有效提升传输性能,这验证了本文设计AdaptiveFEC的初衷。

图6是在网络时延设为10 ms的情况下的实验结果,也再一次验证了上述结论。

图4 不同丢包率情况下AdaptiveFEC与StaticA(n,m)的比较Fig.4 Comparison between AdaptiveFEC and StaticA(n,m)under different packet loss rates

图5 不同丢包率情况下AdaptiveFEC与StaticB(n,m)的比较(网络时延为20 ms)Fig.5 Comparison between AdaptiveFEC and StaticB(n,m)under different packet loss rates(network delay=20 ms)

图6 不同丢包率情况下AdaptiveFEC与StaticB(n,m)的比较(网络时延为10 ms)Fig.6 Comparison between AdaptiveFEC and StaticB(n,m)under different packet loss rates(network delay=10 ms)

5.3 真实实验验证

在两台服务器中的一台搭建文件服务器,从另一台通过无线接入网络的笔记本电脑上使用wget进行文件下载来构建无线网络中的通信,笔记本电脑和无线路由器之间相隔一面墙,通过文件下载时间评测机制性能。使用wget 在5%的丢包率、20 ms 时延的网络环境下进行文件下载,并在两台服务器之间通过Linux 的防火墙命令设置随机丢包以及数据包接收延迟,下载的文件为普通的应用程序安装包,文件大小总共46 MB。将四种机制进行比较,实验结果如表1所示。

表1 不同机制的文件下载性能对比Tab.1 File downloading performance comparison of different mechanisms

从表1 中可以看出,不使用前向纠错技术时,传输速度由于5%的丢包率影响,传输速率低下,平均速度只有254 KB/s。一旦引入前向纠错技术时,传输速度就有了很大提升,其中采用StaticB(n,m) 机制的平均速度为630 KB/s,采用StaticA(n,m)机制的平均速度为1.36 MB/s,相较None 而言,两者下载速度分别提升了140%和440%。其中StaticB(n,m)机制与StaticA(n,m)机制相比速度有所下降的原因是wget 下载过程中发送的数据段大小是相对固定的,因此不重新切分数据段的静态前向纠错有更小的网络延迟。另外,从表1 中可以看出,本文提出的自适应传输机制的传输速度有了最大幅度的提升,平均传输速度达到了2.67 MB/s,相较于不使用前向纠错技术的TCP 传输速度提升了9.7 倍,相较静态前向纠错方案的速度也至少提升了1 倍以上,再次验证了AdaptiveFEC性能稳定,传输速率高。

相较于仿真实验,真实通信实验的性能提升更高的原因是真实通信实验过程中,除了本文手动设置的丢包率,无线网络本身也会存在一定的丢包率,实际的丢包率高于本文设置的丢包率,导致静态策略设置的冗余段比例偏低,而AdaptiveFEC 能够自适应估计丢包率,因此真实通信实验中AdaptiveFEC的性能提升更高。

6 结语

无线网络中,受各种因素影响数据传输易发生丢包,此时TCP 连接的传输性能因丢包重传机制而大幅下降。因此,如何在不稳定网络环境下增强TCP 传输性能一直是难点问题。针对这一问题,本文首先对前向纠错中的冗余段确定问题进行建模,并提出了一种基于自适应的前向纠错机制AdaptiveFEC,可针对不同的网络状况动态调整冗余段比例,以优化传输效率。AdaptiveFEC 采用梯度下降以及局部搜索来为传输连接上的前向纠错寻找最佳冗余段比例,并通过实时监控网络状况对冗余数据比例进行动态调整,保持传输效率的稳定。通过大量实验证明,与静态的前向纠错机制相比,本文提出的动态的前向纠错能大幅提升TCP 传输的性能,同时能保持传输的稳定性。本文设计的算法中最优冗余段比例确定算法执行的时间间隔是固定的,如何根据实际情况灵活调整最优冗余段比例确定算法执行的时间间隔,是下一步将继续研究的问题。

猜你喜欢

传输速率时延比例
计算机网络总时延公式的探讨
计算机网络总时延公式的探讨
基于物联网的IT运维可视化管理系统设计与实现
人体比例知多少
三星利用5G毫米波 实现创纪录传输速率
《舍不得星星》特辑:摘颗星星给你呀
用比例解几何竞赛题
夏季滨海湿地互花米草植物甲烷传输研究
数据传输速率
猫星人处处都是黄金比例