数据传输方法、装置和服务器与流程

文档序号:17725202发布日期:2019-05-22 02:27阅读:175来源:国知局
数据传输方法、装置和服务器与流程

本发明涉及数据传输技术领域,尤其是涉及一种数据传输方法、装置和服务器。



背景技术:

将本地采集到的视频信息经过编码压缩,通过网路传输到远端,远端对视频信息进行解码解压缩的过程就是视频通讯;但是在实际的环境中,网络情况千差万别,传输过程中不可避免的会出现数据包丢失,这会给视频通讯的质量带来影响,视频质量会下降,因此,如何在各种各样的网络环境中,实现快速可靠的数据包传输成为一个重要的研究方向。

现有技术中丢包重传方法的重传判断通常是基于统计超时的判断,即等待重传包超时后才会发送重传请求,导致重传效率低。



技术实现要素:

有鉴于此,本发明的目的在于提供数据传输方法、装置和服务器,以提高数据包的重传效率。

第一方面,本发明实施例提供了一种数据传输方法,该方法应用于接收端,该接收端设置有第一数据输入管道和多级队列;该方法包括:

接收发送端发送的数据包,将数据包放入第一数据输入管道;该数据包包括普通数据包和重传数据包;该数据包携带有包序号;将普通数据包从第一数据输入管道输入至多级队列的第一级队列中;根据包序号,判断第一级队列中的普通数据包是否连续;如果普通数据包不连续,向发送端发送重传指令,并接收发送端发送的重传指令对应的重传数据包,将接收到的重传数据包插入至多级队列中缺失的包序号对应的位置;该重传指令中携带有重传数据包的包序号;该重传数据包的包序号包括多级队列中缺失的包序号;将该重传数据包对应的位置之前的数据包,输出至多级队列中重传数据包对应的位置所在队列的下一级队列;在重传数据包对应的位置之前的数据包输出至下一级队列的过程中,如果输出的数据包不连续,再次向发送端发送重传指令,并继续将重传数据包对应的位置之前的数据包输出至下一级队列。

进一步地,上述接收发送端发送的数据包,将所述数据包放入第一数据输入管道的步骤之后,包括:根据包序号,判断第一数据输入管道中的数据包是否连续;如果不连续,向发送端发送重传指令,并记录发送重传指令的时刻。

进一步地,上述方法还包括:第一数据输入管道中的所有数据包输入至多级队列的第一级队列后,数据包依次从第一级队列输出至第一级队列的下一级队列;在该数据包从第一级队列输出至第一级队列的下一级队列的过程中,判断数据包是否连续;如果不连续,将计算当前时刻与在第一数据输入管道中该不连续的数据包发送重传指令的时刻的时间差,如果该时间差超过预设的时间阈值,则再次发送重传指令,并继续依次将第一级队列的数据包输入至下一级队列;如果该时间差没有超过预设的时间阈值,则第一级队列停止输出,第一级队列的下一级队列中的数据包依次从下一级队列依次输出至下一级队列的下一级队列;在从下一级队列依次输出至下一级队列的下一级队列的过程中,判断下一级队列中的数据包是否连续,如果不连续,将计算当前时刻与该不连续的数据包上一次发送重传指令的时间差,如果该时间差没有超过预设的时间阈值,则下一级队列停止输出;如果该时间差超过预设的时间阈值,则再次发送重传指令,并继续依次将下一级队列的数据包输入至下一级队列的下一级队列,直到该数据包输出至多级队列的最后一级队列中。

进一步地,上述将接收到的重传数据包插入至多级队列中缺失的包序号对应的位置的步骤,包括:判断在多级队列的第一级队列中是否搜索到重传指令对应的重传数据包的包序号对应的位置;如果在第一级队列中搜索到对应的位置,将重传指令对应的重传数据包插入至第一级队列中搜索到的位置;如果在第一级队列中搜索不到对应的位置,判断在第一级队列的下一级队列是否搜索到所述重传指令对应的重传数据包的包序号对应的位置;如果在第一级队列的下一级队列搜索到对应的位置,将重传数据包插入至下一级队列中搜索到的位置;如果在第一级队列的下一级队列搜索不到,判断在下一级队列的下一级队列是否搜索到所述重传指令对应的重传数据包的包序号对应的位置,直到搜索到包序号对应的位置。

