用于压缩设备与解压缩设备探索及握手的***和方法
本申请要求2014年1月10日提交的美国临时专利申请No.61/926,158的优先权,以上申请的内容以引用方式全文并入于此。
技术领域
本发明涉及数据压缩与解压缩技术领域,特别涉及含冗余的数据压缩与解压缩。
背景技术
通常通过计算机网络或在存储设备之间通过I/O(输入/输出)界面转存海量数据。例如,用户可将整个主目录从硬盘驱动器转存至非易失性存储器(如闪存驱动器)以对硬盘驱动器进行定期备份,或者可通过因特网转存大文档文件。转存数据可包括冗余数据,即接收者已经处理的数据,例如,用户在闪存驱动器上生成硬盘驱动器定期备份的情况下,将要传输至闪存驱动器的备份数据通常包括闪存驱动器中已经存在的数据。同样地,用户通过因特网转存文档文件的情况下,用户可从网络源(如一个服务器)下载文件、修正该文件并将该文件上传回该网络源,如果该文档文件未完全修正,上传文件版本和下载文件版本之间亦可存在公用数据。传输同时存储于源和目标地的冗余数据会导致I/O界面及因特网带宽的低效利用。现有压缩与解压缩方法未能利用这种数据冗余的优势,因为在千兆字节到兆兆字节数据存储上定位冗余数据通常被认为费时且低效益。
因此,需要一种于大型数据中高效、高概率地查找冗余数据的技术,该技术可最小化冗余数据的传输并可提高I/O界面以及因特网有限带宽的利用。另外,一個可使用上述技术在网络上来传输冗余数据的设备,还需要一种技术用以探索和确认另一能恢复该冗余数据的设备,并同该设备交换信息,以便于传输该冗余数据。
发明内容
本发明实施方式的附加方面及优点在以下说明书中给出并清楚描述,或从本发明实施方式的实施中得到。
根据一些实施方式,一种装置包括存储历史数据的存储器,以及至少一个处理器,该至少一个处理器设置成接收输入数据或一个或多个令牌,其中,该一个或多个令牌包含反映所述输入数据与所述历史数据之间关系的一个或多个引用令牌;以及传输第一消息至接收设备以启动一个或多个令牌的传输和/或接收。该装置进一步设置成从所述接收设备中获取第二消息以确认所述接收设备有能力处理和/或传输所述一个或多个令牌;以及响应于所述接收设备有能力处理和/或传输所述一个或多个令牌的确认,从所述接收设备中获取配置信息用于生成一个或多个令牌。该装置进一步设置成响应于所述配置信息的获取,传输所述一个或多个令牌至所述接收设备。根据一些实施方式,该装置进一步设置成响应于接收第二消息,判定资源是否可在所述装置上分配用于所述一个或多个令牌的传输。该装置还设置成响应于判定资源可在所述装置上分配,传输所述一个或多个令牌。
根据一些实施方式,所述第一消息包括第一指示符,该第一指示符设置成指示所述装置被设置成传输所述一个或多个令牌。在一些实施方式中,所述第二消息包含第二指示符,该第二指示符指示所述接收设备有能力处理所述一个或多个令牌。在一些实施方式中,所述配置信息包含第一识别码,该第一识别码设置成唯一识别所述接收设备。在一些实施方式中,所述配置信息包含用于一个或多个第二识别码的生成的第一信息,该一个或多个第二识别码设置成识别所述历史数据的一个或多个部分,该第二识别码包含在所述一个或多个令牌中以表达所述一个或多个令牌与所述历史数据之间的关系。
根据一些实施方式,所述第一消息以及所述第二消息在TCP/IP下分别被传输与接收,其中,所述第一消息为SYN包,所述第二消息为SYN+ACK包。在一些实施方式中,所述第一消息包含TCP报头和IP报头,该IP报头包含识别域,该TCP报头包含窗口域,所述识别域存储第一值,所述窗口域存储第二值,其中,所述第一及第二值的组合设置成指示所述装置被设置成传输和/或处理所述令牌。在一些实施方式中,所述配置信息同样以一个或多个TCP包传输。
根据一些实施方式,一种用于处理数据的计算机执行的方法包括:从存储器中接收历史数据;接收输入数据或一个或多个令牌,其中该一个或多个令牌包含反映所述输入数据与所述历史数据之间关系的一个或多个引用令牌;以及传输第一消息至接收设备以启动一个或多个令牌的传输和/或接收。该方法进一步包括:从所述接收设备中获取第二消息以确认所述接收设备有能力处理和/或传输所述一个或多个令牌;响应于所述接收设备有能力处理和/或传输所述一个或多个令牌的确认,从所述接收设备中获取配置信息用于生成一个或多个令牌;以及响应于所述配置信息的获取,传输所述一个或多个令牌至所述接收设备。
附图说明
体现本发明申请实施例的附图的参考说明,其中:
图1示出本发明的实施方式中的示例网络***的框图。
图2示出本发明的实施方式中的示例***的框图。
图3A-3C示出根据本发明的实施方式的便于历史数据查找的示例数据结构的框图。
图4A示出根据本发明的实施方式的示例压缩模块的框图。
图4B示出根据本发明的实施方式的示例解压缩模块的框图。
图5A-5B示出根据本发明的实施方式,与用于传输压缩数据的设备探索、确认并握手的示例方法的流程图。
图6A-6B示出根据本发明的实施方式,用于传输压缩数据的示例IPv4报头和TCP报头的框图。
具体实施方式
下面结合附图对本发明的具体实施方式进行详细描述,不论何时,同样的引用数字在整个附图中用于表示相同或相近的特征。
实施方式的描述仅为示例性描述,并不起限定作用。为描述目的,本发明和权利要求书中引用数字“第一”、“第二”以及“第三”,本领域的普通技术人员应当理解,它们不表示或不是指“特定的第一”、“特定的第二”或“特定的第三”。
根据一些实施方式,此中描述的运算、技术和/或要素可通过电子设备实现,该电子设备可包含一个或多个特殊用途计算设备。这些计算设备之间可以为硬连接以执行此中描述的运算、技术和/或要素;或可包含数字电子设备,例如:一个或多个特定用途集成电路(ASICs)或可现场编程门阵列(FPGAs),它们持续运行以执行此中描述的运算、技术和/或要素;或可包含一个或多个硬件处理器,运行该硬件处理器根据固件、存储器、其他存储件或他们的组合中的程序指令执行本发明的这些特征。这些特殊用途计算设备亦可将定制硬连接逻辑、特定用途集成电路或可现场编程门阵列与定制程序联合来完成本发明的技术和其他特征。特殊用途计算设备可以为台式计算机***、手提计算机***、手持设备、网络设备或并入硬连接和/或程序逻辑以实现本发明的技术或其他特征的任何其他设备。
一个或多个特殊用途计算设备通常可被运算***软件控制或协调,例如因特网操作***、安卓、黑莓、谷歌操作***、Windows XP、Windows Vista、Windows 7、Windows 8、Windows服务器、Windows CE、Unix、Linux、SunOS、Solaris、VxWorks或其他兼容操作***。在其他实施方式中,计算设备可被专用操作***控制。操作***控制安排计算机执行过程,执行存储管理,提供文件***、网络化及I/O/服务,并在其他项中为用户提供界面功能,例如:图形用户界面(GUI)。
图1示出实施方式描述中使用的示例***100的框图。如图1所示,***100包含第一计算机***110、网络130以及第二计算机***140。第一计算机***110包含一个或多个处理器112、存储器114、存储设备116以及网络界面118,所有这些部件可通过总线120相互通信,第一计算机***110可通过网络130与第二计算机***140交换数据。第二计算机***140也包含一个或多个处理器142、存储器144、存储设备146以及网络界面148,所有这些部件可通过总线150相互通信。
存储器114和144均可为用于存储分别由处理器112和142执行的信息和指令的随机存取存储器(RAM)或其他非易失性存储设备,存储器114和144还可用来在处理器112和142执行指令时存储临时参数或其他中间信息。在被存储于可访问处理器112和142的非临时性存储媒介(例如存储设备116和146)后,这些指令使计算机***110和140成为定制执行指令指定运算的特殊用途机器。这些指令可组织成不同软件模块,举例来说,不同软件模块可包含要素(例如软件要素、面向对象的软件要素、分类要素以及任务要素)、过程、功能、域、步骤、子程序、程序代码片段、驱动器、固件、微代码、电路、数据、数据库、数据结构、表、阵列以及变量。
通常,此处引用的“模块”一词是指硬件或固件中包含的逻辑或指软件指令的集合,可能具有入口和出口点,用编程语言如Java、Lua、C或C++编写。软件模块可汇编或链接至可执行程序,安装于动态链接库或编写在如BASIC、Perl或Python解译程序语言中。还应当注意到,软件模块可从其他模块或其自身中随时被调用,和/或可响应于检测到的项目或干扰被调用,用于在计算设备上执行的软件模块可提供在计算机可读媒介上,如压缩盘、数字录像盘、闪存驱动器、磁盘、或任何其他有形媒介,或数字下载件(通常以压缩件或安装格式存储,在执行前需要安装、解压缩或解密);这些软件代码可部分或全部存储在执行计算设备的存储器上,由计算设备执行;软件指令可嵌入固件中,如可擦可编程只读存储器(EPROM)。还应当注意,硬件模块可包括连接的逻辑单元,如选择器开关和触发器,和/或可包括可编程单元,如可编程序门阵列或处理器。此中描述的模块或计算设备功能最优由软件模块实现,但是可由硬件或固件替换。一般来说,虽然为实体组织或存储,此中描述的模块是指可与其他模块结合或可分割为子模块的逻辑模块。
计算机***110和140可以采用定制硬连接逻辑、一个或多个特定用途集成电路或现场可编程门阵列、结合计算机***促使或安排计算机***110和140成为特殊用途机器的固件和/或程序逻辑实现此中描述的技术。根据一些实施方式,此中描述的运算、功能、技术或其他特征由计算机***110和140并且响应于执行分别包含于存储器114和144中的一个或多个指令的一个或多个序列的处理器112和142执行,这些指令可从其他存储媒介如存储设备116和146中读入存储器114和144,包含于存储器114和144中的指令序列的执行促使处理器112和142执行此中描述的处理步骤。在替换实施方式中,硬连接电路替换为或结合软件指令。
此中使用的术语“非临时性媒介”是指用于存储促使机器以特殊方式运行的数据或指令的任何非临时性媒介,这些非临时性媒介可包括非易失性媒介和/或易失性媒介。举例来说,非易失性媒介可包含动态存储器如存储器114和144,非临时性媒介的通常形式包含例如软盘、软磁盘、硬盘、固态驱动器、磁带或其他任何磁性数据存储媒介、CD-ROM、其他任何光学数据存储媒介、其他任何具有空穴阵列的实体媒介、随机存取存储器、可编程只读存储器、可擦可编程只读存储器、快擦编程只读存储器、其他任何存储芯片或盒式存储器、以及等同网络版。
网络界面118和148可提供联结网络130的双向数据通信,例如,网络界面118和148可以为综合服务数字网络(ISDN)卡、光缆调制解调器、卫星调制解调器或调制解调器以提供与相应类型电话线的数据通信连接;另一个例子,网络界面118和148可以为局域网(LAN)卡,提供与兼容LAN的数据通信连接。在任一这样的实施中,网络界面118和148可发送和接收载有代表各种类型信息的数字数据流的电信号、电磁信号或光信号,并将数据流提供给存储设备116和146,处理器112和142可将数据转换为不同形式(例如通过执行软件指令来压缩或解压缩数据),然后将转换后的数据存储在存储设备中(例如存储设备116和146),以及/或者将转换后的数据通过网络界面118和148在网络130上传输
图2示出本发明实施方式的示例***200的框图。在一些实施方式中,***200如同图1中的***110一样实现,包含数据压缩模块230、数据解压缩模块250、历史数据管理器270以及探索握手模块290,在通过处理器(例如图1中的处理器112)执行时,数据压缩模块230、数据解压缩模块250、历史数据管理器270以及探索握手模块290中的至少部分可检索和/或更新存储于存储设备160中的历史数据294以及一个或多个表296。虽然图2显示***200既包含数据压缩模块230又包含数据解压缩模块250,应当理解为,***200可以只包含数据压缩模块230来压缩数据,而接收***(例如图1所示的***140)可以只包含数据解压缩模块250来接收来自***200的压缩数据,然后将数据解压缩。此外,虽然图2显示历史数据294和表296为两个独立的整体,应当理解为两者均可以为数据结构的一部分。
历史数据294包含最近压缩的数据和/或因解压缩其他数据而最近生成的数据,表296包含便于在历史数据294中查找数据片段的信息。在一些实施方式中,历史数据294包含***200认为对于特定传输来说是冗余的数据,例如,当***200接收指示传输数据至接收***(例如图1所示的***140)的指令,***200可能认为待传输数据的至少一部分已经是存储于***140中的相应历史数据的一部分,因此使数据的这部分成为冗余而不需要传输冗余数据。使用表296中的信息时,***200在历史数据294中可查找并定位冗余数据,定位冗余数据且知道***140已经存储相同冗余数据后,***200向***140传输表示冗余数据和历史数据294(和/或存储于***140的相应历史数据)之间关系的信息,这种关系可以为例如存储于***140的相应历史数据中的冗余数据的位置或大小,这种关系通常可以用比冗余数据本身更少的数据来表示,因此,关系信息的传输,而不是冗余数据,可节省在其上进行传输的媒介(如图1所示的网络130)的带宽。***200还可压缩上述信息来进一步减少传输数据的大小。关于历史数据294和表296的详细描述将在下面讨论。
数据压缩模块230可接收原始数据(例如来自图1中的处理器112执行的另一运用)和指令来压缩原始数据,数据压缩模块230然后可利用表296中的信息来从历史数据294中寻找原始数据,历史数据294的一部分可以存储在存储器(例如图1中存储器114)和/或存储设备(例如图1中的存储设备116)中。如果数据压缩模块230从历史数据294中找到了原始数据,数据压缩模块230可以生成引用令牌,该引用令牌包含协助接收***从相应历史数据中找到原始数据的相同片段的信息,包含在引用令牌中的该信息可指示在历史数据294中的位置以及与原始数据相匹配的数据的长度,然后引用令牌被传输至接收***。另一方面,如果数据压缩模块230不能从历史数据294中找到原始数据,原始数据将作为原始令牌的一部分被传输至接收***。在一些实施方式中,输入数据也可添加至历史数据294中,将在更新的历史数据294中定位所添加输入数据的信息在表296中更新。在一些实施方式中,令牌流可利用一个或多个无损数据流压缩算法在传输前被压缩。在一些实施方式中,令牌流(已压缩或未压缩)可通过如图1所示的网络界面118包格式化,包格式化的令牌流可在网络(如图1所示的网络130)上传输。数据压缩模块还可以添加原始数据到历史数据294中,将在更新的历史数据294中定位所添加数据的信息在表296中更新。
数据解压缩模块250可从数据压缩模块230所传输的令牌流中重建数据流,接收及多路分解包格式化后的数据以检索含有引用和/或原始令牌的数据包(如果为压缩数据,并解压缩多路分解的数据)得到令牌流,在此之后,数据解压缩模块250可从令牌流中识别引用令牌和/或原始令牌,数据解压缩模块250可基于引用令牌的位置和长度信息从历史数据294中检索与引用令牌相关联的数据,添加检索到的数据至输出数据流即例如处理器112上执行的另一应用,对于原始令牌,数据解压缩模块250可添加包含有原始令牌的原始数据至输出数据流。数据解压缩模块250还可更新历史数据294来包含输出数据流,将在更新的历史数据294中定位所添加数据的信息在表296中更新。
含有冗余的数据压缩与解压缩方法和***的具体实施方式在2013年12月7日提交的发明名称为数据压缩方法与装置的美国临时专利申请No.61/913,295中以及在2014年12月3日提交的发明名称为含冗余的数据压缩与解压缩的***和方法的共同未决美国非临时专利申请No.14/559,816中已经描述,上述两项专利申请的全部内容在此以引用方式并入作为参考。
历史数据管理器270在数据压缩模块230和数据解压缩模块250执行更新时管理历史数据294的创建与删除,例如,历史数据管理器270可以删除历史数据294中占有新历史数据的空间的旧数据,历史数据管理器270亦可与接收***同步,或与***200从其处接收关于历史数据变化的数据的其他***同步,这样,参与令牌流传输的两边具有相同的历史数据。压缩历史数据的同步与管理的方法和***的具体实施方式在2014年1月10日提交的发明名称为同步压缩历史数据的方法和装置的美国临时专利申请No.61/926,145中以及在2015年1月8日提交的发明名称为用于压缩与解压缩的同步历史数据的***和方法的共同未决美国非临时专利申请No.14/591,750中已经描述,上述两项专利申请的全部内容在此以引用方式并入作为参考。
探索握手模块290判定通信节点是否支持与本发明的实施方式一致的压缩和/或解压缩方法,例如,判定可包含节点是否包含数据压缩模块230和/或数据解压缩模块250以及是否可以根据本发明的实施方式处理(和/或传输)引用令牌和原始令牌。
图3A示出根据本发明的实施方式的便于历史数据查找的示例数据块结构300的框图。在一些实施方式中,历史数据(例如图2中的历史数据294)可形成一个或多个数据块,每个数据块以数据块结构300表示,数据块结构300存储于存储器(例如图1中的存储器114)和/或存储设备(例如图1中的存储设备116)中。正如后续讨论的,数据块结构可从存储器中交换出存入存储设备中,或者反向进行。每一数据块结构300包含块数据310,块数据310可包含一个或多个数据区块312和314,区块是指数据大小单位,该数据大小单位被支持与本发明的实施方式一致的压缩和/或解压缩方法的所有设备所采用。
数据块结构300亦与块表316相关联,虽然图3A显示块表316为数据块结构300的一部分且紧邻数据区块312和314,应当理解为,块表316不需要存储于与数据区块相同的位置。在一些实施方式中,块表316可以为图2中的表296的一部分,包含用于在数据块结构300中定位数据片段的信息,这些信息可包含用于识别数据片段以及数据块结构300中数据定位的识别码。如图3A所示,块表316包含存储区块签名的域318,区块签名用于代表数据特定区块的内容,例如,“1234”的区块签名关联数据区块312,另外,“5678”的区块签名关联数据区块314。关于区块签名生成的进一步描述将在下面讨论。
块表316还包含以字节存储有数据偏移的域320,数据偏移关联数据块结构300中数据的特定区块的位置。因为数据区块312为数据块结构300中第一数据区块,与数据区块312相关联的数据偏移为0,数据区块314在数据块结构中紧邻数据区块312存储。在这一特殊实施例中,数据区块312的大小为64字节,所以与数据区块314相关联的数据偏移为64字节。数据块结构300进一步包含域322,域322可用来将一个特定数据块结构300与块识别码(ID)关联起来,块ID在为历史数据存储相同数据块的***之间是一致的,唯一识别数据块。基于已知的区块签名,通过寻找与已知签名匹配的一个或多个区块签名,数据片段可在该特定数据块结构中高效地被定位(或判定为无数据片段),虽然图3A未示出,每一数据块结构300还可关联一个时间戳,查找可从最近更新的指定为工作历史数据块的数据块结构上开始。
图3B示出根据本发明的实施方式的便于历史数据查找的示例存储器块表350的框图。存储器块表350可方便从最近存储在易失性存储器(例如图1中的存储器114)的每一历史数据块(例如根据图3A中的数据块结构300存储)中查找数据片段。如图3B所示,存储器块表350包含存储块ID的域352,每一块ID识别存储器中的一个数据块结构。对于域352识别的每一数据块结构,存储器块表350进一步包含分别关联代表数据块结构内特定数据区块和数据区块位置的域354和356,基于已知签名,通过寻找与已知签名匹配的一个或多个区块签名,输入数据的片段可在存储于存储器内的一组数据块结构中高效地被定位(或判定为无数据片段),如果输入数据位于特定数据块结构中,关联这一特定数据块结构以及该数据块结构中数据位置的块ID可被检索到。在一些实施方式中,检索到的块ID以及位置信息可用来做二次甚至多次精细检索,相关内容将在下面详述。是否需要二次检索取决于区块签名如何计算——如果区块签名不能独一无二地识别数据(即不同数据值可产生相同的区块签名),二次检索可能是必要的,以确定位于数据块结构内的数据区块与输入数据完全一致,这样,由此生成的引用令牌准确代表输入数据。
图3C示出根据本发明的实施方式的便于历史数据查找的示例磁盘块表370的框图。磁盘块表370可方便从最近存储在非易失性存储器(例如图1中的存储器116)的每一历史数据块(例如根据图3A中的数据块结构300存储)中查找数据片段。如图3C所示,磁盘块表370包含存储块ID的域372,每一块ID识别代表存储设备中数据块的数据块结构,对于域372识别的每一数据块结构,磁盘块表370进一步包含存储磁盘签名的域374,磁盘签名用于代表存储于存储设备中的多个数据区块的内容。
在一些实施方式中,表316、350和370提供用于查找组织为数据块结构300的历史数据(以下简称历史数据块)的层级结构,为了定位历史数据中的数据片段,通过寻找与数据的签名相匹配的一个或多个具有区块签名的区块,基于与工作历史数据块相关联的表316,从载入存储器的最近历史数据块(指定为工作历史数据块)开始查找。如果不能找到数据,基于表350上的信息,查找范围可扩展至最近载入存储器的每个历史数据块。基于一些原因,首先限定在存储器内查找是可取的,第一,很有可能存储于存储器内的数据包含最近的更新(例如,包含因压缩或解压缩而添加的数据),因此,找到数据片段的可能性会更高;第二,从存储器中访问数据通常比从存储设备中访问数据要块,这就加快查找,因此,可从最近存储于存储器上的历史数据块中开始查找。
如果从存储器中不能定位数据片段,可以从存储于存储设备上具有表370上的信息的历史数据块中开始查找,如果基于磁盘签名找到匹配,含有关联匹配磁盘签名的块ID的历史数据块可载入到存储器,那么通过关联的表316上的信息,可在最新载入的历史数据块中基于区块签名更精确地进行查找。
图4A示出根据本发明的实施方式的示例压缩模块430的框图。在一些实施方式中,压缩模块430的功能类似于如图2所示的数据压缩模块230的功能。压缩模块430包含签名生成器431、第一阶段压缩模块432以及第二阶段压缩模块433。第一阶段压缩模块432进一步包含粗查找模块434、细查找模块435、原始令牌生成器模块436以及引用令牌生成器模块437。
随着压缩模块430接收输入数据,该数据可被签名生成器431处理生成一个或多个区块签名,其中,每个区块签名与每一连续的大小为例如64字节的数据区块相关联,关于区块签名的生成将在下面进一步详述。
输入数据的至少一个区块签名生成后,生成的区块签名以及输入数据可通过第一阶段压缩模块432的粗检索模块434。基于生成的区块签名,粗检索模块可在特定历史数据块(例如工作历史数据块)中、基于例如与工作历史数据块相关联的块表316上的信息查找匹配的区块签名。在一些实施方式中,通过利用例如如图3A-3C所示的表316、350以及370上的信息,粗检索模块可对存储于存储器和存储设备中的历史数据块进行层次查找,如果找到匹配,这表明找到输入数据(或其部分)的准确副本的可能性很大,工作历史数据块中的输入数据以及与含有匹配区块签名的数据区块相关联的数据偏移可通过细检索模块。
在细检索模块435阶段,可进行工作历史数据块中输入数据的更精确查找。在一些实施方式中,进行这类查找来确定位于该工作历史数据块的数据区块与输入数据完全一致。基于数据偏移,细检索模块435可读取数据区块并针对该输入数据进行准确字节串比较来确认输入数据与数据区块完全匹配。为了最大化与相同大小输入数据的一部分相匹配的数据区块的数量,在数据偏移指示位置之前或之后,通过从工作历史数据块中读取数据区块(或其部分),细检索模块435亦可正向或反向扩大比较范围。在工作历史数据块中定位最大量匹配数据区块后,输入数据的相应部分可由引用令牌代表,该引用令牌指示历史数据块中匹配数据区块的位置及数量(或作为数据区块一部分的匹配数据的长度)。在一些实施方式中,引用令牌还包含与工作历史数据块相关联的块ID。引用令牌由引用令牌生成器模块437生成,并添加至代表输入数据的令牌流中。
另一方面,对于输入数据的一部分,尽管事实是匹配的区块签名存在,但是粗检索模块434没有找到匹配的区块签名,细检索模块435也没有精确匹配输入数据的一部分的数据片段,那么这样一个输入数据的一部分用原始令牌代表。在一些实施方式中,原始令牌包含输入数据的一部分的副本,原始令牌由原始令牌生成器模块436生成,并添加至代表输入数据的令牌流中。在一些实施方式中,压缩模块430进一步包含历史数据更新模块438,历史数据更新模块438将输入数据添加至压缩模块430可访问的历史数据中,并在存储器块表350和磁盘块表370至少之一中更新,存储器块表350和磁盘块表370中含有区块和/或为输入数据生成的磁盘签名。
第一阶段压缩模块432为令牌流生成至少一个令牌后,生成的令牌流可通过第二阶段压缩模块433进一步压缩令牌流。在一些实施方式中,第二阶段压缩模块433应用无损数据流压缩算法进行压缩,然后压缩的令牌流可用来代表压缩状态的输入数据。
图4B示出根据本发明的实施方式的示例解压缩模块450的框图。在一些实施方式中,解压缩模块450的功能类似于如图2所示的数据解压缩模块250的功能。解压缩模块450包含令牌流解压缩模块451、令牌处理模块452、签名生成器模块453以及历史数据更新模块454。令牌流解压缩模块451可从例如压缩模块430中接收压缩的令牌流,根据压缩模块430的第二阶段压缩模块433使用的压缩算法进行解压缩来恢复令牌流,恢复的令牌流进而由令牌处理模块452处理,令牌处理模块452可以从令牌流中识别一个或多个引用令牌和/或原始令牌,通过引用令牌,令牌处理模块452可从解压缩模块450可访问的历史数据中定位工作历史数据块(例如最近更新的块,或由作为引用令牌的一部分传输的块ID信息所识别的数据块),并基于位置信息以及引用令牌内包含的匹配数据大小信息,提取引用令牌所代表的历史数据的一部分。令牌处理模块452还可检索包含在原始令牌内的输入数据的一部分(提供给压缩模块430),基于令牌流,令牌处理模块452可重建与输入数据一致的数据流,然后重建的数据流通过签名生成器模块453,签名生成器模块453生成区块和/或重建数据流的磁盘签名。历史数据更新模块454可将重建的数据流添加至解压缩模块450可访问的历史数据中,这样,重建的数据流与解压缩模块450可访问的历史数据匹配并在存储器块表350和磁盘块表370至少之一中更新,存储器块表350和磁盘块表370中含有区块和/或为重建数据流生成的磁盘签名。
图5A示出根据本发明的具体实施方式,与用于传输和/或接收压缩数据的设备探索、确认及握手的示例方法500的流程图。压缩数据可包含由例如图4A中的压缩模块430生成的原始令牌和引用令牌。在一些实施方式中,方法500可通过例如在电子设备(例如图1中的计算机***110)上运行的图2中的探索握手模块209实现。虽然流程图披露以下特定顺序的步骤,应当注意的是,为与本发明的公开一致,至少某些步骤可做适应性移动、修改或删除。并且,以下步骤通过电子设备实现,应当注意的是,这些步骤通过多个电子设备实现。
在步骤502中,电子设备(例如,数据压缩设备)探索到一个潜在接收设备(例如,数据解压缩设备),在启动原始令牌及引用令牌的传输之前,确认该潜在接收设备可接收并处理将由该电子设备传输的原始令牌及引用令牌。在启动传输之前先确认潜在接收设备的原因有很多,例如,原始令牌及引用令牌的生成可占据宝贵的计算资源(分配给用于存储未压缩原始数据的新数据块的存储器和磁盘空间),并且原始令牌及引用令牌的传输也占据宝贵的网络资源,因此在调配生成和传输令牌的资源之前,确认接收设备可接收并处理原始令牌及引用令牌(例如,如果该接收设备包含图4B中的解压缩模块450)是值得的。
步骤502可包含多个分步骤,参考图5B,图5B示出示例性方法503,示例性方法503可为图5A中的步骤502的一部分。首先,在步骤505中,压缩设备550(例如,探索握手模块290在其上运行的一个电子设备)传输用于启动令牌(原始令牌和/或引用令牌)传输的第一消息至解压缩设备560(例如,探索握手模块290在其上运行的另一电子设备)。在一些实施方式中,该第一消息包含第一指示符,该第一指示符设置成指示压缩设备将要传输令牌,该第一指示符还可能传递与令牌的传输和生成相关的其他信息。举例来说,压缩设备550可能不包括图4A中的第二阶段压缩模块433,当压缩设备传输引用令牌时,第一指示符则可能指示引用令牌是否已经被第二阶段压缩模块433通过例如无损数据流压缩算法进一步压缩,如果第一指示符指示压缩设备没有使用第二阶段压缩模块433来进一步压缩引用令牌,在处理接收到的引用令牌时,解压缩设备560则可决定绕过令牌流解压缩模块451,或至少通知模块451不必根据无损数据流压缩算法解压接收到的令牌。
响应于接收第一指示符,在步骤506中,解压缩设备560可判定其可接收并处理由压缩设备传输的令牌,这一判定可基于各种因素做出,举例来说,解压缩设备560的解压缩模块450的部分丧失能力而不能处理来自在压缩设备上运行的压缩模块430的令牌。解压缩设备还可能判定,例如,其是否具有足够的存储器和/或磁盘空间来分配新数据块以存储包含在原始令牌中的未压缩数据,和/或其是否具有足够的计算能力来处理令牌。在解压缩设备判定其可处理令牌,在步骤507中,解压缩设备则传输包含第二指示符的第二消息,该第二指示符设置成指示解压缩设备能处理由压缩设备传输的令牌。
在一些实施方式中,分别包含在第一及第二消息中的一个或多个数字可代表第一及第二指示符,不同的数字用以代表不同信息(例如,压缩设备表示其试图启动令牌传输,或解压缩设备表示其可处理令牌,等),信息接收者则可基于接收到的指示符的值判定它们的含义。在一些实施方式中,指示符之间的映射关系以及它们所体现的信息仅为一组设备(例如,具有图4A中的压缩模块430和/或图4B中的解压缩模块450的设备)所知,这样安排可幫助降低,例如,仿作解压缩设备的冒充设备拦截第一消息并回复第二消息来误导压缩设备传输令牌的可能性。虽然此处讨论了数字,应当理解为,第一及第二指示符可以为数字、符号和/或字母的任何组合。
压缩设备接收第二消息后,在步骤508中,确认解压缩设备可处理令牌,并判定压缩设备将传输令牌至解压缩设备。压缩设备可基于第二消息是否包含暗示解压缩设备可接收并处理令牌的第二识别码来做出确认,在传输作为原始令牌的数据之前,压缩设备还可判定是否具有足够的存储器和/或磁盘空间来分配给新数据块以存储作为新历史数据的一部分的未压缩数据的。然后,在步骤509中,压缩设备还可传输第三消息至解压缩设备以告知从解压缩设备中接收到了第二消息并表明最终选择的压缩方法(例如,是否使用第二阶段压缩模块433来进一步压缩令牌),接收到第三消息和/或令牌后,解压缩可分配资源来处理令牌(图5B中未示出)。
在一些实施方式中,令牌的传输和接收可在传输控制协议/互联网协议(TCP/IP)下进行,第一消息可为SYN包,第二消息可为SYN+ACK包,第三消息可为设置成确认探索及握手的第一数据包,在解压缩设备分配资源来处理令牌之前,进行三向TCP握手。在一些实施方式中,这些包中的每一个包含一个互联网协议版本4(IPv4)或一个互联网协议版本6(IPv6)报头以及一个TCP报头。IPv4报头的定义在例如1981年9月由互联网工程任务组(IETF)发行的请求注解(RFC)791中有描述,相关内容以引入方式并入于此。TCP报头的定义在例如1981年9月由互联网工程任务组(IETF)发行的请求注解(RFC)793中有描述,相关内容以引入方式并入于此。
参考图6A以及图6B,图6A以及图6B示出根据本发明的具体实施方式,用于传输压缩数据的示例性IPv4报头600以及示例性TCP报头650的框图。如图6A所示,IPv4报头600包含版本域601、互联网报头长度(IHL)域602、服务类型(TOS)域603、包长度域604、识别域605、标志域606、片段偏差域607、存活时间(TTL)域608、协议域609、检查总和域610、源IP地址域611以及终点IP地址域612。进一步,如图6B所示,TCP报头650包含源端口域651、终点端口域652、序列号域653、确认号域654、数据偏差域655、标志域656、窗口域657、检查总和域658以及紧急指针域659。窗口域657可用来存储指示接收设备在TCP传输中可接收的数据量的数字,通常或设定在一个相对较大的数字以避免影响接收设备在接收数据中的处理量。在一些实施方式中,存储于窗口域657中的数字可以为质数或奇数。在一些实施方式中,存储于窗口域657中的数字可进一步编码以为令牌传输传递其他信息(例如,指示压缩设备是否使用第二阶段压缩模块433来进一步压缩引用令牌,或仅使用第一阶段压缩模块432来生成令牌)。
在一些实施方式中,压缩设备可使用存储于IPv4报头600的识别域605中的值以及存储于TCP报头650的窗口域657中的值的组合来执行前述的第一以及第二指示符。值得如此安排的原因有很多,例如,这些值在传输的网络设备之间几乎不变,因此它们很容易被接收设备核定,同时同与令牌传输不相关的其他TCP/IP传输同时冲突的可能性降低。在一些实施方式中,窗口域的不同的值可被分别用于第一指示符以及第二指示符的SYN包以及SYN+ACK包使用,以降低这样的可能性:流氓TCP代理可通过简单答复具有窗口域值的SYN+ACK包来模仿解压缩设备,该窗口域值从压缩设备传输的SYN包的窗口域值中复制而来,这样的安排可避免使压缩设备遭受流氓TCP代理的拒绝服务攻击(例如,TCP代理通过发送假的第二消息使压缩设备分配计算资源)。
回至图5A,在步骤502电子设备探索到潜在的接收设备并同该接收设备确认其可接收并处理令牌后,电子设备可进行步骤522,在步骤522中与确认的设备进行握手,该握手是为了两设备相互交换用于令牌生成的配置信息(对于压缩设备)以及用于令牌处理的配置信息(对于解压缩设备),两设备亦可相互交换第二识别码,该第二识别码设置成唯一识别每一设备。在一些实施方式中,第二识别码可用来判定什么数字用于块ID,例如,如果压缩设备发现压缩设备的第二识别码具有比解压缩设备的第二识别码小的值,压缩设备可能仅使用奇数用作块ID。此外,两设备还可交换关于可指定作为块ID的数字的范围的信息,如此安排可提高两设备具有访问相同组数据块的可能性、两设备使用完全相同组块ID来针对完全相同数据块的可能性以及两设备从完全相同组数字中为最近创建的数据块分配块ID的可能性。在一些实施方式中,握手信息以TCP包传输和接收。
在步骤522中与确认的设备握手以获取用于令牌生成的配置信息后,电子设备可执行步骤542,接收输入数据,然后执行步骤562,传输令牌至该确认的设备,其中该令牌包含反映输入数据与历史数据之间关系(被块ID识别的数据块中的完全相同的数据的位置及大小)的引用令牌。
上述的说明书中,实施方式描述了根据不同实施而不同的很多特定的细节,当然可作出对所描述的实施方式的某些适应性的改变和修正,对于本领域的技术人员,参考本发明的所公开的说明书及实施,其他实施方式是显而易见的。说明书和实施例仅作为示例性说明,本发明的真正保护范围及精神由以下的权利要求书限定。附图中所示的步骤顺序仅用于说明目的,并不是对任何步骤的特定顺序的限定,同样地,本领域的技术人员可领会到在实施相同方法时这些步骤可以以不同顺序进行。