基于二进制编码的dns数据压缩、解压缩方法及系统的制作方法

文档序号:7982978阅读:474来源:国知局
基于二进制编码的dns数据压缩、解压缩方法及系统的制作方法
【专利摘要】本发明公开了一种基于二进制编码的DNS数据压缩、解压缩方法及系统,属于计算机网络【技术领域】。其中,DNS数据压缩方法为:1)从数据源文件中读取日志信息后,将数据打包放到一缓存队列中;2)数据压缩模块从该数据缓存队列中取出数据并压缩后,将其存储到一压缩信息缓存中;3)从该压缩信息缓存中取出数据并进行二进制编码后保存到一结果文件中。解压缩方法为:1)将结果文件中二进制编码压缩日志信息进行二进制编码解压后,保存到压缩信息缓存中;2)从缓存中取出数据,将其存储到一解压信息缓存中;3)从解压信息缓存中取出数据并进行解压得到日志记录信息。本方法实现了日志的高比例压缩,而且压缩的文件还能用gzip进一步压缩。
【专利说明】基于二进制编码的DNS数据压缩、解压缩方法及系统
【技术领域】
[0001]本发明涉及一种基于二进制编码的DNS数据压缩、解压缩方法及系统,属于计算机网络【技术领域】。
【背景技术】
[0002]域名系统(Domain Name System,DNS)是互联网基础设施提供的一项核心服务,系统包括可以将域名和IP地址相互映射的一个分布式数据库,以及实现域名和网络可以识别的IP地址转换功能的系统。
[0003]DNS经过几十年的发展,已经成为目前全球最大、最复杂的分布式数据库系统,具有良好的扩展性和高效的解析性能。同时,巨大的工作量使得DNS系统产生了海量的数据。现有的系统一般都是使用字符编码的方式保留原始日志。
[0004]现有技术的缺陷是:
[0005]DNS海量的查询和应答服务产生了巨大日志量,一方面这些日志需要在本地进行保存,另一方面很多任务都需要跨地区、跨网段进行日志传输。目前缺乏一种稳定有效的日志压缩技术来提高日志保存和传输的效率。因此,如果开发出能稳定高效运行的日志压缩系统能大大的推动目前的各项工作。

【发明内容】