进一步地,上述在重传数据包对应的位置之前的数据包输出至下一级队列的过程中,如果输出的数据包不连续,再次向发送端发送重传指令,并继续将重传数据包对应的位置之前的数据包输出至下一级队列的步骤,包括:在重传数据包对应的位置之前的数据包输出至下一级队列的过程中,判断重传数据包对应的位置之前连续的数据包是否从多级队列中重传数据包对应的位置所在队列输出完毕;如果没有输出完毕,判断未输出的重传数据包对应的位置之前的数据包是否连续;如果连续,将未输出的重传数据包对应的位置之前的数据包输出至下一级队列中;如果不连续,则再次向发送端发送重传指令,并继续将未输出的重传数据包对应的位置之前的数据包输出至所述下一级队列中。

第二方面,本发明实施例还提供一种数据传输方法,该方法应用于发送端,该方法包括:接收第二数据输入管道发送的数据包,将数据包放入缓存数组中;将缓存数组中的数据包发送至接收端;当发送端接收到重传指令时,解析重传指令;根据解析结果,在缓存数组中查找重传指令对应的数据包,并将重传指令对应的数据包发送至接收端;该重传指令对应的数据包为重传数据包。

进一步地,上述重传指令对应的数据包发送至接收端的步骤,包括:判断发送端是否接收到重传指令;如果接收到重传指令,则解析重传指令,根据解析结果从缓存数组中查找重传指令对应的数据包,将重传指令对应的数据包发送至接收端,并再次判断发送端是否接收到重传指令;如果没有接收到重传指令,判断是否接收第二数据输入管道发送的下一个数据包;若接收到下一个数据包,将下一个数据包放入缓存数组中,将缓存数组中的下一个数据包发送至接收端,再次判断发送端是否接收到重传指令;若没有接收到下一个数据包,再次判断发送端是否接收到重传指令。

第三方面,本发明实施例还提供一种数据传输装置,该装置设置于接收端,该接收端设置有第一数据输入管道和多级队列;该装置包括:数据包接收模块,用于接收发送端发送的数据包,将数据包放入第一数据输入管道;数据包包括普通数据包和重传数据包;数据包携带有包序号;第一判断模块,用于将普通数据包从第一数据输入管道输入至多级队列的第一级队列中;根据包序号,判断第一级队列中的普通数据包是否连续;重传数据包插入模块,用于如果普通数据包不连续,向发送端发送重传指令,并接收发送端发送的重传指令对应的重传数据包,将接收到的重传数据包插入至多级队列中缺失的包序号对应的位置;重传指令中携带有重传数据包的包序号;重传数据包的包序号包括多级队列中缺失的包序号;数据包输出模块,用于将重传数据包对应的位置之前的数据包,输出至多级队列中重传数据包对应的位置所在队列的下一级队列;重传指令发送模块,用于在重传数据包对应的位置之前的数据包输出至下一级队列的过程中,如果输出的数据包不连续,再次向发送端发送重传指令,并继续将重传数据包对应的位置之前的数据包输出至下一级队列。

第四方面,本发明实施例还提供一种数据传输装置,该装置应用于发送端,该装置包括:缓存数组输入模块,用于接收第二数据输入管道发送的数据包,将数据包放入缓存数组中;数据包发送模块,用于将缓存数组中的数据包发送至接收端;指令解析模块,用于当发送端接收到重传指令时,解析重传指令;重传发送模块,用于根据解析结果,在缓存数组中查找重传指令对应的数据包,并将重传指令对应的数据包发送至接收端。

第五方面,本发明实施例还提供一种服务器,该服务器包括存储器和处理器;存储器用于存储支持处理器执行数据传输方法的程序,处理器被配置为用于执行存储器中存储的程序。

本发明实施例带来了以下有益效果:

本发明提供了一种数据传输方法、装置和服务器,其中,数据传输方法首先接收发送端发送的数据包并将其放入第一数据输入管道;将普通数据包从第一数据输入管道输入至多级队列的第一级队列;根据包序号判断第一级队列中的普通数据包是否连续;如果不连续,向发送端发送重传指令,并接收发送端发送的重传数据包,将该重传数据包插入至多级队列中缺失的包序号对应的位置;将重传数据包对应的位置之前的数据包,输出至其所在队列的下一级队列;在数据包输出至下一级队列的过程中,如果输出的数据包不连续,再次向发送端发送重传指令,并继续将数据包输出至下一级队列。本发明减少了重传失败时发送重传指令的等待时间,提高了数据包的重传效率。

本发明的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本发明的上述技术即可得知。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施方式,并配合所附附图,作详细说明如下。

附图说明

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

图1为本发明实施例提供的一种数据传输方法的流程图;

图2为本发明实施例提供的一种数据传输方法中发送端设计的结构示意图;

图3为本发明实施例提供的另一种数据传输方法的流程图;

图4为本发明实施例提供的另一种数据传输方法的流程图;

图5为本发明实施例提供的另一种数据传输方法中接收端设计的结构示意图;

图6为本发明实施例提供的另一种数据传输方法的流程图;

图7为本发明实施例提供的另一种数据传输方法的流程图;

图8为本发明实施例提供的另一种数据传输方法中将重传指令对应的数据包插入到队列的对应位置的流程图;

图9为本发明实施例提供的另一种数据传输方法中刚插入的数据包之前的数据包从队列输出的流程图;

图10为本发明实施例提供的另一种数据传输方法中将不是重传指令对应的数据包填入队列的第一级队列的流程图;

图11为本发明实施例提供的另一种数据传输方法中所有的数据包从队列中输出的流程图;

图12为本发明实施例提供的另一种数据传输方法中数据包从队列中输出的顺序的流程图;

图13为本发明实施例提供的一种数据传输装置的结构示意图;

图14为本发明实施例提供的另一种数据传输装置的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在不稳定的网络环境中,使用丢包重传来达到稳定的数据传输,已经在业内得到很多研究,比如最基础的,直接使用tcp(transmissioncontrolprotocol,传输控制协议)来传输数据,利用tcp自身的机制进行超时重传,从而达到可靠传输;但是因为tcp协议本身的原因,往往会有拥塞延时大和恢复慢的问题;在实际应用中,通常使用udp(userdatagramprotocol,用户数据报协议)来实现丢包重传;该udp提供了无连接通信,且不对传送数据包进行可靠性保证,适合于一次传输少量数据,udp传输的可靠性由应用层负责。

现有技术中提出了一种网络自适应的数据传输算法,该算法发送端在正常的udp数据之后附加了序号和时间信息,接收端根据接收到的数据包,判断丢包情况和网络延时情况,从而自动的发送重传请求,完成丢包重传的目的。这种算法的单次重传时间可以根据网络状况进行自适应,且将第一次和后续的重传请求分开,因为第一次重传请求的等待时间与udp数据包乱序程度有关,后续的重传等待时间与网络延时有关,因此第一次重传请求的等待时间远小于后续的重传等待时间,从而减少了重传的延时;丢包重传机制是在检测到有丢包时发出nack(negativeacknowledgment,否定回答,本发明中相当于重传指令),而多次重传是在发出nack之后,如果经历了单次超时时间t重传包还没来,就再次发送nack数据包。

然而这种方法存在着一定的缺陷:这种方法的重传判断都是基于统计的超时,在某些状态下,虽然未经历单次超时时间t,但接收端其实已经可以判断出一些数据包重传失败,如果还要等到超时时间t才可进行nack发送,继续做一些等待,效率没有得到完全体现,因此,降低了数据包的重传效率。

基于此,本发明实施例提供的一种数据传输方法、装置和服务器,该技术可以应用于视频通信、图片传输或者其他数据传输的场景中。

为便于对本实施例进行理解,首先对本发明实施例所公开的一种数据传输方法进行详细介绍。

参见图1所示的一种数据传输方法的流程图,该数据传输方法应用于发送端,该方法包括如下步骤:

步骤s102,接收第二数据输入管道发送的数据包,将数据包放入缓存数组中;

