一种网络数据包断点续传方法及装置
技术领域
本发明涉及数据包下载或者上传的传输技术,具体是一种网络数据包断点续传方法及装置,此方法及装置可避免数据包的重复下载或者上传。
背景技术
目前存在大量用户需要下载超大时间跨度的数据包(24小时以上),所以下载所用时间比较久。在下载时间内,往往由于用户网络环境问题出现掉线情况,需要重新连接下载。比较常规的做法是,当出现端点掉线后,重现开始下载,如图1所示的数据包下载过程中出现断点时的处理方法的示意图,当下载数据包到3秒500000纳秒时,控制台和服务器断开连接,此时,只能从“Begin”重新开始下载,导致下载效率低下。
因此,FTP协议在处理断点时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以只重新上传或者下载未完成的某一个或者某几个部分,而没有必要从头开始上传或者下载所有的文件。但这样的方法显然还是无法避免下载或者上传重复的数据包。
发明内容
针对现有技术中的网络数据断点续传方法存在重复传输相同数据包,导致效率低下的技术问题,本发明公开了一种网络数据包断点续传方法,本发明还公开了实现网络数据包断点续传的装置。
本发明的技术方案如下:
本发明公开了一种网络数据包断点续传方法,其具体包括以下的步骤:步骤一、网络服务器将网络数据包按照抓包的时间依序进行存储,每个网络数据包都有相应的时间戳;步骤二、下载请求发起端向网络服务器发起下载请求,并同时将请求的下载时间段一起提供给网络服务器,网络服务器根据下载时间段读取相应时间戳的数据包;步骤三、下载请求发起端收到网络数据包后,解析并且保存每次传输的最后一个网络数据包的时间戳和该网络数据包的最后N个字节,当下载请求发起端和网络服务器之间断开并重新连接后,下载请求发起端将记录的最后一个数据包的时间戳和该数据包的最后N个字节同下载数据包请求参数一起发送给网络服务器,网络服务器根据最后一个网络数据包的时间戳依序读取该时间戳下的数据包,直到读取到某个数据包的最后N个字节和下载请求发起端发送给网络服务器的最后N个字节完全一致,则下一个数据包作为发送给下载请求发起端的第一个数据包,然后再依序进行网络数据包的发送。通过保存最后收到的一个数据包的时间戳和最后N个字节,在服务器上对数据包进行筛选,避免重复传输相同的数据包,占用网络资源,同时只筛选该时间戳下的数据包,提高了筛选的效率。该筛选动作在服务器上完成,还利用了服务器运算效率高的特点,避免在下载请求发起端上进行运算,降低了对下载请求发起端硬件的要求,同时提高了用户的使用体验。
更进一步地,上述方法还包括设置两个参数,一个为每次传输的最后一个网络数据包的时间戳,另外一个为该网络数据包的最后N个字节,这两个参数分别对应两个存储空间,当下载请求发起端收到新的网络数据包后,根据新的网络数据包的值更新这两个参数。设置这两个参数,每次只要进行参数更新,不需要保存过多的无用信息,提高了存储的效率,这两个参数的初始值为空。
更进一步地,上述N为46。实际上N也可以为其他整数,只不过为46的时候效果最好,因为数据包的最后46字节,正常情况下是数据包的负载数据,而负载数据是最没规律和变化最大的,由于IP数据包大小都是>=46字节的,所以采用这种方式。但这种方式也不是100%不重复下载,只是很大程度上降低了重复的几率。如:服务器的包是由发包工具拿固定的1个包进行高速发送,只要1us之内不只一个数据包,那么下载的时候,只能保证1us之外的数据包不会重复下载。
更进一步地,上述方法还包括当网络服务器在该时间戳下未读取到某个数据包的最后N个字节和下载请求发起端发送给网络服务器的最后N个字节完全一致时,以该时间戳的第一个数据包作为发送给下载请求发起端的第一个数据包。这是因为在网络传输过程中有可能会出现噪音干扰等情况,使之后续的识别出现误差,此时,将该时间戳的第一个数据包作为发送给下载请求发起端的第一个数据包,只处理该时间戳下的数据包,避免数据包大量的重复发送。
更进一步地,上述方法还包括当网络服务器在该时间戳下未读取到某个数据包的最后N个字节和下载请求发起端发送给网络服务器的最后N个字节完全一致时,下载请求发起端将将记录的最后一个数据包的时间戳和该数据包的最后N个字节同下载数据包请求参数重新发送给网络服务器。当出现上述的问题时,也可以通过采用下载请求发起端重新发送参数的方式来消除干扰出现的问题。
更进一步地,上述方法还包括下载请求发起端在重新与网络服务器连接后,将收到的第一个网络数据包与已经存储的网络数据包进行比较,判断是否重复,是,则删除,并继续判断下一个网络数据包。因为上述的方法不能保证100%不重复下载,只是很大程度上降低了重复的几率,因此在下载请求发起端与网络服务器连接后,可以针对第一个收到的网络数据包进行判断,重复则继续判断下一个数据包,否则视为未重复。
更进一步地,上述时间戳的单位为纳秒。使用“数据包最后46字节+数据包时间戳纳秒”作为判断数据包唯一的标识,由网络服务器端处理数据包的筛选,减少重复发送数据包,减少传输通道的占用。
更进一步地,上述适用于C/S模式的网络。C/S模式,即客户机和服务器结构。通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
本发明公开还了一种网络数据包断点续传装置,其具体包括下载请求发起端和网络服务器;所述下载请求发起端包括解析单元和存储单元,所述解析单元用于解析每次传输的最后一个网络数据包的时间戳和该网络数据包的最后N个字节,所述存储单元用于将解析出的时间戳和字节进行存储;所述网络服务器包括判断单元和筛选单元,所述判断单元用于判断保存的每次传输的最后一个网络数据包的时间戳和该网络数据包的最后N个字节这两个值是否为空,为空,则,直接根据下载时间段读取相应时间戳的数据包,不为空则执行筛选单元;所述筛选单元用于根据最后一个网络数据包的时间戳依序读取该时间戳下的数据包,直到读取到某个数据包的最后N个字节和下载请求发起端发送给网络服务器的最后N个字节完全一致,则下一个数据包作为发送给下载请求发起端的第一个数据包。
通过采用以上的技术方案,本发明的有益效果为:是基于网络数据包下载的功能,解决C/S模式由网络原因造成下载中断的问题,使用“数据包最后46字节+数据包时间戳纳秒”作为判断数据包唯一的标识,由网络服务器端处理数据包的筛选,减少重复发送数据包,减少了传输通道的占用。
附图说明
图1为现有技术中数据包下载过程中出现断点时的处理方法的示意图。
图2为本发明的断点续传方法的实现流程示意图。
具体实施方式
下面结合说明书附图,详细说明本发明的具体实施方式。
下面以数据下载为例进行说明,数据上传可类比使用该方法或者装置即可。
本发明公开了一种网络数据包断点续传方法,其具体包括以下的步骤:步骤一、网络服务器将网络数据包按照抓包的时间依序进行存储,每个网络数据包都有相应的时间戳;所有的网络数据包都依照一定的顺序在服务器上进行存储,其都存在时间戳的标识。即使是在同一个时间戳下的网络数据包,其存储也有其特有的顺序。
因此,只要找到了时间戳,就能够找到对应的网络数据包。步骤二、下载请求发起端向网络服务器发起下载请求,并同时将请求的下载时间段一起提供给网络服务器,网络服务器根据下载时间段读取相应时间戳的数据包;下载时间段包括下载的开始时间点和截至时间点,在发送下载请求时,请求发起端都需要发送这两个参数给服务器,服务器根据这两个参数判断请求端的下载请求内容。
步骤三、下载请求发起端收到网络数据包后,解析并且保存每次传输的最后一个网络数据包的时间戳和该网络数据包的最后N个字节,比如最后的46个字节或者其他个数的字节,可以根据需要进行一些其他的设定,并不限定一定是46个字节。当下载请求发起端和网络服务器之间断开并重新连接后,下载请求发起端将记录的最后一个数据包的时间戳和该数据包的最后N个字节同下载数据包请求参数一起发送给网络服务器,网络服务器根据最后一个网络数据包的时间戳依序读取该时间戳下的数据包,直到读取到某个数据包的最后N个字节和下载请求发起端发送给网络服务器的最后N个字节完全一致,当然,也未必一定要是完全一致,也可以根据需要进行其他的模糊设定。在本申请中不进行限定。则下一个数据包作为发送给下载请求发起端的第一个数据包,然后再依序进行网络数据包的发送。通过保存最后收到的一个数据包的时间戳和最后N个字节,在服务器上对数据包进行筛选,避免重复传输相同的数据包,占用网络资源,同时只筛选该时间戳下的数据包,提高了筛选的效率。该筛选动作在服务器上完成,还利用了服务器运算效率高的特点,避免在下载请求发起端上进行运算,降低了对下载请求发起端硬件的要求,同时提高了用户的使用体验。
如图2所示的本发明的断点续传方法的实现流程示意图。初始的最后一个数据包的时间戳和该数据包的最后N个字节这两个值为空,当网络服务器判断这两个数据包为空时,依照下载请求发起端提供的下载时间段(比如1S到5S)直接进行网络数据包的下载发送。这部分的实现方式不属于本发明的重点改进,在此不详细进行赘述。
当出现断点后重新连接时,最后一个数据包的时间戳和该数据包的最后N个字节这两个值均不为空了,下载请求发起端即使提供的下载时间段仍为1S到5S后,但网络服务器是根据最后一个数据包的时间戳比如3500000纳秒在网络服务器中首先找到3500000纳秒对应的第一个网络数据包,然后逐个帅选数据包,直到数据包的最后N个字节和下载请求发起端发送的最后一个数据包的最后N个字节相同,则将该网络数据包的下一个数据包发送给下载请求发起端。
更进一步地,上述方法还包括设置两个存储空间用于存储对应的两个参数,一个为每次传输的最后一个网络数据包的时间戳,另外一个为该网络数据包的最后N个字节,这两个参数分别对应两个存储空间,当下载请求发起端收到新的网络数据包后,根据新的网络数据包的值更新这两个参数。设置这两个参数,每次只要进行参数更新,不需要保存过多的无用信息,提高了存储的效率,这两个参数的初始值为空。
更进一步地,上述N为46。实际上N也可以为其他整数,只不过为46的时候效果最好,因为数据包的最后46字节,正常情况下是数据包的负载数据,而负载数据是最没规律和变化最大的,由于IP数据包大小都是>=46字节的,所以采用这种方式。但这种方式也不是100%不重复下载,只是很大程度上降低了重复的几率。如:服务器的包是由发包工具拿固定的1个包进行高速发送,只要1us之内不只一个数据包,那么下载的时候,只能保证1us之外的数据包不会重复下载。
更进一步地,上述方法还包括当网络服务器在该时间戳下未读取到某个数据包的最后N个字节和下载请求发起端发送给网络服务器的最后N个字节完全一致时,以该时间戳的第一个数据包作为发送给下载请求发起端的第一个数据包。这是因为在网络传输过程中有可能会出现噪音干扰等情况,使之后续的识别出现误差,此时,将该时间戳的第一个数据包作为发送给下载请求发起端的第一个数据包,只处理该时间戳下的数据包,避免数据包大量的重复发送。
更进一步地,上述方法还包括当网络服务器在该时间戳下未读取到某个数据包的最后N个字节和下载请求发起端发送给网络服务器的最后N个字节完全一致时,下载请求发起端将将记录的最后一个数据包的时间戳和该数据包的最后N个字节同下载数据包请求参数重新发送给网络服务器。当出现上述的问题时,也可以通过采用下载请求发起端重新发送参数的方式来消除干扰出现的问题。
更进一步地,上述方法还包括下载请求发起端在重新与网络服务器连接后,将收到的第一个网络数据包与已经存储的网络数据包进行比较,判断是否重复,是,则删除,并继续判断下一个网络数据包。因为上述的方法不能保证100%不重复下载,只是很大程度上降低了重复的几率,因此在下载请求发起端与网络服务器连接后,可以针对第一个收到的网络数据包进行判断,重复则继续判断下一个数据包,否则视为未重复。
更进一步地,上述时间戳的单位为纳秒。使用“数据包最后46字节+数据包时间戳纳秒”作为判断数据包唯一的标识,由网络服务器端处理数据包的筛选,减少重复发送数据包,减少传输通道的占用。
本发明公开还了一种网络数据包断点续传装置,其具体包括下载请求发起端和网络服务器;所述下载请求发起端包括解析单元和存储单元,所述解析单元用于解析每次传输的最后一个网络数据包的时间戳和该网络数据包的最后N个字节,所述存储单元用于将解析出的时间戳和字节进行存储;所述网络服务器包括判断单元和筛选单元,所述判断单元用于判断保存的每次传输的最后一个网络数据包的时间戳和该网络数据包的最后N个字节这两个值是否为空,为空,则,直接根据下载时间段读取相应时间戳的数据包,不为空则执行筛选单元;所述筛选单元用于根据最后一个网络数据包的时间戳依序读取该时间戳下的数据包,直到读取到某个数据包的最后N个字节和下载请求发起端发送给网络服务器的最后N个字节完全一致,则下一个数据包作为发送给下载请求发起端的第一个数据包。通过上述装置保存最后收到的一个数据包的时间戳和最后N个字节,在服务器上对数据包进行筛选,避免重复传输相同的数据包,占用网络资源,同时只筛选该时间戳下的数据包,提高了筛选的效率。该筛选动作在服务器上完成,还利用了服务器运算效率高的特点,避免在下载请求发起端上进行运算,降低了对下载请求发起端硬件的要求,同时提高了用户的使用体验。
上述的实施例中所给出的系数和参数,是提供给本领域的技术人员来实现或使用发明的,发明并不限定仅取前述公开的数值,在不脱离发明的思想的情况下,本领域的技术人员可以对上述实施例作出种种修改或调整,因而发明的保护范围并不被上述实施例所限,而应该是符合权利要求书提到的创新性特征的最大范围。