[0006]针对现有技术中存在的技术问题,本发明的目的在于提供一种基于二进制编码的DNS数据压缩、解压缩方法及系统;本发明改进的方向为:
[0007]I)设计高效的DNS信息压缩算法;
[0008]2)使用二进制编码方式进行日志存储,提高压缩比例;
[0009]3)设计优良的系统架构,保证系统能进行企业级应用。
[0010]本发明的技术方案为:
[0011]一种基于二进制编码的DNS数据压缩、解压缩系统,其特征在于包括一数据读取模块,一二进制编码模块,一数据压缩模块,一二进制解码模块,一数据解压模块;其中
[0012]所述数据读取模块,用于从DNS数据源文件中读取日志信息后,将数据打包放到一缓存队列中;
[0013]所述数据压缩模块,用于从所述数据缓存队列中取出数据并压缩后,将其存储到一压缩信息缓存中;
[0014]所述二进制编码模块,用于从所述压缩信息缓存中取出数据并进行二进制编码后保存到一结果文件中;
[0015]所述二进制解码模块,用于将所述结果文件中二进制编码压缩日志信息进行二进制编码解压后,保存到压缩信息缓存中;
[0016]所述数据解压模块,用于从压缩信息缓存中取出数据,将其存储到一解压信息缓存中;然后从该解压信息缓存中取出数据并进行解压得到日志记录信息。[0017]一种基于二进制编码的DNS数据压缩方法,其步骤为:
[0018]I)数据读取模块从DNS数据源文件中读取日志信息后,将数据打包放到一缓存队列中;
[0019]2)数据压缩模块从该数据缓存队列中取出数据并压缩后,将其存储到一压缩信息缓存中;
[0020]3) 二进制编码模块从该压缩信息缓存中取出数据并进行二进制编码后保存到一结果文件中。
[0021]进一步的,采用可变长度整型编码规则进行所述二进制编码;所述可变长度整型编码的最大长度为128字节。
[0022]进一步的,二进制编码后的每个数据域包括标志字段和数据字段两部分;其中,标志字段用于指明数据的类型和数据在消息结构体中的序号,数据字段用于存储数据的值;一个DNS数据包二进制编码后对应一个消息结构体。
[0023]进一步的,所述数据压缩模块对日志信息中的时间数据信息进行压缩,其方法为:首先从所述缓存队列中读取一条记录,如果是首条记录则保留该记录完整的时间格式;否则判断当前记录的在设定级时间域及其上级时间域的时间与上一条记录的对应级时间域是否相等,如果相等,则只保留设定级时间域下一级时间的时间;如果不相等,则判断当前记录时间与上一记录时间间隔是否大于设定阈值,如果大于该阈值,则保留当前记录完整的时间格式,否则比较设定级时间域下一级时间的时间,如果当前记录设定级时间域下一级时间小于上一条记录对应时间,则只保留当前记录设定级时间域的下一级时间域的时间,否则保留当前记录完整的时间格式。
[0024]进一步的,所述设定级时间域为秒时间域,所述阈值为I秒。
[0025]进一步的,从缓存队列取出数据的时候,用哈希表做为域名和IP地址信息压缩的辅助结构。
[0026]进一步的,所述数据压缩模块对日志信息中的域名数据和IP数据信息进行压缩;a)对于域名数据进行压缩的方法为:从所述缓存队列中读取一条记录,在所述哈希链表中搜索该记录中的域名;如果存在该域名,则将该域名在哈希链表中的哈希位置保存到所述结果文件中,如果不存在该域名,则在所述哈希链表中为该域名构建结点并将该域名保存到所述结果文件中山)对于IP地址数据信息进行压缩的方法为:从所述缓存队列中读取一条记录,在所述哈希链表中搜索该记录中的IP地址;如果存在该IP,则将该IP在哈希链表中的哈希位置保存到所述结果文件中,如果不存在该IP,则在所述哈希链表中为该IP构建结点并将该IP保存到所述结果文件中。
[0027]—种基于二进制编码的DNS数据压缩文件的解压缩方法,其步骤为:
[0028]I) 二进制解码模块将结果文件中二进制编码压缩日志信息进行二进制编码解压后,保存到压缩信息缓存中;
[0029]2)数据解压模块从压缩信息缓存中取出数据,将其存储到一解压信息缓存中;
[0030]3)数据解压模块从该解压信息缓存中取出数据并进行解压得到日志记录信息。
[0031]进一步的,所述数据解压模块从该解压信息缓存中取出数据,对时间数据进行解压,其方法为:首先从所述解压信息缓存中读取一条记录,如果是完整的时间格式,则将其设为基准时间;否则判断当前记录的时间域的时间是否大于或等于上一条记录的对应时间域的时间,如果是,则利用上一条记录的完整格式时间和当前记录的时间域的时间合成当前记录的完整时间格式;如果小于,则利用上一条记录的完整格式时间将当前记录的时间域的上一级时间域加I并判断上一级时间域是否需要进制,如需要进制则利用上一条记录的完整格式时间进行调整并继续逐级判断是否需要进制,合成当前记录的完整时间格式;如果不需要进制,则利用上一条记录的完整格式时间和当前记录的时间域的时间合成当前记录的完整时间格式;其中,所述时间域为微秒时间域。
[0032]进一步的,所述数据解压模块从该解压信息缓存中取出数据,对域名数据和IP数据进行解压;a)对于域名数据,其解压方法为:从所述解压信息缓存中读取一条记录,如果域名为完整格式,则将其加入到哈希链表中并返回;如果域名信息为所述哈希链表中的位置信息,则根据该位置信息从所述哈希链表相应位置处读出域名的完整格式,并返回;b)对于IP数据,其解压方法为:从所述解压信息缓存中读取一条记录,如果IP为完整格式,则将其加入到哈希链表中并返回;如果IP信息为所述哈希链表中的位置信息,则根据该位置信息从所述哈希链表相应位置处读出IP的完整格式,并返回。
[0033]本发明整个系统由数据读取模块(即文件I/O)、数据压缩和数据解压三个部分组成。系统的进程模型如图1所示。
[0034]缓存使用了 “生产者-消费者”模式,文件I/O模块做为“生产者”从源文件(DNS数据源文件为DNS服务产生的原始日志文件,一般采用字符编码方式保存)中读取信息后,将数据打包放到缓存队列中;而数据处理模块(压缩/解压模块)则作为“消费者”,将数据从缓存中取出并进行处理。其中,压缩模块会根据算法,得到压缩后的数据信息,这时,压缩模块成为了“生产者”将信息存入到压缩信息缓存(即用来存储压缩信息的缓存)中,文件I/O模块这时候成为了“消费者”,从压缩信息缓存中取出数据,并保存到结果文件中;解压模块的处理流程类似,首先二进制解码模块将结果文件中二进制编码压缩日志信息进行二进制编码解压后,保存到压缩信息缓存中(即用来存储二进制编码解压后信息的缓存);然后数据解压模块从压缩信息缓存中取出数据,将其存储到一解压信息缓存中(即用来存储压缩信息的缓存);数据解压模块从该解压信息缓存中取出数据并进行解压得到日志记录信息。数据解压模块还原压缩前的信息,并写入到解压结果文件中。
[0035]数据压缩总的思想原则是:“去除不需要的信息,压缩冗余的数据”。在DNS信息中,时间,查询类型、IP和域名这四类信息对于分析系统进行各种数据分析统计最重要,其中时间、IP和域名这三类信息在日志文件中存在大量的冗余信息,所以可以针对这三类数据,使用特定算法,去除冗余,用较小的空间来表示相同的内容,这样就得到了特定的压缩信息。
[0036]解压模块从“压缩结果文件”中读取信息,并通过算法还原压缩前的信息,并把信息写入到解压结果文件。压缩模块主要是针对时间、IP和域名进行了压缩,所以解压模块也是针对这三个部分的信息进行解压还原。
[0037]同时,所有的信息在磁盘上保存时使用了二进制编码,这样就再一次对存储空间进行了压缩,大大节省了存储空间。原理如下所述。
[0038]系统的数字使用了 “基于128的可变长度整型”编码规则(最大长度为128字节)。这种方法是用一系列的字节来表示一个任意大小的数字,其中字节的长度是可变长的,类似于字符串。[0039]这个可变长度整型中的每个字节的第一个比特用做“标志位”,如果标志位是1,则表示这个字节非该可变长度整型的最后一个字节;如果标志位是0,则表示该字节是这个可变长度整型的最后一个字节。而标志位后面的7个比特用于组成该可变长度整型的值。同时,组成该可变长度整型的字节采用“低位在前”的表示方式。如下就是几个表示的例子。
[0040]1)“00000001”。其中第一个比特为0,表示该字节是最后一个字节,随后的7个比特位组成了这个可变长度整型的值,所以这个变长整形的值是1.[0041]2) “1010110000000010”。其中第一个字节的第一个位是1,表示该字节非最后一个字节;第二个字节的第一个位是0,表示该字节是最后一个字节。于是,组成该可变长度整型的数字段为:“0101100”和“0000010”。又因为采用了 “低位在前”的表示方式,所以,该数字的值为“00000100101100”,十进制表示为:300
[0042]在系统中每个数据域都由“标志字段”和“数据字段”组成。其中,标志字段指明了该数据的“类型”和“在消息结构体中的序号”,一个DNS数据包二进制编码后对应一个消息结构体;数据字段用于存储数据的值。
[0043]数据编码中,用编号0-5分别对应各个类型,每个数据域用三个比特来表示其类型。所用的数据类型如表1所示:
[0044]表1、数据编码类型表
[0045]
【权利要求】
1.一种基于二进制编码的DNS数据压缩方法,其步骤为: 1)数据读取模块从DNS数据源文件中读取日志信息后,将数据打包放到一缓存队列中; 2)数据压缩模块从该数据缓存队列中取出数据并压缩后,将其存储到一压缩信息缓存中; 3)二进制编码模块从该压缩信息缓存中取出数据并进行二进制编码后保存到一结果文件中。
2.如权利要求1所述的方法,其特征在于采用可变长度整型编码规则进行所述二进制编码;所述可变长度整型编码的最大长度为128字节。
3.如权利要求2所述的方法,其特征在于二进制编码后的每个数据域包括标志字段和数据字段两部分;其中,标志字段用于指明数据的类型和数据在消息结构体中的序号,数据字段用于存储数据的值;一个DNS数据包二进制编码后对应一个消息结构体。
4.如权利要求1所述的方法,其特征在于所述数据压缩模块对日志信息中的时间数据信息进行压缩,其方法为:首先从所述缓存队列中读取一条记录,如果是首条记录则保留该记录完整的时间格式;否则判断当前记录的在设定级时间域及其上级时间域的时间与上一条记录的对应级时间域是否相等,如果相等,则只保留设定级时间域下一级时间的时间;如果不相等,则判断当前记录时间与上一记录时间间隔是否大于设定阈值,如果大于该阈值,则保留当前记录完整的时间格式,否则比较设定级时间域下一级时间的时间,如果当前记录设定级时间域下一级时间小于上一条记录对应时间,则只保留当前记录设定级时间域的下一级时间域的时间,否则保留当前记录完整的时间格式。`
5.如权利要求1所述的方法,其特征在于所述数据压缩模块对日志信息中的域名数据和IP数据信息进行压缩;a)对于域名数据进行压缩的方法为:从所述缓存队列中读取一条记录,在所述哈希链表中搜索该记录中的域名;如果存在该域名,则将该域名在哈希链表中的哈希位置保存到所述结果文件中,如果不存在该域名,则在所述哈希链表中为该域名构建结点并将该域名保存到所述结果文件中山)对于IP地址数据信息进行压缩的方法为:从所述缓存队列中读取一条记录,在所述哈希链表中搜索该记录中的IP地址;如果存在该IP,则将该IP在哈希链表中的哈希位置保存到所述结果文件中,如果不存在该IP,则在所述哈希链表中为该IP构建结点并将该IP保存到所述结果文件中。
6.一种基于二进制编码的DNS数据压缩文件的解压缩方法,其步骤为: 1)二进制解码模块将结果文件中二进制编码压缩日志信息进行二进制编码解压后,保存到压缩信息缓存中; 2)数据解压模块从压缩信息缓存中取出数据,将其存储到一解压信息缓存中; 3)数据解压模块从该解压信息缓存中取出数据并进行解压得到日志记录信息。
7.如权利要求6所述的方法,其特征在于所述数据解压模块从该解压信息缓存中取出数据,对时间数据进行解压,其方法为:首先从所述解压信息缓存中读取一条记录,如果是完整的时间格式,则将其设为基准时间;否则判断当前记录的时间域的时间是否大于或等于上一条记录的对应时间域的时间,如果是,则利用上一条记录的完整格式时间和当前记录的时间域的时间合成当前记录的完整时间格式;如果小于,则利用上一条记录的完整格式时间将当前记录的时间域的上一级时间域加I并判断上一级时间域是否需要进制,如需要进制则利用上一条记录的完整格式时间进行调整并继续逐级判断是否需要进制,合成当前记录的完整时间格式;如果不需要进制,则利用上一条记录的完整格式时间和当前记录的时间域的时间合成当前记录的完整时间格式;其中,所述时间域为微秒时间域。
8.如权利要求6所述的方法,其特征在于所述数据解压模块从该解压信息缓存中取出数据,对域名数据和IP数据进行解压;a)对于域名数据,其解压方法为:从所述解压信息缓存中读取一条记录,如果域名为完整格式,则将其加入到哈希链表中并返回;如果域名信息为所述哈希链表中的位置信息,则根据该位置信息从所述哈希链表相应位置处读出域名的完整格式,并返回山) 对于IP数据,其解压方法为:从所述解压信息缓存中读取一条记录,如果IP为完整格式,则将其加入到哈希链表中并返回;如果IP信息为所述哈希链表中的位置信息,则根据该位置信息从所述哈希链表相应位置处读出IP的完整格式,并返回。
9.一种基于二进制编码的DNS数据压缩、解压缩系统,其特征在于包括一数据读取模块,一二进制编码模块,一数据压缩模块,一二进制解码模块,一数据解压模块;其中 所述数据读取模块,用于从DNS数据源文件中读取日志信息后,将数据打包放到一缓存队列中; 所述数据压缩模块,用于从所述数据缓存队列中取出数据并压缩后,将其存储到一压缩息缓存中; 所述二进制编码模块,用于从所述压缩信息缓存中取出数据并进行二进制编码后保存到一结果文件中; 所述二进制解码模块,用于将所述结果文件中二进制编码压缩日志信息进行二进制编码解压后,保存到压缩信息缓存中; 所述数据解压模块,用于从压缩信息缓存中取出数据,将其存储到一解压信息缓存中;然后从该解压信息缓存中取出数据并进行解压得到日志记录信息。
10.如权利要求9所述的系统,其特征在于所述数据压缩模块对日志信息中的时间数据信息进行压缩,其方法为:首先从所述缓存队列中读取一条记录,如果是首条记录则保留该记录完整的时间格式;否则判断当前记录的在设定级时间域及其上级时间域的时间与上一条记录的对应级时间域是否相等,如果相等,则只保留设定级时间域下一级时间的时间;如果不相等,则判断当前记录时间与上一记录时间间隔是否大于设定阈值,如果大于该阈值,则保留当前记录完整的时间格式,否则比较设定级时间域下一级时间的时间,如果当前记录设定级时间域下一级时间小于上一条记录对应时间,则只保留当前记录设定级时间域的下一级时间域的时间,否则保留当前记录完整的时间格式;所述数据解压模块从解压信息缓存中取出数据,对时间数据进行解压,其方法为:首先从所述解压信息缓存中读取一条记录,如果是完整的时间格式,则将其设为基准时间;否则判断当前记录的时间域的时间是否大于或等于上一条记录的对应时间域的时间,如果是,则利用上一条记录的完整格式时间和当前记录的时间域的时间合成当前记录的完整时间格式;如果小于,则利用上一条记录的完整格式时间将当前记录的时间域的上一级时间域加I并判断上一级时间域是否需要进制,如需要进制则利用上一条记录的完整格式时间进行调整并继续逐级判断是否需要进制,合成当前记录的完整时间格式;如果不需要进制,则利用上一条记录的完整格式时间和当前记录的时间域的时间合成当前记录的完整时间格式。
【文档编号】H04L29/12GK103685589SQ201210333176
【公开日】2014年3月26日 申请日期:2012年9月7日 优先权日:2012年9月7日
【发明者】阳任科 申请人:中国科学院计算机网络信息中心
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1