发送端的输入端接收第二数据输入管道发送的数据包,并将该数据放入缓存数组中进行保存。

步骤s104,将缓存数组中的数据包发送至接收端;

发送端利用udp协议发送数据包时,为该数据包附加了包序号,以使接收端可以根据该包序号判断哪些数据包丢失。

步骤s106,当发送端接收到重传指令时,解析该重传指令;

接收端发现某些包序号的数据包丢失,会立即向发送端发送重传指令;发送端接收到该重传指令后,解析该重传指令中需要重传的数据包对应的包序号。

步骤s108,根据解析结果,在缓存数组中查找该重传指令对应的数据包,并将该重传指令对应的数据包发送至接收端;该重传指令对应的数据包为重传数据包。

根据解析出的需要重传的数据包对应的包序号,在缓存数组中查找该包序号对应的数据包,将该数据包标记为重传数据包发送至接收端。

上述发送端通常设计有两个输入管道和两个输出管道,如图2所示,发送端包括重传指令输入管道、第二数据输入管道、重传数据包输出管道和数据数据包输出管道;其中,第二数据输入管道接收服务器采集的经过编码后的数据,将该数据构建成数据包送入缓存数组中,然后该缓存数组中的数据包利用udp协议发送至接收端。重传指令输入管道接收来自接收端发送的重传指令,经过对该重传指令的解析,从缓存数组中查找该重传指令对应的数据包,最后通过重传数据包输出管道将重传指令对应的数据包利用udp协议发送至接收端。

本实施例提供的一种数据传输方法将发送的数据包附加有包序号,可快速查找需要重传的数据包,且将数据包进行标识,可将重传数据包在重传数据包输出管道中发送,提高了数据重传的效率。

参见图3所示的另一种数据传输方法的流程图;该方法在图1中所示数据传输方法的基础上实现;该方法的具体步骤包括:

步骤s302,判断发送端是否接收到重传指令;如果接收到重传指令,执行步骤s304;如果没有接收到重传指令,执行步骤s306;

步骤s304,解析重传指令,根据解析结果从缓存数组中查找重传指令对应的数据包,将该重传指令对应的数据包发送至接收端,返回步骤s302,再次判断发送端是否接收到重传指令;

发送端向接收端发送多个数据包后,首先判断是否接收到重传指令,如果接收到重传指令,该重传指令解析重传指令中对应的包序号,然后在缓存数组中查找该包序号对应的数据包,将该数据包发送给接收端后,发送端再定判断是否接收到重传指令,以使发送端在接收到重传指令后,立即发送重传指令对应的数据包,提供重传数据发送的效率。

步骤s306,判断是否接收到第二数据输入管道发送的下一个数据包;若接收到下一个数据包,执行步骤s308;若没有接收到下一个数据包,执行步骤s302;

步骤s308,将下一个数据包放入缓存数组中,将缓存数组中的下一个数据包发送至接收端,返回步骤s302,再次判断发送端是否接收到重传指令。

如果在预设的时间内,发送端没有接收到接收端发送的重传指令,该发送端判断是否接收到第二数据输入管道下一个待发送的数据包,若接收到下一个数据包,则将该下一个数据包放入缓存数组中存储,并从缓存数据中将该下一个数据包发送至接收端;发送完毕后,发送端会判断该下一个数据包发送后,是否有丢包情况,是否接收到该下一个数据包的重传指令。

如果在预设的时间内该发送端没有接收到下一个待发送的数据包,发送端再次判断是否接收到重传指令。

本实施例提供的数据传输方法为了使发送端更早接收到重传的数据包,发送端优先处理重传指令输入管道的重传指令,然后解析该重传指令后,在缓冲数组找出该重传指令对应的数据包发送至接收端,该技术提高了发送端处理重传指令的时间,可快速发送重传的数据包,提高了数据重传的效率。

参见图4所示的另一种数据传输方法的流程图,该数据传输方法应用于接收端,该接收端设置有第一数据输入管道和多级队列,该方法包括如下步骤:

步骤s402,接收发送端发送的数据包,将该数据包放入第一数据输入管道;该数据包包括普通数据包和重传数据包;该数据包携带有包序号;

