非稳定链路的可靠文件传输方法、计算机设备及存储介质
技术领域
本发明涉及数据传输技术领域,特别是涉及一种非稳定链路的可靠文件传输方法、计算机设备及存储介质。
背景技术
大多数文件传输协议都是有序数据传输,为保证文件数据传输的准确性,防止丢包导致的数据错位或数据传输过程中的无效数据包(数据错误)等因素导致收发方文件数据不一致,通常未作优化的大量有序数据的传输过程是将数据分割成若干个数据包,然后顺序发送,发送端每次发送一个数据包,然后等待接收端响应,接收端收到数据并校验通过后,向发送端返回一个应答包表示数据接收成功,发送端收到应答包后继续向接收端发送文件的下一个数据包。如果文件数据包在传输过程中丢失则接收端没有应答包响应,发送端必须通过超时机制进行处理。如果数据包在传输过程中损坏,接收端向发送端返回一个数据错误的应答包(NAK),发送端则重发该数据包。
例如最古老的XModem和YModem协议,将文件分割为若干个包进行传递,每个包大小为128B/1024B,发送端每发送一个包,均需要等待接收端响应。如果接收端响应ACK则继续发送下一个数据包,如果响应NAK则重发当前包。该方法简单通用但传输速度慢,通讯链路质量较差时,由于发送端必须等待接收端响应,同时文件数据包的发送存在前后顺序关系,丢包和错包会导致传输时间成倍增加;TFTP/FTP等网络传输协议也存在类似的问题;ZModem协议对文件数据传输过程进行了优化,它在收到NAK之前会不断发送文件数据,当收到NAK之后则从NAK所指示的位置开始重传,相较于完全的顺序数据传输,ZModem协议是一种全双工并带有POS(当前传输位置)机制的通讯协议,解决了发送端等待的问题,性能有所提高,但是在链路发送数据的过程中总是有一定概率出现包丢失的情况,这会导致NAK在一定程度上出现延迟,一旦出现这种情况,从包丢失到检测到NAK为止,期间所发送的所有文件数据包均需要全部重传,但实际上可能只丢失了很少的一部分数据包。
现有的一些文件传输方法存在以下几个问题:
(1)在顺序传输方法中,文件数据包丢失只能通过超时机制处理,超时机制是一个高耗时阻塞过程,并且可能导致传输失败,虽然某些传输协议可以断点续传,但续传本身也存在时间上的额外开销,从根本上无法解决断续浪费时间的问题。
(2)顺序传输中的应答包从接收端传输到发送端需要一定的时间,这个过程中,发送端只能等待,在全双工通讯环境下,一半的通道(发送端到接收端))带宽被全部浪费。
(3)损坏数据包的重试机制会阻塞下一个数据包的发送,重试机制与等待机制共同作用对传送延迟产生叠加效果。
(4)即使在超时机制的基础上增加重试机制来减少断点续传的额外开销,也无法弥补超时本身带来的时间浪费。
全双工带POS机制的传输方法在非稳定网络场景下,丢包和错包会也会浪费大量时间和链路带宽。
发明内容
有鉴于此,本发明提出一种非稳定链路的可靠文件传输方法、计算机设备及存储介质,旨在充分利用全双工通讯的优势,节省传输时间,且保证文件传输的可靠性。
首先,为实现上述目的,本发明提出一种非稳定链路的可靠文件传输方法,应用于文件收发***的客户端,所述文件收发***还包括服务端,所述客户端与服务端各自维护一个大小一致的分块高速缓冲器,所述方法包括:
根据与所述服务端的第一交互操作将所述分块高速缓冲器分为若干大小一致的组块;与之对应,所述客户端维护的分块高速缓冲器也被分为了等数量且大小一致的组块;
执行文件传输操作,以组块为单位接收服务端的文件或上传文件至服务端;其过程中,被传输的文件被分割为若干与所述分块高速缓冲器大小一致的数据块并被依次加载至发送端维护的分块高速缓冲器,两个分块高速缓冲器之间每次传输一个组块的数据;
统计所有组块数据的传输状况,对未成功传输的组块数据进行补充传输。
可选地,所述根据与所述服务端的第一交互操作将所述分块高速缓冲器分为若干大小一致的组块包括:
发送所述客户端的存储信息至所述服务端,所述存储信息包括客户端允许的最大组块数量信息以及组块容量信息;
接收所述服务端返回的反馈数据,所述反馈数据包括客户端确定后的分块高速缓冲器的容量信息,以及对分块高速缓冲器的划分情况数据;
根据所述反馈数据对所述客户端所维护的分块高速缓冲器进行划分。
可选地,当所述客户端作为接收端,所述服务端作为发送端时,所述接收服务端的文件包括:
向所述服务端发送数据请求包,所述数据请求包包括未下载的数据的组块信息;
接收所述服务端返回的应答数据包,对应答数据包进行校验,当校验成功继续执行下述步骤,否则丢弃该应答数据包;
判断所述应答数据包的类型;
当所述应答数据包为ACK应答数据包,将该应答数据包内的数据内容保存至对应的组块中,并将对应的组块标记为已接收状态;
当所述应答数据包为NAK应答数据包,不执行任何操作或根据该应答数据包的内容将对应的组块标记为未接收状态。
可选地,所述统计所有组块数据的传输状况,对未成功传输的组块数据进行补充传输包括:
根据所有组件标记的状态,统计出所有状态不是已接收状态的组块;
针对所有状态不是已接收状态的组块,再次执行所述接收服务端的文件的步骤。
可选地,所述针对所有状态不是已接收状态的组块,再次执行所述接收服务端的文件的步骤之后还包括:
当分块高速缓冲器内的所有组块均接收到对应数据后,将当前分块高速缓冲器内的所有数据写入所述客户端的文件中。
可选地,当所述客户端作为发送端,所述服务端作为接收端时,所述上传文件至服务端包括:
将客户端所维护的分块高速缓冲器中的每个组块的数据依次打包为数据包发送至所述服务端,每个数据包包括一个组块的数据以及上传的去向信息;
接收所述服务端返回的应答数据包,所述应答数据包包含对应于相应组块的应答结果。
可选地,所述统计所有组块数据的传输状况,对未成功传输的组块数据进行补充传输包括:
根据全部应答结果,统计没有应答结果或应答结果为上传失败的组块;
针对所有的没有应答结果或应答结果为上传失败的组块,执行所述上传文件至服务端的步骤。
可选地,所述针对所有的没有应答结果或应答结果为上传失败的组块数据,执行所述上传文件至服务端的步骤之后还包括:
当所有组块的应答结果均为上传成功,向服务端发出缓存刷新请求。
为实现上述目的,本发明还提供一种计算机设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述非稳定链路的可靠文件传输方法。
为实现上述目的,本发明还提供一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述非稳定链路的可靠文件传输方法。
相较于现有技术,本发明所提出的非稳定链路的可靠文件传输方法、计算机设备及存储介质,充分利用全双工通讯的优势,数据发送端无需在每包数据传输完成后等待ACK应答,且只针对丢包和错包进行动态数据补发,无需全部重发,节省了传输时间,且保证了文件传输的稳定性。
附图说明
图1是本发明各实施例之文件收发***的构成示意图;
图2是本发明第一实施例之非稳定链路的可靠文件传输方法的流程示意图;
图3是本发明第一实施例之根据与所述服务端的第一交互操作将所述分块高速缓冲器分为若干大小一致的组块的流程示意图;
图4是本发明第一实施例之下载过程中接收服务端的文件的流程示意图;
图5是本发明第一实施例之下载过程中统计所有组块数据的传输状况,对未成功传输的组块数据进行补充传输的流程示意图;
图6是本发明第一实施例之下载文件过程的时序图;
图7是本发明第一实施例之上传过程中上传文件至服务端的流程示意图;
图8是本发明第一实施例之上传过程中统计所有组块数据的传输状况,对未成功传输的组块数据进行补充传输的流程示意图;
图9是本发明第一实施例之上传文件过程的时序图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
第一实施例
本发明的非稳定链路的可靠文件传输方法应用于文件收发***的客户端100,参照图1,所述文件收发***还包括服务端200,所述客户端100与服务端200各自维护一个大小一致的分块高速缓冲器300(cache),分块高速缓冲器300的容量由服务端200和客户端100协商决定,参照图2,所述方法包括如下步骤S401-S403:
步骤S401,根据与所述服务端200的第一交互操作将所述分块高速缓冲器300分为若干大小一致的组块(chunk);
本步骤中,与客户端100所维护的分块高速缓冲器300的情况相对应,所述客户端100维护的分块高速缓冲器300也被分为了等数量且大小一致的组块(chunk);
步骤S402,执行文件传输操作,以组块为单位接收服务端200的文件或上传文件至服务端200;其过程中,被传输的文件被分割为若干与所述分块高速缓冲器300大小一致的数据块并被依次加载至发送端维护的分块高速缓冲器300,两个分块高速缓冲器300之间每次传输一个组块的数据;
本步骤中,文件的传输过程有可能是由客户端100上传文件至服务端200,也有可能是由客户端100请求服务端200的文件并将对应文件下载至本端,不管是上传文件还是下载文件,文件的传输过程均是由作为发送端的一端的分块高速缓冲器300发送至作为接收端的一端的分块高速缓冲器300,且传输过程为每次传输一个组块(chunk)的数据。由于被传输的文件一般大于分块高速缓冲器300的容量,因此,对文件传输时,先将待传输文件划分为与分块高速缓冲器300的容量大小一致的数据块(block)(当然,最后一个数据块的大小可以小于分块高速缓冲器300的容量大小),再将数据块依次加载至作为发送端的一端的分块高速缓冲器300。作为接收端的一端根据所收到的组块数据的编号在其维护的分块高速缓冲器300内重新组织数据顺序,以确保最终数据顺序的一致性。
步骤S403,统计所有组块数据的传输状况,对未成功传输的组块数据进行补充传输。
本步骤中,由于只针对未成功传输的组块数据进行补充传输,无需全部重发,因此可有效节约时间。针对未成功传输的组块数据补充传输后,再次检查统计是否有组块数据未成功传输并针对再次补发,如此循环往复,直至全部组块数据均被正确接收,或者超过最大补发次数限制以传输失败处理。
可选地,参照图3,步骤S401中所述根据与所述服务端200的第一交互操作将所述分块高速缓冲器300分为若干大小一致的组块包括如下步骤S501-S503:
步骤S501,发送所述客户端100的存储信息至所述服务端200,所述存储信息包括客户端100允许的最大组块数量信息以及每个组块的容量信息;
本步骤中,服务端200接收到客户端100的存储信息后,可根据自身的空闲内容容量动态调整其维护的分块高速缓冲器300的大小,并根据客户端100的最大组块数量信息以及每个组块的容量信息对调整好的分块高速缓冲器300进行划分,并将确定后的分块高速缓冲器300的容量信息以及对分块高速缓冲器300的划分情况数据反馈给客户端100。
步骤S502,接收所述服务端200返回的反馈数据,所述反馈数据包括客户端100确定后的分块高速缓冲器300的容量信息,以及对分块高速缓冲器300的划分情况数据;
步骤S503,根据所述反馈数据对所述客户端100所维护的分块高速缓冲器300进行划分。
下面将对客户端100作为发送端以及作为接收端两种状况下文件传输情况进行分开介绍。
第一种情形:当所述客户端100作为接收端,所述服务端200作为发送端时,此时文件传输操作体现为客户端100的下载过程,下载过程可成为读(READ)文件,此情形下,参照图4,步骤S403中所述接收服务端200的文件包括如下步骤S601-S605:
步骤S601,向所述服务端200发送数据请求包,所述数据请求包包括未下载的数据的组块信息;
本步骤主要是客户端100向服务端200发生下载请求,客户端100根据当前已下载的文件偏移位置生成当前其维护的分块高速缓冲器300中全部未下载的组块数据的数据请求包,然后一次性发送到服务端200,数据请求包所包含的信息具体到描述下载哪个文件的哪个组块数据。服务端200接收到数据请求包后,首先进行校验,对于校验错误的数据请求包直接丢弃,然后针对校验通过的数据请求包检查请求参数,参数检查通过后将数据请求包所请求的组块内的数据通过ACK数据包的形式发送给客户端100;对于参数检查未通过的数据请求包返回NAK数据包。
步骤S602,接收所述服务端200返回的应答数据包,对应答数据包进行校验,当校验成功继续执行下述步骤,否则丢弃该应答数据包;
步骤S603,判断所述应答数据包的类型;当所述应答数据包为ACK应答数据包,进入步骤S604,当所述应答数据包为NAK应答数据包,进入步骤S605;
步骤S604,将该应答数据包内的数据内容保存至对应的组块中,并将对应的组块标记为已接收状态;
步骤S605,不执行任何操作或根据该应答数据包的内容将对应的组块标记为未接收状态。
基于此,参照图5,在下载状态下,步骤S403中所述统计所有组块数据的传输状况,对未成功传输的组块数据进行补充传输包括如下步骤S701-S702:
步骤S701,根据所有组件标记的状态,统计出所有状态不是已接收状态的组块;
本步骤中,不是已接收状态的组块对应的传输失败情形可能有两种,一种是错包,即收到服务端200返回的应答数据包为NAK应答数据包;另一种是丢包,即未收到服务端200返回的对应于该组块的应答数据包。
步骤S702,针对所有状态不是已接收状态的组块,再次执行所述接收服务端200的文件的步骤。
本步骤中,执行所述接收服务端200的文件的步骤是指执行上述步骤S601-S605。
可选地,所述针对所有状态不是已接收状态的组块,再次执行所述接收服务端200的文件的步骤之后还包括如下步骤S800:
步骤S800,当分块高速缓冲器300内的所有组块均接收到对应数据后,将当前分块高速缓冲器300内的所有数据写入所述客户端100的文件中。
上述过程称为缓存回写,步骤S800仅完成了一个数据块的回写过程,循环执行上述文件传输步骤依次将待传输文件的所有数据块进行传输并回写至客户端100的文件中,可完成整个文件的下载过程。如果欲下载的组块数据并不存在于服务端200的分块高速缓冲器300中,但正好是下一个文件块的第一个组块数据,则服务端200将下一个文件块加载到分块高速缓冲器300中后(即完成当前文件块的缓存回写过程后),再处理应答。
参照图6为下载文件过程的时序图,图中首次处理cache0时chunk1的请求未获得服务端200响应(数据包丢失),第二次处理cache0时chunk1将被补发。对于NAK错误(错包)也是一致的处理流程。
第二种情形:当所述客户端100作为发送端,所述服务端200作为接收端时,此为上传过程,可以认为是写(WRITE)文件,参照图7,此时步骤S402中所述上传文件至服务端200包括如下步骤S901-S902:
步骤S901,将客户端100所维护的分块高速缓冲器300中的每个组块的数据依次打包为数据包发送至所述服务端200,每个数据包包括一个组块的数据以及上传的去向信息;
本步骤中,上传的去向信息描述了将该组块数据上传至服务端200的那个文件的那个组块中去。服务端200收到数据包后首先进行CRC校验,对于校验错误的数据包服务端200直接丢弃,对于校验通过的数据包,服务端200检查其参数,对于参数检验通过的数据包,服务端200将其内的组块数据按照去向信息写入到对应的组块中,然后向客户端100反馈关于上传成功的应答数据包,该应答数据包描述了哪个文件的哪个组块数据上传成功;对于参数检验未通过的数据包,服务端200反馈关于上传失败的应答数据包,该应答数据包描述了哪个文件的哪个组块数据上传失败。
步骤S902,接收所述服务端200返回的应答数据包,所述应答数据包包含对应于相应组块的应答结果。
基于上述步骤S901-S902,参照图8,在上传过程中,步骤S403所述统计所有组块数据的传输状况,对未成功传输的组块数据进行补充传输包括如下步骤A1-A2:
步骤A1,根据全部应答结果,统计没有应答结果或应答结果为上传失败的组块;
其中,没有应答结果的组块数据对应于数据丢包,应答结果为上传失败对应于错包。
步骤A2,针对所有的没有应答结果或应答结果为上传失败的组块,执行所述上传文件至服务端200的步骤。
此处执行所述接收服务端200的文件的步骤是指执行上述步骤S901-S902,如此循环进行,直至服务端200的分块高速缓冲器300中的所有组块均成功接收到对应的数据,即客户端100成功将一个文件块上传至服务端200的分块高速缓冲器300中,服务端200将文件块写入到其文件中,当完成所有的文件块的传输,整个被传输文件传输完成。
可选地,步骤A2中所述针对所有的没有应答结果或应答结果为上传失败的组块数据,执行所述上传文件至服务端200的步骤之后还包括步骤B1:
步骤B1,当所有组块的应答结果均为上传成功,向服务端200发出缓存刷新请求。
本步骤之后,缓存刷新成功后,可继续处理下一个数据块。
参照图9为上传文件的过程的时序图,图中首次上传cache0时chunk1的请求未获得服务端200响应(数据包丢失),第二次处理cache0时chunk1将被补发。当cache0所有组块文件的ACK应答包被客户端100全部收到后,由客户端100发送一条FLUSH请求(刷新请求)来刷新服务端200的分块高速缓冲器300,然后继续下一个文件块的上传。
第二实施例
本发明还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。本实施例的计算机设备至少包括但不限于:可通过***总线相互通信连接的存储器、处理器等。存储器内存储有可执行程序,处理器运行存储器内的可执行程序以实现上述的非稳定链路的可靠文件传输方法。
第三实施例
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现上述的非稳定链路的可靠文件传输方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。