一种基于UDT协议的高速网络可靠传输的控制方法与流程

文档序号:11279012阅读:532来源:国知局
一种基于UDT协议的高速网络可靠传输的控制方法与流程

本发明属于高速网络数据传输技术领域,具体涉及一种在高速网络中基于udt协议的可靠传输的控制方法。



背景技术:

随着高速网络的发展,传统的tcp传输协议随着rtt传输时延和丢包的增加,tcp数据流并没有占满可用带宽,而此时基于udp的传输协议具有更大的传输优势,一方面基于udp的传输协议传输代价更小、速度快、资源消耗更少,可以获得较高的吞吐量;另一方面,基于udp的应用层传输协议可以调整流控和拥塞控制机制使之更适合当前网络的传输特性以最大效率的利用高速网络的传输带宽。当然由于udp协议是不可靠的传输协议,不提供数据包的分组、组装以及乱序到达处理的功能,应用层协议想要实现可靠的文件传输功能需要在udp协议之上实现可靠性。

udp-baseddatatransfer(udt)协议是一个基于udp的应用层传输协议,udt协议是一个传输协议的框架,应用程序可以调用udt协议的提供的api实现可靠的文件传输功能,udt协议将基于速率的拥塞控制机制和基于窗口的流控机制相结合,一方面速率控制可以更新发送分组的时间间隔,控制当前发送数据包的发送速率,另一方面基于窗口的流控机制解决了突发流量时数据包缓存的问题,并且限制未接收到应答的数据包的个数。

udt协议中,每一个数据包都有一个序列号,接收方对接收到的数据周期性的触发ack控制包确认已收到的数据包。接收方会发送两种类型的ack控制包,一种是由定时器发出的常规ack控制包,包含rtt、确认序号、预估链路带宽等信息,另一种是lightack,为了减少处理时间,只包含确认序号,用于在高速网络环境中及时更新ack确认信息。

接收方和发送方都维持了一个数据结构丢失链表用于存储丢失包的序列号,当出现丢包现象时,接收方会发送nak控制包给发送方,在nak控制包中有检测到的丢失数据包的序列号,发送方在收到nak控制包之后,将控制包中的序列号加入到丢失列表中,优先发送丢失列表中的数据包,丢失的数据包发送之后将其序列号从发送方丢失列表中删除,接收方接收到重传的数据后,将此数据包的序列号从接收方的丢失列表中删除。

当重传的数据丢失时,接收方无法判断数据包是否再次发生了丢包,不会发送重复的nak控制包,发送方将丢失列表中的数据发送完之后,会继续发送正常的数据包,也没有对数据包有可靠性的控制。在高速网络的环境中,udt发送方将接收窗口中可发送的数据包发送完后,一直没有收到对丢失数据包的ack确认控制信息,等待一段时间后启动超时重传,从未确认的数据包开始重传数据包,发送速度从0开始增长。

udt协议在处理丢包的时候,只重传丢失的数据包,这样做可以省去不必要的数据包重传,提高网络上带宽的有效利用率,但是一旦启动超时重传,因为超时的原因并不知道,会从未确认的数据包开始重传,这对传输速度有很大的影响,特别是在高速网络环境中,传输速度无法占满可用带宽。这种由于重传数据的可靠性而引发的超时重传是可以避免的,因为在发送方窗口中的数据未发送完之前,发送方会收到接收方发送的具有相同ack序列号的控制包,特别是lightack控制包,lightack控制包与发送方发送的数据包数量有关。相同的ack序列号意味着有数据包丢失了并且重传的数据接收方也没有收到,此时发送方需要进一步的可靠性控制,防止超时重传对传输速度的影响。

udt协议作为高速传输网络的一种解决方案,对文件传输的可靠性控制方面有严重的不足,使得可用的网络带宽造成浪费。



技术实现要素:

本发明的目的在于克服现有udt传输协议的缺点和不足,提供一种基于udt协议的可靠传输的控制方法。

在现有的传输协议中,udt接收方对重传的数据没有可靠性的控制,一旦丢包,就会导致数据包的重传,造成不必要的资源消耗,并且影响传输速度。

本发明提出的在高速网络环境中基于udt协议的可靠传输的控制方法,首先要在发送方添加ack控制包计数器和丢失重传列表两个功能部件。ack控制包计数器主要用于对具有相同ack序列号的控制包进行统计,以便确认重传数据包的时间;丢失重传列表主要用于记录发送方已经重传但是还没有被ack控制包确认过的丢失数据包的序列号。控制传输的具体步骤为:

发送方启动ack控制包计数器,获取接收到ack的统计信息;其中,ack控制包计数器记录上一个接收到的ack控制包的序列号sack、接收到相同ack序列号的次数tack以及重传阈值,记录上一个接收到的ack控制包的序列号用于判断ack控制包是否相同;

当传输的数据包发生丢失时,将接收方将数据包的序列号加入到丢失列表中,通过传输nak控制包,显示将丢包信息反馈给发送方,发送方重传丢失的数据包;

发送方通过统计ack控制包计数器的信息,估测重传的数据包是否发生丢包现象,根据所设阈值,确定重新重传数据包的时间:若超过阈值,则认为重传有丢包现象,将丢失重传列表中的序列号重新加入到丢失列表中,重传这些未确认的数据包。

原始的udt协议可靠性控制方式是通过一次重传和超时重传的组合方式来实现的,尽量使数据在一次重传之后就可靠的接收,但是在实际传输过程中,当链路条件不是很好的情况下,会造成重传的数据包丢失。重传的数据包若丢失了,接收方没有反馈机制告知发送方,只能通过超时重传的方式进行重传,严重影响传输速度。使用ack控制包计数器可以及早的发现丢包情况,并采取一定措施避开链路拥塞的时机。

本发明中,所述udt协议的ack控制包计数器的实现逻辑如下,对于发送方接收到的ack控制包进行统计,比较当前接收到的数据包ack序列号的值和sack的值,当两个值相同时,表示ack控制包确认的是同一个序列号,则tack+1,否则清零tack;比较tack和重传阈值大小,若大于重传阈值,则启动重传机制,重传丢失列表中未得到确认的数据包,否则,不做任何处理。

本发明中,重传机制是保证udt可靠性的核心部分,在原始udt当接收方确认丢失数据包的序号时,会显示发送nak控制包到发送方,发送方接收到nak控制包后会将序列号加入到丢失列表中重传丢失列表中的数据包,由于udt丢失列表中的数据包具有最高传输优先权,数据包重传后需要将丢失列表中的序列号删除。

本发明中,为了保证传输的可靠性,维持了一个已重发但未确认的丢失列表即丢失重传列表用来重发丢失列表中未得到确认的数据包。当丢失列表中的数据重传后会加入到丢失重传列表中,若网络链路条件不好,ack控制包计数器统计值达到一定的阈值后,表明重传的数据包可能发生丢失,这时退避一段时间后,重传未确认的丢失数据包。

本发明中,发送方的可靠性控制方法会结合上述的两个功能部件,当ack控制包计数器的统计数据到达合理的阈值时,若发送方丢失列表不为空,继续重传丢失列表中的数据包,ack控制包计数器不清零;若发送方的丢失列表为空,而丢失重传列表中存在数据,就将丢失重传列表中的序列号加入到发送方的丢失列表中,在下一个发送周期中优先发送这些数据包,ack控制包计数器清零;若发送方丢失列表为空且丢失重传列表中也为空,根据重传次数设置等待时间,等待时间为了避免加重网络负担,因为此时的链路状况一定是不好的,一段等待时间后,从ack控制包确认的序列号开始发送数据包,及时重传数据,ack控制包计数器清零,更新计数器重传阈值。

本发明中,丢失重传列表中的序列号更新方法,是当发送方将丢失列表中的数据包重传后,将此序列号从丢失列表中删除,然后加入到丢失重传列表中。在发送方接收到ack控制包的时候,首先要更新丢失列表和重传丢失列表中的序列号,删除列表中序列号小于ack序号的值,因为这些数据包已经被接收方确认收到了。

本发明的技术效果在于:本方法通过增加ack控制包计数器及时的获取重传数据包传输状况,udt协议可以获取到丢失数据包的确切序号,重传的数据包数量少,当确认重传的数据包丢失后,可以将重传数据加入到丢失列表中,及时重传而不会加重网络负担;一旦无法确认丢失的数据的序列号,从ack确认的序列号开始重传,则需要等待一段时间重传,等待时间与rtt和链路带宽有关,这样做可以减轻链路的拥塞状态,并做到及时重传,不会对传输的速度产生较大幅度的影响。

附图说明

图1示出了本发明基于udt协议的传输框架添加的功能部件形成新的架构。

图2示出了本发明中丢失重传列表中的更新流程示意图。

图3示出了本发明中ack计数器判断是否启动重传机制的流程示意图。

图4示出了本发明中重传机制的处理流程示意图。

图5示出了本发明在万兆网络环境中传输20gb的文件与原始udt协议的传输速度对比图。

具体实施方式