接收端接收发送端利用udp协议发送的数据包,将该数据包放入第一数据输入管道中,该第一数据输入管道用于缓存接收到的数据包,并根据包序号判断该数据包是否连续,如果数据包不连续,向发送端发送重传指令;该第一数据输入管道还用于接收重传数据包。

步骤s404,将普通数据包从第一数据输入管道输入至多级队列的第一级队列中;根据包序号,判断第一级队列中的普通数据包是否连续;

上述多级队列通常为n个双向链表,该多级队列可以表示为list[0]、list[1]、…、list[n-1],n表示该队列的级数。

根据普通数据包对应的包序号,依次将普通数据包从第一数据输入管道放入第一级队列list[0]的指定位置上,例如,第一个普通数据包的包序号为1,将该普通数据包放在list[0]的第一个位置上,第二个普通数据包的包序号为2,将该普通数据包放在list[0]的第二个位置上,根据包序号依次排列普通数据包的位置。

步骤s406,如果普通数据包不连续,向发送端发送重传指令,并接收发送端发送的重传指令对应的重传数据包,将接收到的重传数据包插入至多级队列中缺失的包序号对应的位置;该重传指令中携带有重传数据包的包序号;该重传数据包的包序号包括多级队列中缺失的包序号;

根据第一级队列中放入的普通数据包的包序号,判断第一级队列中的普通数据包是否连续,例如,第一个数据包的包序号为1,将该数据包放在list[0]的第一个位置上,第二个数据包的包序号为2,将该数据包放在list[0]的第二个位置上,第二个数据包的包序号为4,将该数据包放在list[0]的第四个位置上,此时就判断为数据包不连续,缺失了包序号为3的数据包;然后立即向发送端发送重传指令,该重传指令中包含有队列中缺失的数据包的包序号。

发送端接收到该重传指令,根据解析到的该重传指令中需要重传的缺失的数据包的包序号,从缓存数组中找到该包序号对应的数据包,通过重传数据包输出管道将该数据包发送至接收端;接收端接收到重传的数据包后,根据包序号将重传的数据包放入多级队列的对应位置中。

步骤s408,将重传数据包对应的位置之前的数据包,输出至多级队列中重传数据包对应的位置所在队列的下一级队列;

发送端发送的重传数据包插入到多级队列对应的位置后,将重传数据包对应的位置之前的数据包从本级队列(相当于上述多级队列中重传数据包对应的位置所在队列)输出至本级队列的下一级队列。

步骤s410,在重传数据包对应的位置之前的数据包输出至下一级队列的过程中,如果输出的数据包不连续,再次向发送端发送重传指令,并继续将重传数据包对应的位置之前的数据包输出至下一级队列。

在重传数据包之前的数据包从本级队列输出至本级队列的下一级队列的过程中,如果输出的数据包的包序号不连续,说明该重传数据包之前的数据包重传失败,则立即向发送端发送重传指令,以获取重传指令对应的包数据包;然后继续将本级队列中的数据包输出至本级队列的下一级队列中。

上述接收端通常设计有一个输入管道和两个输出管道,如图5所示,接收端包括第一数据输入管道、重传指令输出管道和数据输出管道;其中,第一数据输入管道接收发送端发送的数据包,然后判断该数据包是否是发送端根据重传指令发送的数据包,如果是,将该数据包放入多级队列的对应位置中,如果不是,将该数据包放入多级队列的第一级队列中。根据多级队列数据包是否连续,判断是否输出重传指令,若需要输出重传指令,重传指令输出管道利用udp协议向发送端发送重传指令。

本发明提供了一种数据传输方法,该方法首先接收发送端发送的数据包并将其放入第一数据输入管道;将普通数据包从第一数据输入管道输入至多级队列的第一级队列;根据包序号判断第一级队列中的普通数据包是否连续;如果不连续,向发送端发送重传指令,并接收发送端发送的重传数据包,将该重传数据包插入至多级队列中缺失的包序号对应的位置;将重传数据包对应的位置之前的数据包,输出至其所在队列的下一级队列;在数据包输出至下一级队列的过程中,如果输出的数据包不连续,再次向发送端发送重传指令,并继续将数据包输出至下一级队列。本发明减少了重传失败时发送重传指令的等待时间,提高了数据包的重传效率。

