基于零碰撞散列算法的网络数据精简传输方法与流程

文档序号:13841723阅读:435来源:国知局
本发明涉及用于局域网或广域网的数据传输领域,具体为一种基于零碰撞散列算法的网络数据精简传输方法。
背景技术
::一般在网络带宽限制的情况下为了节约带宽流量采用数据压缩和重复数据删除的数据缩减技术。采用数据压缩的方式一般使用ZIP、RAR等数据块压缩算法,在数据块从客户端通过网络传输到服务器端之前进行压缩,以缩短数据块长度,服务器端在收到数据后进行解压恢复原来的数据内容,从而实现节约带宽流量的目的。由于数据块内容重复的可能性很大,而压缩算法无法利用重复的数据块,因此精简效率不高。重复数据删除可以对存储空间数据进行有效的精简,通过删除其中重复的数据,只保留其中一份,从而消除冗余数据。重复数据删除技术多用于数据备份和归档场合,因为对数据进行多次备份后,存在大量的重复数据,非常适合使用这种技术。重复数据删除技术除了可以提高存储空间的利用率,也可以有效的减少网络数据传输。但是,重复数据块的识别技术大都采用数据块指纹(即FingerPrinter,简称FP)技术,即通过散列算法计算数据块的散列值,将散列值作为数据块的指纹,常见的有MD5、SHA-1、SHA-256、SHA-512等,从纯数学角度看,如果两个数据块的指纹不同,则这两个数据块必然是不同的;然而,如果两个数据块指纹相同,仍不能断定这两个数据块是完全相同的,这是因为散列函数有可能会产生碰撞。不过,由于碰撞的概率非常小,并且可以通过提高散列位数的方法来进一步缩小碰撞概率,因此在近似条件下,可以认为数据块和指纹之间存在一一映射的关系。为了最大限度降低碰撞的概率,重复数据删除领域常用的BloomFilter数据结构被设计成采用多种hash映射,希望能既降低冲突率又保证查询效率,但是无法从根本上解决问题,仍然存在一定的误识别率和删除索引困难的缺点,因此重复数据删除技术目前难以被用于关键数据存储场合。技术实现要素:为了克服现有技术的缺陷,提供一种数据精简率高、传输速率快、安全性强的网络数据传输方法,本发明公开了一种基于零碰撞散列算法的网络数据精简传输方法。本发明通过如下技术方案达到发明目的:一种基于零碰撞散列算法的网络数据精简传输方法,包括将待传输的数据包分割,其特征是:还包括如下步骤:(1)在客户端对要传输的数据包实施切分,产生多组数据块,具体切分方法:设定一切分值,设切分值为k0,将数据包从第一个字节起算每k0大小切分成一个数据块,如此对数据包依次切分直至剩下的数据块小于k0,将剩下的数据块作为最后一个数据块,完成切分;如果数据包小于k0,则不予切分而将整个数据包作为一个数据块;(2)对一个数据块实施零碰撞散列操作,设计算所得的散列值为md5key,以md5key作为该数据块的指纹;(3)根据指纹和指纹所对应的数据块内容在客户端全局缓冲区查找是否存在相同的数据块;(4)如果客户端全局缓冲区不存在该数据块,则发送md5key和对应的数据块到服务器,服务器将md5key和数据块写入存储空间,并生成和md5key所对应的数据块标志,设数据块标志为block_id,服务器更新服务器端全局缓冲区索引,同时将block_id返回给客户端;(5)客户端收到服务器返回的block_id后,将该数据块更新到客户端缓冲区索引,随后跳至第(7)步;(6)如果数据块在客户端索引区找到相同的数据块,则取得该数据块的md5key和block_id,将md5key和block_id发送至服务器,服务器根据服务器端全局索引区找到block_id所对应的数据块,将该数据块写入存储空间;(7)对下一个数据块重复上述第(2)至第(6)步,直至数据包的所有数据块都被处理完毕,结束网络数据精简传输。所述的基于零碰撞散列算法的网络数据精简传输方法,其特征是:第(2)步对一个数据块实施零碰撞散列操作时,零碰撞散列操作采用信息-摘要第5版算法,即Message-DigestAlgorithm5,简称MD5。所述的基于零碰撞散列算法的网络数据精简传输方法,其特征是:第(1)步在客户端对要传输的数据包实施切分时,切分值为k0为512KByte;第(2)步对一个数据块实施零碰撞散列操作时,在客户端全局缓冲区存储该数据块的如下标志:md5key、block_count和block_id,其中,md5key是该数据块的指纹,block_count是和该数据块指纹相同的数据块的数量,block_id是和该数据块指纹相同的各个数据块的逻辑块编号,block_id由服务器全局索引区分配具有唯一性,存储时采用链表的形式,以md5key作为链表内每一条记录的标志,链表内的每条记录包括指纹信息、数量信息和逻辑块编号信息这三部分内容,链表的格式为:指纹数量逻辑块编号md5key(1)block_count(1)block_id(11)|block_id(12)|…|block_id(1x)md5key(2)block_count(2)block_id(21)|block_id(22)|…|block_id(2y)md5key(3)block_count(3)block_id(31)|block_id(32)|…|block_id(3z)………………md5key(n)block_count(n)block_id(n1)|block_id(n2)|…|block_id(nm)第(3)步根据指纹和指纹所对应的数据块内容在客户端全局缓冲区查找是否存在相同的数据块时,按如下步骤依次进行:a.计算待查数据块的散列值,设为md5key,设待查数据块的全局逻辑块号为block_id;b.根据md5key在链表中查找是否存在此散列值;c.如果不存在此散列值,则将和md5key所对应的block_id插入到链表的一条新记录中,并置block_count为1;d.如果存在此散列值,设链表内已有md5key(1),且md5key=md5key(1),则根据md5key(1)所对应的所有的全局逻辑块号值,逐个寻址至各个数据块,将寻址所得数据块逐个地和待查数据块按位逐一比较,如果待查数据块和所有寻址所得数据块都不同,则将待查数据块的block_id补入md5key(1)记录的逻辑块编号信息部分,并将md5key(1)记录数量信息部分的block_count(1)加1;e.如果待查数据块和寻址所得数据块中的一个相同,设待查数据块和数据块一相同,则取得数据块一的全局逻辑块号block_id(11),指定待查数据块的全局逻辑块号为block_id(11)。本发明设计了一种使用零碰撞散列算法实现精简网络传输的方法,既保持了很好的传输精简率,又能确保不存在任何指纹冲突的情况,有效地解决了以往使用的压缩技术和重复数据删除技术的缺陷。可用于高并发的非结构化数据存储引擎中。本发明的有益效果是:数据精简率高,传输速率快,安全性强,适用范围广。附图说明图1是本发明的流程图;图2是本发明在匹配数据块时的流程图。具体实施方式以下通过具体实施例进一步说明本发明。实施例1一种基于零碰撞散列算法的网络数据精简传输方法,如图1所示,按如下步骤依次进行:(1)在客户端对要传输的数据包实施切分,产生多组数据块,具体切分方法:设定一切分值,设切分值为k0,将数据包从第一个字节起算每k0大小切分成一个数据块,如此对数据包依次切分直至剩下的数据块小于k0,将剩下的数据块作为最后一个数据块,完成切分;如果数据包小于k0,则不予切分而将整个数据包作为一个数据块;本实施例中,k0=512Kbyte;(2)对一个数据块实施零碰撞散列操作,设计算所得的散列值为md5key,以md5key作为该数据块的指纹;(3)根据指纹和指纹所对应的数据块内容在客户端全局缓冲区查找是否存在相同的数据块;(4)如果客户端全局缓冲区不存在该数据块,则发送md5key和对应的数据块到服务器,服务器将md5key和数据块写入存储空间,并生成和md5key所对应的数据块标志,设数据块标志为block_id,服务器更新服务器端全局缓冲区索引,同时将block_id返回给客户端;(5)客户端收到服务器返回的block_id后,将该数据块更新到客户端缓冲区索引,随后跳至第(7)步;(6)如果数据块在客户端索引区找到相同的数据块,则取得该数据块的md5key和block_id,将md5key和block_id发送至服务器,服务器根据服务器端全局索引区找到block_id所对应的数据块,将该数据块写入存储空间;(7)对下一个数据块重复上述第(2)至第(6)步,直至数据包的所有数据块都被处理完毕,结束网络数据精简传输。本实施例中,第(2)步对一个数据块实施零碰撞散列操作时,零碰撞散列操作采用信息-摘要第5版算法,即Message-DigestAlgorithm5,简称MD5,在客户端全局缓冲区存储该数据块的如下标志:md5key、block_count和block_id,其中,md5key是该数据块的指纹,block_count是和该数据块指纹相同的数据块的数量,block_id是和该数据块指纹相同的各个数据块的逻辑块编号,block_id由服务器全局索引区分配具有唯一性,存储时采用链表的形式,以md5key作为链表内每一条记录的标志,链表内的每条记录包括指纹信息、数量信息和逻辑块编号信息这三部分内容,链表的格式为:指纹数量逻辑块编号md5key(1)block_count(1)block_id(11)|block_id(12)|…|block_id(1x)md5key(2)block_count(2)block_id(21)|block_id(22)|…|block_id(2y)md5key(3)block_count(3)block_id(31)|block_id(32)|…|block_id(3z)………………md5key(n)block_count(n)block_id(n1)|block_id(n2)|…|block_id(nm)本实施例中,第(3)步根据指纹和指纹所对应的数据块内容在客户端全局缓冲区查找是否存在相同的数据块时,如图2所示,按如下步骤依次进行:a.计算待查数据块的散列值,设为md5key,设待查数据块的全局逻辑块号为block_id;b.根据md5key在链表中查找是否存在此散列值;c.如果不存在此散列值,则将和md5key所对应的block_id插入到链表的一条新记录中,并置block_count为1;d.如果存在此散列值,设链表内已有md5key(1),且md5key=md5key(1),则根据md5key(1)所对应的所有的全局逻辑块号值,逐个寻址至各个数据块,将寻址所得数据块逐个地和待查数据块按位逐一比较,如果待查数据块和所有寻址所得数据块都不同,则将待查数据块的block_id补入md5key(1)记录的逻辑块编号信息部分,并将md5key(1)记录数量信息部分的block_count(1)加1;e.如果待查数据块和寻址所得数据块中的一个相同,设待查数据块和数据块一相同,则取得数据块一的全局逻辑块号block_id(11),指定待查数据块的全局逻辑块号为block_id(11)。图1和图2中的hashtable指链表。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1