为了更加清楚的理解本发明的处理流程和优点,下面结合附图和具体实施例对本发明做进一步的说明。附图是示意性的而不应理解为对本发明进行任何限制。

参见图1,本方法在udt协议传输机构基础上,在发送方添加ack控制包计数器和丢失重传列表两个功能部件。其中,ack控制包计数器的主要功能是对具有相同ack序列号的控制包进行统计,以便确认重传数据包的时间,主要使用的数据包是接收方反馈的ack控制包;丢失重传列表是用来记录发送方已经重传但是还没有被ack控制包确认过的丢失数据包的序列号,主要使用的数据包是接收方反馈的nak控制包。丢失重传列表和原始的丢失列表之间有数据包序列号的交换,在图2会有详细的介绍。

在计数器中包含有以下一组变量(t0,tack,sack),用来表示计数器的当前状态,这个三元组的含义分别为:t0表示接收到相同ack控制包的重传阈值,tack为ack控制包的统计值,sack,为ack控制包中的序列号值。

参见图3,ack计数器判断是否启动重传机制的流程示意图。首先,需要设定接收ack的重传阈值,初始值设为t0;设定ack控制包的统计值tack,初始值设为0,定义变量sack,记录ack控制包中的序列号值。

ack控制包计数器的工作过程流程为:

将当前ack确认的序列号的值和sack比较:

如果相同,则接收到重复确认序列号的ack控制包,tack=tack+1;

如果不相同,则说明相同确认序列号的ack控制包的个数为0了,即tack=1;

将sack的值更新为当前ack确认的序列号的值。

将tack的值和设置的阈值t0进行比较,检测重复的ack控制包的个数是否达到可重传规定的阈值;

若tack>=t0表示含有sack序列号的ack控制包的个数已经超过所设阈值,代表着这个ack序列号之后重传的数据包在接收端有极大的可能性丢失了,可以重新启动的重传机制。

重传机制包括在udt协议中,接收方和发送方都会有丢失数据包的信息,但发送方第一次将在丢失列表中的数据包重传之后就会将这些丢包信息删除,如果重传的数据包丢失了,接收方无法知道重传的数据包丢失,而发送方可以通过接收到多次相同序列号的ack控制来判断。但是,这时候发送方的丢失列表中丢失数据包的信息已经清空了,而从确认序列号开始重传数据包会造成不必要的带宽浪费,在发送方维持一个已重传但未确认的丢失列表——丢失重传列表,可以在链路条件不好的情况下,只重传丢失重传列表中的数据包,有效的利用带宽。

参见图2,丢失重传列表的初始化和运行过程为:

在传输过程中,若发送方收到nak控制包则将nak中的数据包序列号加入到发送方的丢失列表中,丢失列表中的数据包具有最高的传输权限,优先传输已丢失的数据包。

重传成功的数据包将其序列号从丢失列表中删除,并加入丢失重传列表中。

在接收到ack确认信息的时候,需要对重传数据列表和已重传但未确认的数据列表更新,更新策略包括:当接收到ack控制包,包括常规ack控制包和lightack控制包,读取他们确认的序列号值,首先更新丢失重发列表,将列表中序列号小于ack确认的序列号的数据包删除,因为这些数据包接收方已经接收到了。

参见图4,在发送方确认重传的数据包丢失之后,会启动重传机制,对未确认的丢失数据包的重传过程进一步还包括:

若发送方的丢失列表不为空,说明还有丢失的数据没有重传完,而丢失的数据包具有最高重传优先级,因此,发送方继续丢失列表中的数据包,ack控制包计数器不清零。

若发送方的丢失列表为空,表示没有待重发的数据包,此时:

若发送方的丢失重传列表中不为空,则需要比较重传丢失列表中的最小序列号rlmin的值和sack的大小,若rlmin=sack,表示重传的数据包丢失,就将丢失重传列表中的序列号加入到发送方的丢失列表中,在下一个发送周期中,优先发送这些数据包,并且将ack控制包计数器清零。

若发送方的丢失重传列表为空,表示没有重发的丢失数据;或者,发送方的丢失重传列表不为空,但是rlmin>sack,表示丢失重传列表的数据包不是接收方想要的数据,则设置一段等待时间后,立即从sack开始及时重传数据包,并将ack控制包计数器清零。

设置一段等待时间,是为了防止链路条件不好的情况下加重网络负担,等待时间与udt协议预估的网络带宽以及rtt有关。

参见图5,本方法在10gb/s带宽的网络环境中传输20gb大小文件的与原始udt协议的实时流量对比图,从图中可以看出本方法相对于原始udt协议更容易获得稳定的网络带宽。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1