参见图6所示的另一种数据传输方法的流程图;该方法在图4中所示数据传输方法的基础上实现;该方法的具体步骤包括:

步骤s602,接收发送端发送的数据包,将该数据包放入第一数据输入管道;

步骤s604,根据包序号,判断第一数据输入管道中的数据包是否连续;如果连续,执行步骤s606;如果不连续,执行步骤s608;

步骤s606,将该数据包缓存至第一数据输入管道;

步骤s608,向发送端发送重传指令,并记录发送该重传指令的时刻;

在第一数据输入管道接收发送端发送的数据包的过程中,该第一数据输入管道可以根据包序号判断接收的数据包是否连续,如果连续不进行处理,将该数据包缓存在数据输入管道中里如果不连续则向发送端发送重传指令,并记录发送该重传指令的时刻。

步骤s610,第一数据输入管道中的所有数据包输入至多级队列的第一级队列后,该数据包依次从第一级队列输出至第一级队列的下一级队列;

第一数据输入管道将缓存的数据包输出至多级队列的第一级队列中,该数据包包括普通数据包和重传数据包;传输的过程中,数据包根据包序号依次放入该第一级对列中。

当第一数据输入管道中缓存的数据全部输出到第一级队列中时,第一级队列中的数据包将输出至多级队列中的第二级队列(相当于上述第一级队列的下一级队列)中。

步骤s612,在该数据包从第一级队列输出至第一级队列的下一级队列的过程中,判断数据包是否连续;如果不连续,将计算当前时刻与在第一数据输入管道中该不连续的数据包发送重传指令的时刻的时间差,如果该时间差超过预设的时间阈值,则再次发送重传指令,并继续依次将该第一级队列的数据包输入至下一级队列;如果该时间差没有超过预设的时间阈值,则第一级队列停止输出,第一级队列的下一级队列中的数据包依次从下一级队列依次输出至下一级队列的下一级队列;

如果数据包不连续,说明在第一数据输入管道中已经针对该缺失的数据包发送过重传指令,但是还未接收到该重传指令对应的重传数据包,因此,需要计算当前时刻与在第一数据输入管道中针对该确实的数据包发送重传指令的时刻的时间差,如果该差值超过预设的时间阈值,则再次针对该缺失的数据包向发送端发送重传指令,并继续依次将该第一级队列的数据包输入至下一级队列;如果该时间差没有超过预设的时间阈值,说明该缺失的数据包可能还在传输的过程中,所以不再次发送重传指令,且第一级队列停止输出,此时,第一级队列的下一级队列(相当于上述第二级队列)开始工作,该第二级队列的数据包将输入至第三级队列中。

步骤s614,在从下一级队列依次输出至下一级队列的下一级队列的过程中,判断下一级队列中的数据包是否连续,如果不连续,将计算当前时刻与不连续的数据包上一次发送重传指令的时间差,如果该时间差超过预设的时间阈值,则再次发送重传指令,并继续依次将该下一级队列的数据包输入至下一级队列的下一级队列;如果该时间差没有超过预设的时间阈值,则下一级队列停止输出,下一级队列的下一级队列中的数据包依次从输出至下一级队列的下一级队列的下一级队列中,直到数据包输出至多级队列的最后一级队列中。

在从下一级队列依次输出至下一级队列的下一级队列的过程中,数据包不连续,同样需要计算当前与上一次针对该缺失的数据包发送重传指令的时间差,如果该时间差大于时间阈值,说明该缺失数据对应的重传数据包重传失败,再次向发送端发送重传指令,如果该时间差小于时间阈值,则下一级队列(相当于上述第二级队列)停止输出,第三级队列开始工作,再次重复上述步骤,直到该数据包输出至多级队列的最后一级队列中。

本实施例提供的数据输出方法,通过判断重传数据包是否超时,来确定是否再次发送重传数据包,可以提高数据传输的准确性。

参见图7所示的另一种数据传输方法的流程图;该方法在图4中所示数据传输方法的基础上实现;该方法的具体步骤包括:

步骤s702,从接收端的第一数据输入管道获取数据包;

步骤s704,判断是否成功获取该数据包,如果获取成功,执行步骤s706;如果获取不成功,执行步骤s712;

步骤s706,判断该数据包是否是重传指令对应的数据包;如果是,执行步骤s708;若果不是执行步骤s710;

由于发送端将发送的普通的数据包和重传的数据包进行了标记,可以根据该标记判断该数据包是否为重传指令对应的数据包。

步骤s708,将该重传指令对应的数据包插入到多级队列的对应位置,并针对该对应位置之前不连续的数据包发送重传指令,将该对应位置之前的数据包输出至该对应位置所在队列的下一级队列。

将重传指令对应的数据包插入到队列的对应位置的流程图如图8所示,具体步骤如下:

步骤01,判断在多级队列的第一级队列list[0]中是否搜索到重传指令对应的重传数据包的包序号对应的位置;如果在所述第一级队列中搜索到对应的位置,执行步骤02;如果在所述第一级队列中搜索不到对应的位置,,执行步骤03;

步骤02,将重传指令对应的重传数据包插入至第一级队列中搜索到的位置;

步骤03,判断在第一级队列的下一级队列是否搜索到重传指令对应的重传数据包的包序号对应的位置;如果在第一级队列的下一级队列搜索到对应的位置,执行步骤04;如果在第一级队列的下一级队列搜索不到,执行步骤05;

步骤04,将重传数据包插入至下一级队列中搜索到的位置;

步骤05,判断在下一级队列的下一级队列是否搜索到该重传指令对应的重传数据包的包序号对应的位置,直到搜索到包序号对应的位置。

根据接收端收到的重传指令对应的数据包的包序号,首先在n个队列中搜索该数据包应当插入的位置:依次从第一级队列搜索到最后一级队列,从队列的头搜索到队列的尾,以此来遍历队列的所有位置,搜索该包序号在队列中的对应位置;第一个包序号大于该数据包的包序号之前位置就是应当插入的位置,然后该重传的数据包插入到此位置。

当搜索到重传指令对应的数据包的正确位置时,插入后,同时认为该队列的该数据包之前的数据包(包括刚插入的数据包)中不连续的包已经重传失败,因此对该数据包之前的数据包进行出队(相当于上述从队列中输出),填入下一级队列。

如图9所示为刚插入的数据包之前的数据包从队列输出的流程图,在该重传数据包对应的位置之前的数据包输出至下一级队列的过程中,判断重传数据包对应的位置之前连续的数据包是否从多级队列中所述重传数据包对应的位置所在队列输出完毕;如果没有输出完毕,判断未输出的重传数据包对应的位置之前的数据包是否连续;如果连续,将未输出的重传数据包对应的位置之前的数据包输出至下一级队列中;如果不连续,则再次向发送端发送重传指令,并继续将未输出的重传数据包对应的位置之前的数据包输出至下一级队列中。

步骤s710,将不是重传指令对应的数据包填入队列的第一级队列中,若数据包不连续,则向发送端发送重传指令。

将不是重传指令对应的数据包填入第一级队列list[0],在填入list[0]的过程中,如果数据包不连续,发出重传指令给到重传指令输出管道,通过重传指令输出管道将该重传指令发送给发送端,具体流程如图10所示。

步骤s712,将所有的数据包从队列中输出。

上述队列个数为n,也就是说上述队列为n级队列,其中队列的个数由设计者自由设置,n也可以表示为接收端最多可以发送重传指令的次数。上述出队(相当于上述从队列中输出)的规则通常是,对连续的数据包直接出队,填入下一级队列;对超时的数据包出队,发出重传指令,并将获得的数据包填入下一级队列;若碰到某个数据包不连续且不超时,则此级队列出队完毕,然后开始下一级队列出队,最后一级队列没有下一级队列,可以认为其下一级队列是数据输出管道(例如,送入解码器)。

参见图11所示的所有的数据包从队列中输出的流程图,首先从队列的第一级队列的第一个位置(相当于第一个节点)开始遍历所有的数据包;然后判断队列中的数据包是否从队列输出完毕;如果没有输出完毕,判断队列中的数据包是否连续或者是否等待输出的时间超过预设的时间阈值;如果数据包连续或者输出的时间超过预设的时间阈值,则将数据包输入至队列的下一级队列中,并向发送端发送重传指令。

数据包从第一级队列到最后一级队列依次出队,从队列的第一个位置开始,将连续的数据包和单次重传超时的数据包出队,填入到下一级队列中,且单次重传超时的数据包出队时同时发送向重传指令输出管道发送重传指令;若某个数据包既不连续又不超时,则此队列出队完成。开始下一级队列的出队,直到最后一级队列出队完成;其中单次超时时间可以由用户设定一个固定值,或者根据网络状态进行自适应设置。

参见图12所示的数据包从队列中输出的顺序的流程图,将数据包从队列依次输入至队列的下一级队列,直到数据包输入至最后一级队列;该队列包含多级队列,该多级队列可以表示为list[0]、list[1]、…、list[n-1],那么数据包一次从list[0]输出到list[1],以此类推,输出到list[n-1]。

本实施提供的数据传输方法,接收到重传指令对应的数据包后,将该数据包插入到队列时,通过该数据包对应的包序号判断插入的位置之前的数据包重传失败,并对重传失败的数据包立即发出重传指令,不用等到重传超时再发,节省了不必要的等待时间,提高了数据包的重传效率。

对应于上述数据传输方法的实施例,参见图13所示的一种数据传输方法的结构示意图;一种数据传输装置,该装置设置于接收端,所述接收端设置有第一数据输入管道和多级队列;所述装置包括:

数据包接收模块130,用于接收发送端发送的数据包,将数据包放入第一数据输入管道;数据包包括普通数据包和重传数据包;数据包携带有包序号;

第一判断模块131,用于将普通数据包从第一数据输入管道输入至多级队列的第一级队列中;根据包序号,判断第一级队列中的普通数据包是否连续;

重传数据包插入模块132,用于如果普通数据包不连续,向发送端发送重传指令,并接收发送端发送的重传指令对应的重传数据包,将接收到的重传数据包插入至多级队列中缺失的包序号对应的位置;该重传指令中携带有重传数据包的包序号;该重传数据包的包序号包括多级队列中缺失的包序号;

数据包输出模块133,用于将重传数据包对应的位置之前的数据包,输出至多级队列中重传数据包对应的位置所在队列的下一级队列;

重传指令发送模块134,用于在重传数据包对应的位置之前的数据包输出至下一级队列的过程中,如果输出的数据包不连续,再次向发送端发送重传指令,并继续将重传数据包对应的位置之前的数据包输出至下一级队列。

本发明实施例提供的数据传输装置,与上述实施例提供的数据传输方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。

对应于上述数据传输方法的实施例,参见图14所示的另一种数据传输方法的结构示意图;该装置应用于发送端,该装置包括:

缓存数组输入模块140,用于接收第二数据输入管道发送的数据包,将数据包放入缓存数组中;

数据包发送模块141,用于将缓存数组中的数据包发送至接收端;

指令解析模块142,用于当发送端接收到重传指令时,解析重传指令;

重传发送模块143,用于根据解析结果,在缓存数组中查找重传指令对应的数据包,并将重传指令对应的数据包发送至接收端。

本发明实施例提供的数据传输装置,与上述实施例提供的数据传输方法具有相同的技术特征,所以也能解决相同的技术问题,达到相同的技术效果。

本实施例还提供了一种与上述方法实施例相对应的一种服务器,该服务器包括存储器和处理器;存储器用于存储支持处理器数据传输方法的程序,所述处理器被配置为用于执行存储器中存储的程序。

本发明实施例所提供的数据传输方法、装置和服务器提供了一种将丢包快速重传机制,增加了快速重传机制可以减少重传失败时重传指令的等待时间,提高了重传效率,降低了收到重传的数据包的延时。

本发明实施例所提供的数据传输方法、装置和服务器的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的方法,具体实现可参见方法实施例,在此不再赘述。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的服务器和/或装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

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