CN106790762B - 域名解析方法和装置 - Google Patents
域名解析方法和装置 Download PDFInfo
- Publication number
- CN106790762B CN106790762B CN201710021111.4A CN201710021111A CN106790762B CN 106790762 B CN106790762 B CN 106790762B CN 201710021111 A CN201710021111 A CN 201710021111A CN 106790762 B CN106790762 B CN 106790762B
- Authority
- CN
- China
- Prior art keywords
- domain name
- name resolution
- data
- packet
- request packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
- H04L61/2546—Arrangements for avoiding unnecessary translation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/45—Network directories; Name-to-address mapping
- H04L61/4505—Network directories; Name-to-address mapping using standardised directories; using standardised directory access protocols
- H04L61/4511—Network directories; Name-to-address mapping using standardised directories; using standardised directory access protocols using domain name system [DNS]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L45/00—Routing or path finding of packets in data switching networks
- H04L45/74—Address processing for routing
- H04L45/745—Address table lookup; Address filtering
- H04L45/7453—Address table lookup; Address filtering using hashing
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/25—Mapping addresses of the same type
- H04L61/2503—Translation of Internet protocol [IP] addresses
- H04L61/2521—Translation architectures other than single NAT servers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/58—Caching of addresses or names
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/22—Parsing or analysis of headers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2101/00—Indexing scheme associated with group H04L61/00
- H04L2101/60—Types of network addresses
- H04L2101/618—Details of network addresses
- H04L2101/622—Layer-2 addresses, e.g. medium access control [MAC] addresses
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L61/00—Network arrangements, protocols or services for addressing or naming
- H04L61/09—Mapping addresses
- H04L61/10—Mapping addresses of different types
- H04L61/103—Mapping addresses of different types across network layers, e.g. resolution of network layer into physical layer addresses or address resolution protocol [ARP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种域名解析方法和装置,所述方法包括:获取域名解析请求包;将获取的所述域名解析请求包缓存至第一缓存区;在所述第一缓存区中修改缓存的所述域名解析请求包所包括的头部数据,得到与缓存的所述域名解析请求包相应的域名解析应答包的头部数据;提取缓存的所述域名解析请求包请求解析的域名以及请求的记录类型;在第二缓存区中查找与提取的所述域名对应,且属于提取的所述记录类型的预缓存的应答数据;将查找到的所述应答数据与修改后的所述域名解析请求包组合,得到域名解析应答包。本申请提供的域名解析方法提高了域名解析效率。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种域名解析方法和装置。
背景技术
随着计算机技术的发展,通过计算机使用互联网来获取信息越来越普遍。用户在使用互联网获取信息时,需要互联网协议地址(Internet Protocol Address,IP地址),而直接使用IP地址非常不便。传统技术建立了域名和IP地址的映射关系,在获取用户请求解析的域名后,根据获取的域名解析得到与该域名存在映射关系的IP地址,再根据该IP地址接入互联网。
然而,传统的域名解析方式在获取到域名解析请求包后,根据该域名解析请求包的各层数据协议逐层进行解析直至解析得到与请求解析的域名对应的IP地址,整个解析过程需要进行多次数据复制,从而导致域名解析效率低。
发明内容
基于此,有必要针对传统的域名解析方式效率低的问题,提供一种域名解析方法和装置。
一种域名解析方法,所述方法包括:
获取域名解析请求包;
将获取的所述域名解析请求包缓存至第一缓存区;
在所述第一缓存区中修改缓存的所述域名解析请求包所包括的头部数据,得到与缓存的所述域名解析请求包相应的域名解析应答包的头部数据;
提取缓存的所述域名解析请求包请求解析的域名以及请求的记录类型;
在第二缓存区中查找与提取的所述域名对应,且属于提取的所述记录类型的预缓存的应答数据;
将查找到的所述应答数据与修改后的所述域名解析请求包组合,得到域名解析应答包。
一种域名解析装置,所述装置包括:
获取模块,用于获取域名解析请求包;将获取的所述域名解析请求包缓存至第一缓存区;
修改模块,用于在所述第一缓存区中修改缓存的所述域名解析请求包所包括的头部数据,得到与缓存的所述域名解析请求包相应的域名解析应答包的头部数据;
提取模块,用于提取缓存的所述域名解析请求包请求解析的域名以及请求的记录类型;
查找模块,用于在第二缓存区中查找与提取的所述域名对应,且属于提取的所述记录类型的预缓存的应答数据;
组合模块,用于将查找到的所述应答数据与修改后的所述域名解析请求包组合,得到域名解析应答包。
上述域名解析方法和装置,将获取的域名解析请求包存储在第一缓存区中,并在该第一缓存区中完成对缓存的域名解析请求包的解析过程,将域名解析请求包中包括的头部数据修改为相应的域名解析应答包的头部数据,再将查找到的应答数据与修改后的域名解析请求包组合得到域名解析应答包。其中查找的应答数据是预先存储在第二缓存区中,在查找到后可直接与修改的域名解析请求包组合,极大地提高了域名解析效率。而且,在将应答数据从第二缓存区复制到第一缓存区后,可在第一缓存区中完成域名解析过程,有效减少了数据复制的次数,进一步提高了域名解析效率。
附图说明
图1为一个实施例中域名解析方法的应用环境图;
图2为一个实施例中用于实现域名解析方法的服务器的结构示意图;
图3为一个实施例中域名解析方法的流程示意图;
图4为一个实施例中通过选择的解析线程执行获取域名解析请求包的步骤的流程示意图;
图5为一个实施例中域名解析服务器内部架构图;
图6为一个实施例中在第一缓存区中修改缓存的域名解析请求包所包括的头部数据,得到与缓存的域名解析请求包相应的域名解析应答包的头部数据的步骤的流程示意图;
图7为一个实施例中在第二缓存区中查找与提取的域名对应,且属于提取的记录类型的预缓存的应答数据的步骤的流程示意图;
图8为一个实施例中将查找到的应答数据与修改后的域名解析请求包组合,得到域名解析应答包的步骤的流程示意图;
图9为另一个实施例中域名解析方法的流程示意图;
图10为一个实施例中域名解析过程的逻辑图;
图11为一个实施例中域名解析装置的结构框图;
图12为另一个实施例中域名解析装置的结构框图;
图13为又一个实施例中域名解析装置的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1为一个实施例中域名解析方法的应用环境图。参照图1,该域名解析方法应用于域名解析***。域名解析***包括终端110、域名解析服务器120和授权域名服务器130,终端110通过网络与域名解析服务器120连接,域名解析服务器120通过网络与授权域名服务器130连接。终端110具体可以是台式终端或移动终端,移动终端具体可以手机、平板电脑、笔记本电脑、智能手表、个人数字助理(PDA)和可联网电子阅读器等中的至少一种。域名解析服务器120和授权域名服务器130具体可以是独立的物理服务器,也可以是物理服务器集群。
如图2所示,在一个实施例中,提供一种服务器,该服务器可用作图1中的域名解析服务器120以实施一种域名解析方法。参考图2,该服务器包括通过***总线连接的处理器、非易失性存储介质、内存储器和网络接口。其中,该服务器的非易失性存储介质存储有操作***、数据库和域名解析装置,数据库中存储有按照预设应答格式封装的应答数据,该域名解析装置用于实现适用于服务器的一种域名解析方法。该服务器的处理器用于提供计算和控制能力,支撑整个服务器的运行。该服务器的内存储器为非易失性存储介质中的域名解析装置的运行提供环境,该内存储器中可储存有计算机可读指令,该计算机可读指令被所述处理器执行时,可使得所述处理器执行一种域名解析方法。该服务器的网络接口用于据以与外部的终端通过网络连接通信,比如接收终端发送的域名解析请求包以及向终端返回域名解析应答包等。服务器可以用独立的服务器或者是多个服务器组成的服务器集群来实现。本领域技术人员可以理解,图2中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的服务器的限定,具体的服务器可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
如图3所示,在一个实施例中,提供了一种域名解析方法,本实施例以该方法应用于上述图1中的域名解析服务器120来举例说明。该方法具体包括如下步骤:
S302,获取域名解析请求包。
其中,域名解析请求包是指用于请求进行域名解析的数据包。域名是由一串用点分隔的字符串组成的互联网上计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。域名解析是指将域名解析为域名解析请求包中指向的记录类型的过程。记录类型比如地址指向记录类型、邮件交换记录类型或别名记录类型等。
具体地,终端在获取用户输入的域名,并获取通过该域名接入互联网的请求时,可先确定该请求所指向的记录类型,并在本地的数据库或者缓存中查找与该获取的域名对应,且属于该请求所指向的记录类型的记录。若查找到,则根据该记录接入互联网;若未查找到,则按照域名解析请求包的格式将获取的域名和请求所指向的记录类型进行封装,生成域名解析请求包,并将该域名解析请求包发送至域名解析服务器。域名解析服务器接收终端发送的域名解析请求包,获取到域名解析请求包。
S304,将获取的域名解析请求包缓存至第一缓存区。
其中,第一缓存区是在域名解析服务器的缓存中划分出的缓存区域,用于存储获取到的域名解析请求包。具体地,域名解析服务器通过网卡接收数据包,在接收到域名解析请求包后,可通过进程将接收到的域名解析请求包缓存至第一缓存区。
在一个实施例中,域名解析服务器可通过操作***内核在内核空间启用网卡驱动进程,获取网卡接收到的域名解析请求包,将获取的域名解析请求包存储在内核空间的第一缓存区中,等待操作***内核进行响应。
在一个实施例中,域名解析服务器也可预先配置运行在内核空间中的数据包截取进程,在网卡驱动进程获取网卡接收到的域名解析请求包后,域名解析服务器用户空间中的域名解析进程可启用该数据包截取进程,通过该数据包截取进程将网卡驱动进程获取的域名解析请求包存储至用户空间的第一缓存区中,等待用户空间的域名解析进程进行响应。
其中,操作***用于管理计算机硬件与软件,操作***内核所在的区域为内核空间,内核功能模块运行在内核空间。用户空间是操作***划分的相对于内核空间的空间。网卡是工作在链路层的网络组件,用于数据包的发送和接收。网卡驱动进程是操作***内核调用来执行获取网卡接收的数据包和发送数据包至网卡的进程。数据包截取进程是预先配置的用于将网卡驱动进程获取的数据包截取到用户空间的进程。比如,域名解析服务器可利用DPDK(Data Plane Development Kit数据平面开发工具集)预先配置数据包截取进程,配置的数据包截取进程可以实现将截取的数据包直接存储传递到用户空间,不需进过内核空间的中转,该数据包截取进程可由操作***内核启用,也可由用户空间的域名解析进程启用。
S306,在第一缓存区中修改缓存的域名解析请求包所包括的头部数据,得到与缓存的域名解析请求包相应的域名解析应答包的头部数据。
其中,域名解析数据包通常包括头部数据、查询问题、应答、授权应答和附加信息五个部分。通常情形下,域名解析请求包和域名解析应答包都采用上述五部分的数据包格式。头部数据是域名解析数据包必须包括的部分,包括域名解析数据包标识、域名解析数据包标志、请求问题数、资源记录数、授权资源记录数和额外资源记录数。
域名解析数据包标识用来标识域名解析数据包,相应的域名解析请求包和域名解析应答包的域名解析数据包标识相同,可用来匹配与域名解析请求包相应的域名解析应答包。域名解析数据包标志定义了域名解析数据包是请求包还是应答包,也定义了除头部数据外的其他部分是否需要存在,以及查询的类型。请求问题数、资源记录数、授权资源记录数和额外资源记录数分别对应查询问题、应答、授权应答和附加信息四个部分的数量。
具体地,域名解析服务器可先确定与缓存的域名解析请求包对应的域名解析应答包的头部数据,根据确定的域名解析应答包的头部数据,确定域名解析请求包的头部数据中与域名解析应答包的头部数据中的差异数据。域名解析服务器可在第一缓存区中定位确定的差异数据,对定位的差异数据按照域名解析应答包的头部数据进行修改。
其中,差异数据包括域名解析数据包标志和资源记录数。比如,接收到的域名解析请求包所包括的域名解析数据包标志中表示请求包的字符为“0”,应当修改为表示应答的“1”。资源记录数根据请求问题数相应修改。
S308,提取缓存的域名解析请求包请求解析的域名以及请求的记录类型。
具体地,在域名解析请求包的查询问题部分封装了域名解析请求包所请求的域名以及请求的记录类型。域名解析服务器可在获取到域名解析请求包后,对域名解析请求包进行解析得到解析结果,从解析结果提取域名解析请求包请求解析的域名以及请求的记录类型。
其中,请求的记录类型比如地址指向记录类型、邮件交换记录类型或者别名记录类型等。地址指向记录,即A(Address)记录,又称IP(Internet Protocol)指向,用来指定主机名或域名对应的IP地址的记录。邮件交换记录,即MX(Mail Exchanger)记录,用于电子邮件***发邮件时根据收信人的地址后缀来定位邮件服务器,将收新人的地址后缀指向邮件服务器的IP地址的记录。别名指向记录记录,即CNAME记录,又称别名记录,这种记录将多个名字或域名映射到同一台计算机,记录中包括两个域名或名字,将第一域名指向第二域名的记录。
S310,在第二缓存区中查找与提取的域名对应,且属于提取的记录类型的预缓存的应答数据。
其中,第二缓存区是在域名解析服务器的缓存中划分出的缓存区域,用于存储预先封装完成的应答数据。第二缓存区与前述第一缓存区都是缓存区,但为不同的缓存区。
域名解析服务器可每次进行域名解析后,将解析结果进行记录,并将域名解析记录存储在数据库中。域名解析服务器可与权威域名服务器建立连接,检测本地存储的域名解析记录与权威域名服务器中存储的相应的域名解析记录是否一致。若不一致,则将权威域名服务器中存储的相应的域名解析记录同步到本地的数据库中。其中,执行检测操作的时间可以是预设设置的检测周期,也可以是在当前时间超过域名解析记录中包括的缓存期限时进行。
具体地,应答数据的格式是固定的,域名解析服务器可按照预设的应答格式将存储在数据库中的域名解析记录封装得到应答数据并缓存到第二缓存区中,在需要的时候进行查找。域名解析服务器可以将得到的应答数据按照应答数据所属的记录类型分类缓存至第二缓存区中,在需要进行域名解析时,根据提取的记录类型确定属于提取的记录类型的应答数据集合,再从确定的应答数据集合中筛选出与提取的域名对应预缓存的应答数据。
域名解析服务器也可以将得到的应答数据按照应答数据对应的域名分类缓存至第二缓存区中,在需要进行域名解析时,根据提取的域名确定与提取的域名对应的应答数据集合,再从确定的应答数据集合中筛选出属于提取的记录类型的预缓存的应答数据。
域名解析服务器还可以获取与存储在本地的域名解析记录对应的历史记录次数,将得到的应答数据按照应答数据对应的域名解析记录所对应的历史记录次数降序排列,并缓存至第二缓存区中,在需要进行域名解析时,查找与提取的域名对应,且属于提取的记录类型的预缓存的应答数据。
其中,步骤S308至S310与步骤S306可异步执行。
S312,将查找到的应答数据与修改后的域名解析请求包组合,得到域名解析应答包。
具体地,域名解析服务器可定位第一缓存区中缓存的修改后的域名解析请求包,将查找到的应答数据添加到定位的域名解析请求包所包括的数据的末尾,与已缓存的域名解析请求包组合得到域名解析应答包。
上述域名解析方法,将获取的域名解析请求包存储在第一缓存区中,并在该第一缓存区中完成对缓存的域名解析请求包的解析过程,将域名解析请求包中包括的头部数据修改为相应的域名解析应答包的头部数据,再将查找到的应答数据与修改后的域名解析请求包组合得到域名解析应答包。其中查找的应答数据是预先存储在第二缓存区中,在查找到后可直接与修改的域名解析请求包组合,极大地提高了域名解析效率。而且,在将应答数据从第二缓存区复制到第一缓存区后,可在第一缓存区中完成域名解析过程,有效减少了数据复制的次数,进一步提高了域名解析效率。
在一个实施例中,步骤S302具体包括在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,获取传递的数据包中包括的数据协议标识;当数据协议标识表示传递的数据包为域名解析请求包时,获取域名解析请求包。在本实施例中,第一缓存区和第二缓存区在用户空间中。
其中,数据协议标识是指数据包所包括的各层数据协议的标识。数据包在生成时,经过数据链路层、网络层和传输层等时,都会在数据包上添加相应数据协议层的数据协议标识。不同类型的数据包中包括的各层数据协议的标识不同。比如,数据包网络层数据协议标识为TCP(Transmission Control Protocol传输控制协议)/UDP(User DatagramProtocol用户数据报协议),传输层中目的端口为53端口的数据包为域名解析数据包。
具体地,域名解析服务器的操作***内核可启用预先配置的数据包截取进程,从网卡接收队列中读取数据包,并将读取数据包并传递至用户空间。用户空间的域名解析进程获取传递的数据包中包括的数据协议标识,跟据与域名解析请求包匹配的各层协议的标识,对获取的数据协议标识进行检测,当获取的数据协议标识和与域名解析请求包匹配的各层协议的标识一致时,表示传递的数据包为域名解析请求包,用户空间的域名解析进程获取该域名解析请求包。
进一步地,当获取的数据协议标识和与域名解析请求包匹配的各层协议的标识不一致时,表示传递的数据包为非域名解析请求包,用户空间的域名解析进程将传递的数据包反馈至操作***内核进行响应。
在本实施例中,将判定为域名解析请求包的数据包直接在用户空间完成域名解析,不需要经过内核空间的过渡,避免了在内核空间进行解析时需要多次进行数据复制的问题,提高了域名解析效率。而且,对判定为非域名解析请求包的数据包反馈至操作***内核进行响应,提供了对于用户空间无法完成解析的数据包的处理方式,提高了数据包解析的成功率。
在一个实施例中,该域名解析方法还包括在并行的解析线程中选择处于空闲状态的解析线程;再通过选择的解析线程执行步骤S302至步骤S312。
其中,解析线程是指用于进行域名解析的线程。处于空闲状态是指当前时间未进行域名解析。具体地,在域名解析服务器的域名解析进程中并行运行着多个解析线程,每个解析线程相互独立。域名解析服务器的域名解析进程可启用网卡驱动进程获取网卡接收到的域名解析请求包,再选择处于空闲状态的解析线程来执行对获取的域名解析请求包的域名解析过程。
在本实施例中,域名解析过程由解析线程单独完成,不涉及与其他线程之间进行数据交互处理,避免了线程交互处理数据的等待过程,进一步提高了域名解析效率。
如图4所示,在一个实施例中,域名解析方法涉及的第一缓存区和第二缓存区在用户空间中。域名解析方法中通过选择的解析线程执行获取域名解析请求包的步骤包括:
S402,在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,通过选择的解析线程获取传递的数据包中包括的数据协议标识。
具体地,域名解析服务器的操作***内核可启用预先配置的数据包截取进程,从网卡接收队列中读取数据包,并将读取数据包并传递至用户空间。域名解析服务器再通过用户空间的解析线程获取传递的数据包中包括的数据协议标识。
S404,当数据协议标识表示传递的数据包为非域名解析请求包时,通过选择的解析线程将传递的数据包缓存至用户空间中的第三缓存区。
具体地,域名解析服务器通过用户空间的解析线程将获取的数据协议标识和与域名解析请求包匹配的各层协议的标识进行比对,在比对结果表示获取的数据协议标识和与域名解析请求包匹配的各层协议的标识不一致时,判定传递的数据包为非域名解析请求包,用户空间的域名解析进程将传递的数据包缓存至用户空间中的第三缓存区。其中,第三缓存区是在域名解析服务器的缓存中划分出的缓存区域,用于存储传递至用户空间的非域名解析请求包。
S406,通过独立于并行的解析线程的内核交互线程从第三缓存区中读取数据包,并将读取的数据包反馈至操作***内核进行响应。
其中,内核交互线程是对立于解析线程存在的,与内核空间进行交互的线程。具体地,用户空间中的解析线程不能直接与操作***内核进行交互,因此将需要反馈至操作***内核进行响应的非域名解析请求包缓存至用户空间中的第三缓存区。再由可以与操作***内核进行交互的独立于并行的解析线程的内核交互线程从第三缓存区中读取数据包,并将读取的数据包缓存至内核空间的缓存区。内核空间的解析线程对缓存在内核空间的缓存区的数据包进行解析,并得到与该解析包对应的应答包。
在本实施例中,将用户空间的域名解析进程无法进行解析的非域名解析请求包反馈至操作***内核进行响应,避免了用户空间的域名解析进程对非域名解析请求包解析出现失败的问题,提高了数据包解析的成功率。
在一个实施例中,域名解析方法还可包括获取数据包并缓存至第一缓存区;在第一缓存区中检测数据包所包括的数据协议标识;当数据协议标识表示传递的数据包为域名解析请求包时,继续执行步骤S306至步骤S310。当数据协议标识表示传递的数据包为非域名解析请求包时,将缓存的数据包反馈至操作***内核进行响应。
具体地,域名解析方法中在操作***内核从网卡接收队列中读取数据包并传递至用户空间后,可直接将读取的数据包缓存至用户空间的第一缓存区。在用户空间中并行的解析线程中选择处于空闲状态的解析线程,检测缓存至第一缓存区的数据包是否为域名解析请求包。当检测判定缓存的数据包为域名解析请求包时,通过选择的解析线程继续执行步骤S306至步骤S310。当检测判定缓存的数据包为非域名解析请求包时,通过选择的解析线程将第一缓存区中的非域名解析请求包的地址指针缓存至第三缓存区。再由独立于并行的解析线程的内核交互线程根据存储在第三缓存区的地址指针从第一缓存区读取非域名解析请求包,并存储至内核空间的缓存区中。再由操作***内核对存储在内核空间缓存区的非域名解析请求包进行响应。
其中,指针是用来指示内存地址的计算机语言的变量。第二缓存区中的非域名解析请求包的地址指针指向非域名解析请求包在第二缓存区中的缓存地址。非域名解析请求包比如ARP(Address Resolution Protocol地址解析协议)请求包或者OSPF(OpenShortest Path First开放式最短路径优先)请求包等。
在本实施例中,将数据包直接缓存至第一缓存区中,在检测判定为域名解析请求包时直接执行域名解析操作,在检测判定为非域名解析请求包之后,将第一缓存区中的非域名解析请求包反馈至操作***内核进行响应。进一步减少了数据复制的次数,同时也提供了对于用户空间无法完成解析的数据包的处理方式,提高了数据包解析的成功率。
图5为一个实施例中域名解析服务器内部架构图。参考图5,域名解析服务器的***空间被划分为内核空间和用户空间,操作***内核可启用数据包截取进程从网卡接收队列中读取数据包并传递至用户空间中。用户空间中的解析线程在判定传递的数据包为域名解析数据包后,将传递的域名解析数据包缓存至第一缓存区;在判定传递的数据包为非域名解析数据包后,将传递的非域名解析数据包缓存至第三缓存区。用户空间中独立于解析线程的内核交互线程将缓存在第三缓存区的非域名解析数据包缓存至内核空间的缓存区,由操作***内核响应。
如图6所示,在一个实施例中,步骤S306具体包括如下步骤:
S602,确定第一缓存区中缓存的域名解析请求包的首地址指针。
具体地,域名解析服务器在将获取的域名解析请求包缓存至第一缓存区后,可将域名解析请求包的首地址指针保存到临时缓存文件或者日志文件中,在需要对域名解析请求包进行数据修改时再读取。
S604,确定第一缓存区中缓存的域名解析请求包中待修改数据的地址指针偏移量;待修改数据为域名解析请求包与其相应的域名解析应答包各自的头部数据中差异的数据。
具体地,域名解析服务器可先确定与缓存的域名解析请求包对应的域名解析应答包的头部数据,根据确定的域名解析应答包的头部数据,确定域名解析请求包的头部数据中与域名解析应答包的头部数据中的差异数据,将确定的差异数据作为待修改的数据。
域名解析数据包的头部数据中封装的数据通常都进行了确定的字节划分。比如,域名解析数据包的头部数据的第一字节和第二字节为域名解析数据包标识;第三字节和第四字节为域名解析数据包标志,域名解析数据包标志字符段的第一比特为标志位,“0”表示为域名解析请求包,“1”表示为域名解析应答包等。域名解析服务器可根据确定的差异数据所在的字节确定待修改数据的地址指针偏移量。
S606,根据首地址指针与地址指针偏移量在第一缓存区中定位待修改数据。
具体地,在域名解析请求包的首地址指针上增加待修改数据的地址指针偏移量可得到待修改数据的地址指针,域名解析服务器可根据得到的该地址指针确定第一缓存区中待修改数据的缓存地址。
S608,将定位的待修改数据修改为域名解析应答包中与待修改数据相应的数据。
具体地,域名解析服务器在确定的第一缓存区中待修改数据的缓存地址上写入与域名解析请求包相应的域名解析应答包的头部数据。比如,将表示数据包类型的标志位从表示请求包的标志修改为表示应答包的标志。
在本实施例中,直接在缓存域名解析请求包的第一缓存区内将域名解析请求包头部数据修改为与域名解析请求包相应的域名解析应答包的头部数据,避免了在解析过程中需要实时封装域名解析应答包的繁琐步骤,减少了应答时间,进一步提高了域名解析效率。
如图7所示,在一个实施例中,步骤S310具体包括如下步骤:
S702,获取提取的域名所映射的哈希值。
其中,哈希值是利用哈希算法将任意长度的二进制值映射得到的固定长度的较小二进制值。比如,哈希算法是将字符串的各个字符所对应的ASCII码(American StandardCode for Information Interchange,美国信息交换标准代码)进行累加,那么字符串“ming”对应的哈希值为109+105+110+103=427。具体地,域名解析服务器可根据预设的哈希算法计算得到提取的域名所映射的哈希值。
S704,在哈希表中确定哈希值所指向的链表。
其中,哈希表是用于将域名以及域名对应的应答数据的缓存地址按照域名和哈希值的映射关系存放的列表。哈希值为哈希表中的存储位置。将域名以及域名对应的应答数据存储至域名所映射的哈希值的存储位置上。链表是一种用于存储多个数据元素的链式存储结构。本实施例中,链表是指存储映射的哈希值相同的域名,且由该相同的哈希值所指向的子列表。
具体地,域名解析服务器可事先根据域名解析请求包请求的记录类型建立多个哈希表,每个哈希表对应存储属于相同记录类型的应答数据的缓存地址与对应的域名。在对应于提取的请求类型的哈希表中确定哈希值所指向的链表。域名解析服务器也可将应答数据的缓存地址对应于对应的域名和所属的记录类型存储至一个哈希表中,在该哈希表中确定哈希值所指向的链表。
S706,在链表中查找包括提取的域名且与提取的记录类型对应的结点。
其中,链表中存储的每一个元素称为结点,每个结点包括两个部分:存储数据元素的数据域和存储下一个结点地址的指针域。
具体地,域名解析服务器可根据提取的域名在确定的链表中逐个与结点的数据域中存储的域名比对,当结点内存储的域名与提取的域名一致时,确定该结点为需要查找的结点。其中,用于查找的链表属于对应于提取的请求类型的哈希表。
对于域名解析服务器将应答数据的缓存地址对应于对应的域名和所属的记录类型存储至一个哈希表的情形,域名解析服务器根据提取的域名在确定的链表中逐个与结点的数据域中存储的域名比对成功后,再根据提取的记录类型在确定的链表中逐个与结点的数据域中存储的记录类型比对,当结点内存储的记录类型与提取的记录类型一致时,确定该结点为需要查找的结点。
S708,从查找到的结点中提取应答数据的缓存地址。
S710,根据缓存地址从第二缓存区中读取相应的预缓存的应答数据。
具体地,域名解析服务器可从第二缓存区中的缓存地址读取缓存的数据,读取的缓存的数据为预缓存的应答数据。
在本实施例中,在哈希表中查找应答数据的缓存地址,再根据查找到的地址在缓存中读取应答数据,避免了直接在缓存中逐个查找对应的应答数据浪费时间的问题,极大地提高了查找速率,进一步提高了域名解析的效率。
进一步地,当域名解析服务器未在哈希表中查找到对应的应答数据时,确定提取的域名对应的主域名,并在哈希表中查找与确定的主域名对应,且属于域名起始记录类型的应答数据。其中,域名采用层次结构,按地理域或机构域进行分层,用小数点将各个层次隔开,从右到左依次为最高域名段、次高域名段等,最左的一个字段为主域名。比如请求的域名为www.xx.com,其主域名为xx.com。域名起始记录表示该主域名所对应的授权域名服务器。
在本实施例中,提供了对于未查找到与域名解析请求包所请求解析的域名和请求的记录类型对应的应答数据时的处理方法,反馈域名起始记录,使得域名解析请求方可以根据该域名起始记录向授权域名服务器发送域名解析请求,提高了域名解析的成功率。
如图8所示,在一个实施例中,步骤S312具体包括如下步骤:
S802,获取第一缓存区中修改后的域名解析请求包的首地址指针。
具体地,域名解析服务器在将获取的域名解析请求包缓存至第一缓存区后,可将域名解析请求包的首地址指针保存到临时缓存文件或者日志文件中,在需要对域名解析请求包进行数据修改时再读取。域名解析请求包在修改后首地址指针不发生改变。
S804,获取与修改后的域名解析请求包的数据总量对应的地址指针偏移量。
具体地,域名解析服务器可检测修改后的域名解析请求包的数据总量,根据检测的数量总量确定修改后的域名解析请求包在第一缓存区中所占的缓存地址区间,再根据该地址区间的大小确定地址指针偏移量。
S806,根据修改后的域名解析请求包的首地址指针和地址指针偏移量,确定应答数据的首地址指针。
具体地,域名解析服务器可在修改后的域名解析请求包的首地址指针上增加地址指针偏移量得到应答数据的首地址指针。
S808,根据应答数据的首地址指针将应答数据缓存至第一缓存区,得到缓存于第一缓存区且包括修改后的域名解析请求包以及缓存的应答数据的域名解析应答包。
具体地,确定的应答数据的首地址指针为修改后的域名解析请求包所包括的数据的最后一个字节的缓存地址的下一个缓存地址。将应答数据按照确定的该地址指针缓存至第一缓存区得到缓存于第一缓存区且包括修改后的域名解析请求包以及缓存的应答数据的域名解析应答包
在本实施例中,域名解析过程从获取域名解析请求包和得到域名解析应答包都在第一缓存区进行,只需将在第二缓存区中查找到的应答数据复制到第缓存区中域名解析请求包所包括的数据的末尾,即可与域名解析请求包组合得到域名解析应答包,提高了域名解析效率。
如图9所示,在一个实施例中,提供了一种域名解析方法,该方法具体包括如下步骤:
S902,在用户空间中并行的解析线程中选择处于空闲状态的解析线程。
S904,在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,通过选择的解析线程获取传递的数据包中包括的数据协议标识。
S906,根据获取的数据协议标识判断传递的数据包是否为域名解析请求包;若是,则跳转至步骤S908;若否,则跳转至步骤S910。
S908,通过选择的解析线程获取域名解析请求包,并跳转至步骤S912。
S910,通过选择的解析线程将传递的数据包缓存至用户空间中的第三缓存区,通过独立于并行的解析线程的内核交互线程从第三缓存区中读取数据包,并将读取的数据包反馈至操作***内核进行响应。
S912,将获取的域名解析请求包缓存至用户空间中的第一缓存区。
S914,通过选择的解析线程确定第一缓存区中缓存的域名解析请求包的首地址指针。确定第一缓存区中缓存的域名解析请求包中待修改数据的地址指针偏移量;待修改数据为域名解析请求包与其相应的域名解析应答包各自的头部数据中差异的数据。根据首地址指针与地址指针偏移量在第一缓存区中定位待修改数据。将定位的待修改数据修改为域名解析应答包中与待修改数据相应的数据。
S916,通过选择的解析线程提取缓存的域名解析请求包请求解析的域名以及请求的记录类型。
S918,检测当前时间是否超出应答数据所包括的缓存期限;若否,则跳转难道步骤S920,若是,则跳转到步骤S922。
其中,缓存期限是指应答数据的有效期。对域名解析得到的属于各个记录类型的结果不是固定不变的。在当前时间超出应答数据所包括的缓存期限时,需要检测封装为应答数据的域名解析记录是否发生改变。在域名解析记录未发生改变时,重置应答数据所包括的缓存期限。
S920,通过选择的解析线程获取提取的域名所映射的哈希值。在哈希表中确定哈希值所指向的链表。在链表中查找包括提取的域名且与提取的记录类型对应的结点。从查找到的结点中提取应答数据的缓存地址。根据缓存地址从第二缓存区中读取相应的预缓存的应答数据。
S922,更新域名解析记录,按照预设应答格式将更新的域名解析记录封装为更新的应答数据,将第二缓存区中预缓存的应答数据替换为更新的应答数据,跳转到步骤S920。
具体地,在当前时间超出应答数据所包括的缓存期限时,域名解析服务器可与权威域名服务器建立连接,检测本地存储的域名解析记录与权威域名服务器中存储的相应的域名解析记录是否一致。若不一致,则根据权威域名服务器中存储的相应的域名解析记录更新本地的域名解析记录,按照预设应答格式将更新的域名解析记录封装为更新的应答数据,将第二缓存区中预缓存的应答数据替换为更新的应答数据。
S924,通过选择的解析线程获取第一缓存区中修改后的域名解析请求包的首地址指针。获取与修改后的域名解析请求包的数据总量对应的地址指针偏移量。根据修改后的域名解析请求包的首地址指针和地址指针偏移量,确定应答数据的首地址指针。根据应答数据的首地址指针将应答数据缓存至第一缓存区,得到缓存于第一缓存区且包括修改后的域名解析请求包以及缓存的应答数据的域名解析应答包。
在本实施例中,将获取的域名解析请求包存储在用户空间中的第一缓存区中,通过单独的解析线程在该第一缓存区中完成对缓存的域名解析请求包的解析过程,避免了线程交互处理数据的等待过程,提高了数据处理效率。查找的应答数据是预先存储在用户空间中的第二缓存区中,在查找到后可直接与修改的域名解析请求包组合,极大地提高了域名解析效率。而且,域名解析过程中需要的数据均存储在用户空间的缓存区中,无需从磁盘中读取,极大地提高了数据处理速度。并且在将应答数据从第二缓存区复制到第一缓存区后,可在第一缓存区中完成域名解析过程,有效减少了数据复制的次数,进一步提高了域名解析效率。
图10为一个实施例中域名解析过程的逻辑图。参考图10,域名解析服务器的***空间被划分为内核空间和用户空间,操作***内核可启用数据包截取进程将网卡驱动进程读取的数据包传递至用户空间中。域名解析服务器将域名解析数据包缓存至用户空间中的第一缓存区,并在用户空间中的第二缓存区中查找与域名解析数据包所请求解析的域名对应,且属于请求的记录类型的应答数据,将查找到的应答数据存储至第一缓存区中域名解析请求包的末尾,并对域名解析请求包的包头数据进行修改,得到域名解析应答包。对于非域名解析应答包则反馈至操作***内核响应。
如图11所示,在一个实施例中,提供了一种域名解析装置1100,包括:获取模块1101、修改模块1102、提取模块1103、查找模块1104和组合模块1105。
获取模块1101,用于获取域名解析请求包;将获取的域名解析请求包缓存至第一缓存区。
修改模块1102,用于在第一缓存区中修改缓存的域名解析请求包所包括的头部数据,得到与缓存的域名解析请求包相应的域名解析应答包的头部数据。
提取模块1103,用于提取缓存的域名解析请求包请求解析的域名以及请求的记录类型。
查找模块1104,用于在第二缓存区中查找与提取的域名对应,且属于提取的记录类型的预缓存的应答数据。
组合模块1105,用于将查找到的应答数据与修改后的域名解析请求包组合,得到域名解析应答包。
上述域名解析装置,将获取的域名解析请求包存储在第一缓存区中,并在该第一缓存区中完成对缓存的域名解析请求包的解析过程,将域名解析请求包中包括的头部数据修改为相应的域名解析应答包的头部数据,再将查找到的应答数据与修改后的域名解析请求包组合得到域名解析应答包。其中查找的应答数据是预先存储在第二缓存区中,在查找到后可直接与修改的域名解析请求包组合,极大地提高了域名解析效率。而且,在将应答数据从第二缓存区复制到第一缓存区后,可在第一缓存区中完成域名解析过程,有效减少了数据复制的次数,进一步提高了域名解析效率。
在一个实施例中,获取装置1101还用于在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,获取传递的数据包中包括的数据协议标识;当数据协议标识表示传递的数据包为域名解析请求包时,获取域名解析请求包。在本实施例中,第一缓存区和第二缓存区在用户空间中。
在本实施例中,将判定为域名解析请求包的数据包直接在用户空间完成域名解析,不需要经过内核空间的过渡,避免了在内核空间进行解析时需要多次进程数据复制的问题,提高了域名解析效率。对判定为非域名解析请求包的数据包反馈至操作***内核进行响应,提供了对于用户空间无法完成解析的数据包的处理方式,提高了数据包解析的成功率。
在一个实施例中,修改模块1102还用于确定第一缓存区中缓存的域名解析请求包的首地址指针;确定第一缓存区中缓存的域名解析请求包中待修改数据的地址指针偏移量;待修改数据为域名解析请求包与其相应的域名解析应答包各自的头部数据中差异的数据;根据首地址指针与地址指针偏移量在第一缓存区中定位待修改数据;将定位的待修改数据修改为域名解析应答包中与待修改数据相应的数据。
在本实施例中,直接在缓存域名解析请求包的第一缓存区内将域名解析请求包头部数据修改为与域名解析请求包相应的域名解析应答包的头部数据,避免了在解析过程中需要实时封装域名解析应答包的繁琐步骤,减少了应答时间,进一步提高了域名解析效率。
在一个实施例中,查找模块1104还用于获取提取的域名所映射的哈希值;在哈希表中确定哈希值所指向的链表;在链表中查找包括提取的域名且与提取的记录类型对应的结点;从查找到的结点中提取应答数据的缓存地址;根据缓存地址从第二缓存区中读取相应的预缓存的应答数据。
在本实施例中,在哈希表中查找应答数据的缓存地址,再根据查找到的地址在缓存中读取应答数据,避免了直接在缓存中逐个查找对应的应答数据浪费时间的问题,极大地提高了查找速率,进一步提高了域名解析的效率。
在一个实施例中,组合模块1105还用于获取第一缓存区中修改后的域名解析请求包的首地址指针;获取与修改后的域名解析请求包的数据总量对应的地址指针偏移量;根据修改后的域名解析请求包的首地址指针和地址指针偏移量,确定应答数据的首地址指针;根据应答数据的首地址指针将应答数据缓存至第一缓存区,得到缓存于第一缓存区且包括修改后的域名解析请求包以及缓存的应答数据的域名解析应答包。
在本实施例中,域名解析过程从获取域名解析请求包和得到域名解析应答包都在第一缓存区进行,只需将在第二缓存区中查找到的应答数据复制到第缓存区中域名解析请求包的所包括数据的末尾,即可与域名解析请求包组合得到域名解析应答包,提高了域名解析效率。
图12为另一个实施例中域名解析装置1100的结构框图,参照图12,该域名解析装置1100还包括预缓存模块1106。
预缓存模块1106,用于若当前时间超出应答数据所包括的缓存期限,则更新域名解析记录;按照预设应答格式将更新的域名解析记录封装为更新的应答数据;将第二缓存区中预缓存的应答数据替换为更新的应答数据。其中应答数据通过将域名解析记录按照预设应答格式进行封装得到。
在本实施例中,将获取的域名解析请求包存储在用户空间中的第一缓存区中,通过单独的解析线程在该第一缓存区中完成对缓存的域名解析请求包的解析过程,避免了线程交互处理数据的等待过程,提高了数据处理效率。查找的应答数据是预先存储在用户空间中的第二缓存区中,在查找到后可直接与修改的域名解析请求包组合,极大地提高了域名解析效率。而且,域名解析过程中需要的数据均存储在用户空间的缓存区中,无需从磁盘中读取,极大地提高了数据处理速度。并且在将应答数据从第二缓存区复制到第一缓存区后,可在第一缓存区中完成域名解析过程,有效减少了数据复制的次数,进一步提高了域名解析效率。
如图13所示,在一个实施例中,提供了一种域名解析装置1300,包括:选择模块1301、获取模块1302、修改模块1303、提取模块1304、查找模块1305和组合模块1306。
选择模块1301,用于在并行的解析线程中选择处于空闲状态的解析线程。
获取模块1302,用于通过选择的解析线程获取域名解析请求包,将获取的域名解析请求包缓存至第一缓存区。
修改模块1303,用于通过选择的解析线程在第一缓存区中修改缓存的域名解析请求包所包括的头部数据,得到与缓存的域名解析请求包相应的域名解析应答包的头部数据。
提取模块1304,用于通过选择的解析线程提取缓存的域名解析请求包请求解析的域名以及请求的记录类型。
查找模块1305,用于通过选择的解析线程在第二缓存区中查找与提取的域名对应,且属于提取的记录类型的预缓存的应答数据。
组合模块1306,用于通过选择的解析线程将查找到的应答数据与修改后的域名解析请求包组合,得到域名解析应答包。
在本实施例中,域名解析过程由解析线程单独完成,不涉及与其他线程之间进行数据交互处理,避免了线程交互处理数据的等待过程,进一步提高了域名解析效率。
在一个实施例中,获取模块1302还用于在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,通过选择的解析线程获取传递的数据包中包括的数据协议标识;当数据协议标识表示传递的数据包为非域名解析请求包时,通过选择的解析线程将传递的数据包缓存至用户空间中的第三缓存区;通过独立于并行的解析线程的内核交互线程从第三缓存区中读取数据包,并将读取的数据包反馈至操作***内核进行响应。在本实施例中,第一缓存区和第二缓存区在用户空间中。
在本实施例中,将用户空间的域名解析进程无法进行解析的非域名解析请求包反馈至操作***内核进行响应,避免了用户空间的域名解析进程对非域名解析请求包解析出现失败的问题,提高了数据包解析的成功率。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (18)
1.一种域名解析方法,其特征在于,所述方法包括:
获取域名解析请求包;
将获取的所述域名解析请求包缓存至第一缓存区;
在所述第一缓存区中,修改缓存的所述域名解析请求包所包括的头部数据中的差异数据,得到与缓存的所述域名解析请求包相应的域名解析应答包的头部数据;所述差异数据,是根据与缓存的所述域名解析请求包相应的域名解析应答包的头部数据,以及缓存的所述域名解析请求包所包括的头部数据确定的;
提取缓存的所述域名解析请求包请求解析的域名以及请求的记录类型;
在第二缓存区中查找与提取的所述域名对应,且属于提取的所述记录类型的预缓存的应答数据;所述第二缓存区中存储有将各域名解析记录进行封装得到的应答数据;
将查找到的所述应答数据与修改后的所述域名解析请求包组合,得到域名解析应答包。
2.根据权利要求1所述的方法,其特征在于,所述第一缓存区和所述第二缓存区在用户空间中;所述获取域名解析请求包的步骤包括:
在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,获取传递的所述数据包中包括的数据协议标识;
当所述数据协议标识表示传递的所述数据包为域名解析请求包时,获取所述域名解析请求包。
3.根据权利要求1所述的方法,其特征在于,所述获取域名解析请求包的步骤之前,所述方法还包括:
在并行的解析线程中选择处于空闲状态的解析线程;
通过选择的所述解析线程执行所述获取域名解析请求包的步骤,所述将获取的所述域名解析请求包缓存至第一缓存区的步骤,所述在所述第一缓存区中修改缓存的所述域名解析请求包所包括的头部数据,得到与缓存的所述域名解析请求包相应的域名解析应答包的头部数据的步骤,所述提取缓存的所述域名解析请求包请求解析的域名以及请求的记录类型的步骤,所述在第二缓存区中查找与提取的所述域名对应,且属于提取的所述记录类型的预缓存的应答数据的步骤,以及所述将查找到的所述应答数据与修改后的所述域名解析请求包组合,得到域名解析应答包的步骤。
4.根据权利要求3所述的方法,其特征在于,所述第一缓存区和所述第二缓存区在用户空间中;所述通过选择的所述解析线程执行所述获取域名解析请求包的步骤包括:
在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,通过选择的所述解析线程获取传递的所述数据包中包括的数据协议标识;
当所述数据协议标识表示传递的所述数据包为非域名解析请求包时,通过选择的所述解析线程将传递的所述数据包缓存至所述用户空间中的第三缓存区;
通过独立于并行的解析线程的内核交互线程从所述第三缓存区中读取数据包,并将读取的数据包反馈至所述操作***内核进行响应。
5.根据权利要求1所述的方法,其特征在于,所述在所述第一缓存区中,修改缓存的所述域名解析请求包所包括的头部数据中的差异数据,得到与缓存的所述域名解析请求包相应的域名解析应答包的头部数据的步骤包括:
确定所述第一缓存区中缓存的所述域名解析请求包的首地址指针;
确定所述第一缓存区中缓存的所述域名解析请求包中待修改数据的地址指针偏移量;所述待修改数据为所述域名解析请求包与其相应的域名解析应答包各自的头部数据中差异的数据;
根据所述首地址指针与所述地址指针偏移量在所述第一缓存区中定位所述待修改数据;
将定位的所述待修改数据修改为所述域名解析应答包中与所述待修改数据相应的数据。
6.根据权利要求1所述的方法,其特征在于,所述应答数据通过将域名解析记录按照预设应答格式进行封装得到;
所述方法还包括:
若当前时间超出所述应答数据所包括的缓存期限,则
更新所述域名解析记录;
按照预设应答格式将更新的所述域名解析记录封装为更新的应答数据;
将所述第二缓存区中预缓存的所述应答数据替换为所述更新的应答数据。
7.根据权利要求1所述的方法,其特征在于,所述在第二缓存区中查找与提取的所述域名对应,且属于提取的所述记录类型的预缓存的应答数据的步骤包括:
获取提取的所述域名所映射的哈希值;
在哈希表中确定所述哈希值所指向的链表;
在所述链表中查找包括提取的所述域名且与提取的所述记录类型对应的结点;
从查找到的所述结点中提取应答数据的缓存地址;
根据所述缓存地址从所述第二缓存区中读取相应的预缓存的应答数据。
8.根据权利要求1所述的方法,其特征在于,所述将查找到的所述应答数据与修改后的所述域名解析请求包组合,得到域名解析应答包的步骤包括:
获取所述第一缓存区中修改后的所述域名解析请求包的首地址指针;
获取与修改后的所述域名解析请求包的数据总量对应的地址指针偏移量;
根据修改后的所述域名解析请求包的首地址指针和所述地址指针偏移量,确定所述应答数据的首地址指针;
根据所述应答数据的首地址指针将所述应答数据缓存至所述第一缓存区,得到缓存于所述第一缓存区且包括修改后的所述域名解析请求包以及缓存的所述应答数据的域名解析应答包。
9.一种域名解析装置,其特征在于,所述装置包括:
获取模块,用于获取域名解析请求包;将获取的所述域名解析请求包缓存至第一缓存区;
修改模块,用于在所述第一缓存区中,修改缓存的所述域名解析请求包所包括的头部数据中的差异数据,得到与缓存的所述域名解析请求包相应的域名解析应答包的头部数据;所述差异数据,是根据与缓存的所述域名解析请求包相应的域名解析应答包的头部数据,以及缓存的所述域名解析请求包所包括的头部数据确定的;
提取模块,用于提取缓存的所述域名解析请求包请求解析的域名以及请求的记录类型;
查找模块,用于在第二缓存区中查找与提取的所述域名对应,且属于提取的所述记录类型的预缓存的应答数据;所述第二缓存区中存储有将各域名解析记录进行封装得到的应答数据;
组合模块,用于将查找到的所述应答数据与修改后的所述域名解析请求包组合,得到域名解析应答包。
10.根据权利要求9所述的装置,其特征在于,所述第一缓存区和所述第二缓存区在用户空间中;所述获取装置还用于在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,获取传递的所述数据包中包括的数据协议标识;当所述数据协议标识表示传递的所述数据包为域名解析请求包时,获取所述域名解析请求包。
11.根据权利要求9所述的装置,其特征在于,所述装置还包括:
选择模块,用于在中并行的解析线程中选择处于空闲状态的解析线程;
所述获取模块还用于通过选择的所述解析线程获取域名解析请求包,将获取的所述域名解析请求包缓存至第一缓存区;
所述修改模块还用于通过选择的所述解析线程在所述第一缓存区中修改缓存的所述域名解析请求包所包括的头部数据,得到与缓存的所述域名解析请求包相应的域名解析应答包的头部数据;
所述提取模块还用于通过选择的所述解析线程提取缓存的所述域名解析请求包请求解析的域名以及请求的记录类型;
所述查找模块还用于通过选择的所述解析线程在第二缓存区中查找与提取的所述域名对应,且属于提取的所述记录类型的预缓存的应答数据;
所述组合模块还用于通过选择的所述解析线程将查找到的所述应答数据与修改后的所述域名解析请求包组合,得到域名解析应答包。
12.根据权利要求11所述的装置,其特征在于,所述第一缓存区和所述第二缓存区在用户空间中;所述获取模块还用于在操作***内核从网卡接收队列中读取数据包并传递至用户空间时,通过选择的所述解析线程获取传递的所述数据包中包括的数据协议标识;当所述数据协议标识表示传递的所述数据包为非域名解析请求包时,通过选择的所述解析线程将传递的所述数据包缓存至所述用户空间中的第三缓存区;通过独立于并行的解析线程的内核交互线程从所述第三缓存区中读取数据包,并将读取的数据包反馈至所述操作***内核进行响应。
13.根据权利要求9所述的装置,其特征在于,所述修改模块还用于确定所述第一缓存区中缓存的所述域名解析请求包的首地址指针;确定所述第一缓存区中缓存的所述域名解析请求包中待修改数据的地址指针偏移量;所述待修改数据为所述域名解析请求包与其相应的域名解析应答包各自的头部数据中差异的数据;根据所述首地址指针与所述地址指针偏移量在所述第一缓存区中定位所述待修改数据;将定位的所述待修改数据修改为所述域名解析应答包中与所述待修改数据相应的数据。
14.根据权利要求9所述的装置,其特征在于,所述应答数据通过将域名解析记录按照预设应答格式进行封装得到;
所述装置还包括:
预缓存模块,用于若当前时间超出所述应答数据所包括的缓存期限,则更新所述域名解析记录;按照预设应答格式将更新的所述域名解析记录封装为更新的应答数据;将所述第二缓存区中预缓存的所述应答数据替换为所述更新的应答数据。
15.根据权利要求9所述的装置,其特征在于,所述查找模块还用于获取提取的所述域名所映射的哈希值;在哈希表中确定所述哈希值所指向的链表;在所述链表中查找包括提取的所述域名且与提取的所述记录类型对应的结点;从查找到的所述结点中提取应答数据的缓存地址;根据所述缓存地址从所述第二缓存区中读取相应的预缓存的应答数据。
16.根据权利要求9所述的装置,其特征在于,所述组合模块还用于获取所述第一缓存区中修改后的所述域名解析请求包的首地址指针;获取与修改后的所述域名解析请求包的数据总量对应的地址指针偏移量;根据修改后的所述域名解析请求包的首地址指针和所述地址指针偏移量,确定所述应答数据的首地址指针;根据所述应答数据的首地址指针将所述应答数据缓存至所述第一缓存区,得到缓存于所述第一缓存区且包括修改后的所述域名解析请求包以及缓存的所述应答数据的域名解析应答包。
17.一种服务器,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至8中任一项所述的方法的步骤。
18.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
Priority Applications (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710021111.4A CN106790762B (zh) | 2017-01-11 | 2017-01-11 | 域名解析方法和装置 |
MA047252A MA47252A (fr) | 2017-01-11 | 2017-12-22 | Procédé de résolution de nom de domaine, serveur et support de stockage |
KR1020197013202A KR102199403B1 (ko) | 2017-01-11 | 2017-12-22 | 도메인 네임 분석 방법, 서버 및 저장 매체 |
JP2019524972A JP6816275B2 (ja) | 2017-01-11 | 2017-12-22 | ドメイン名解析方法、サーバー及び記憶媒体 |
EP17891473.5A EP3570512B1 (en) | 2017-01-11 | 2017-12-22 | Domain name resolution method, server and storage medium |
PCT/CN2017/117904 WO2018130061A1 (zh) | 2017-01-11 | 2017-12-22 | 域名解析方法、服务器和存储介质 |
US16/357,082 US10826869B2 (en) | 2017-01-11 | 2019-03-18 | Domain name resolution method, server and storage medium |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710021111.4A CN106790762B (zh) | 2017-01-11 | 2017-01-11 | 域名解析方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106790762A CN106790762A (zh) | 2017-05-31 |
CN106790762B true CN106790762B (zh) | 2022-05-24 |
Family
ID=58947925
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710021111.4A Active CN106790762B (zh) | 2017-01-11 | 2017-01-11 | 域名解析方法和装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US10826869B2 (zh) |
EP (1) | EP3570512B1 (zh) |
JP (1) | JP6816275B2 (zh) |
KR (1) | KR102199403B1 (zh) |
CN (1) | CN106790762B (zh) |
MA (1) | MA47252A (zh) |
WO (1) | WO2018130061A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106790762B (zh) | 2017-01-11 | 2022-05-24 | 腾讯科技(深圳)有限公司 | 域名解析方法和装置 |
CN107483604B (zh) * | 2017-08-29 | 2020-12-15 | 武汉斗鱼网络科技有限公司 | Nginx-RTMP动态更新DNS缓存的方法和装置 |
CN108600406B (zh) * | 2018-03-27 | 2021-06-01 | 上海兆芯集成电路有限公司 | 处理不同类型请求的网络装置 |
JP7044033B2 (ja) * | 2018-11-06 | 2022-03-30 | 日本電信電話株式会社 | アクセス制御方法、アクセス制御装置、およびデータ処理装置 |
CN110147864B (zh) | 2018-11-14 | 2022-02-22 | 腾讯科技(深圳)有限公司 | 编码图案的处理方法和装置、存储介质、电子装置 |
CN111030988B (zh) * | 2019-11-01 | 2022-01-04 | 烽火通信科技股份有限公司 | 一种自反馈调度导流方法及*** |
CN111711706B (zh) * | 2020-04-30 | 2023-04-07 | 广州根链国际网络研究院有限公司 | Dns递归请求方法及*** |
CN111770049B (zh) * | 2020-05-09 | 2022-06-03 | 优刻得科技股份有限公司 | 全局缓存变量及报文信息存储方法及装置 |
KR102537370B1 (ko) * | 2020-05-29 | 2023-05-30 | 주식회사 맥데이타 | 대용량 네트워크 모니터링을 위한 실시간 패킷 분석 방법 및 장치 |
KR102423039B1 (ko) * | 2020-06-30 | 2022-07-21 | 주식회사 맥데이타 | 대용량 네트워크 모니터링을 위한 실시간 패킷 데이터 저장 방법 및 장치 |
CN112040027B (zh) * | 2020-09-14 | 2023-06-16 | 网易(杭州)网络有限公司 | 一种数据处理的方法及装置、电子设备、存储介质 |
CN112887442B (zh) * | 2021-01-11 | 2023-02-07 | 杭州迪普科技股份有限公司 | 域名解析查询请求的处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103634315A (zh) * | 2013-11-29 | 2014-03-12 | 杜跃进 | 域名服务器的前端控制方法及*** |
CN104917851A (zh) * | 2015-05-08 | 2015-09-16 | 亚信科技(南京)有限公司 | 信息处理方法及dns缓存服务器 |
CN105162900A (zh) * | 2015-09-25 | 2015-12-16 | 中国互联网络信息中心 | 一种多节点协作的域名解析和缓存方法及*** |
CN105681483A (zh) * | 2015-12-29 | 2016-06-15 | 赛尔网络有限公司 | 基于dns服务器测量特定ip范围解析占比的方法及*** |
CN106096023A (zh) * | 2016-06-24 | 2016-11-09 | 腾讯科技(深圳)有限公司 | 数据读取方法、数据写入方法及数据服务器 |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040073707A1 (en) * | 2001-05-23 | 2004-04-15 | Hughes Electronics Corporation | Generating a list of network addresses for pre-loading a network address cache via multicast |
US7769826B2 (en) * | 2003-06-26 | 2010-08-03 | Nominum, Inc. | Systems and methods of providing DNS services using separate answer and referral caches |
US7440453B2 (en) * | 2004-11-12 | 2008-10-21 | International Business Machines Corporation | Determining availability of a destination for computer network communications |
US7467230B2 (en) * | 2006-02-28 | 2008-12-16 | Microsoft Corporation | Global names zone |
CN100544372C (zh) * | 2007-06-14 | 2009-09-23 | 中兴通讯股份有限公司 | 一种电话号码映射域名服务器的内存处理方法及装置 |
US7783764B2 (en) * | 2008-05-27 | 2010-08-24 | Silver Spring Networks, Inc. | Multi-protocol network registration and address resolution |
US8677018B2 (en) * | 2008-08-25 | 2014-03-18 | Google Inc. | Parallel, side-effect based DNS pre-caching |
US9197486B2 (en) * | 2008-08-29 | 2015-11-24 | Google Inc. | Adaptive accelerated application startup |
CN102075432B (zh) * | 2011-01-25 | 2012-11-28 | 上海聚欣网络科技有限公司 | 一种用于发送及接收报文的方法、装置、设备及*** |
US9083644B2 (en) * | 2012-02-14 | 2015-07-14 | International Business Machines Corporation | Packet routing for embedded applications sharing a single network interface over multiple virtual networks |
US9215205B1 (en) * | 2012-04-20 | 2015-12-15 | Infoblox Inc. | Hardware accelerator for a domain name server cache |
CN102882991B (zh) * | 2012-09-29 | 2016-03-30 | 北京奇虎科技有限公司 | 一种浏览器及其进行域名解析的方法 |
US9531849B2 (en) * | 2014-06-19 | 2016-12-27 | Cavium, Inc. | Method of splitting a packet into individual layers for modification and intelligently stitching layers back together after modification and an apparatus thereof |
US10061619B2 (en) * | 2015-05-29 | 2018-08-28 | Red Hat, Inc. | Thread pool management |
CN108206814B (zh) * | 2016-12-20 | 2021-03-16 | 腾讯科技(深圳)有限公司 | 一种防御dns攻击的方法、装置及*** |
CN106790762B (zh) * | 2017-01-11 | 2022-05-24 | 腾讯科技(深圳)有限公司 | 域名解析方法和装置 |
US10375016B1 (en) * | 2018-04-02 | 2019-08-06 | Cloudflare, Inc. | Managing domain name system (DNS) record cache across multiple DNS servers using multicast communication |
-
2017
- 2017-01-11 CN CN201710021111.4A patent/CN106790762B/zh active Active
- 2017-12-22 KR KR1020197013202A patent/KR102199403B1/ko active IP Right Grant
- 2017-12-22 MA MA047252A patent/MA47252A/fr unknown
- 2017-12-22 WO PCT/CN2017/117904 patent/WO2018130061A1/zh unknown
- 2017-12-22 EP EP17891473.5A patent/EP3570512B1/en active Active
- 2017-12-22 JP JP2019524972A patent/JP6816275B2/ja active Active
-
2019
- 2019-03-18 US US16/357,082 patent/US10826869B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103634315A (zh) * | 2013-11-29 | 2014-03-12 | 杜跃进 | 域名服务器的前端控制方法及*** |
CN104917851A (zh) * | 2015-05-08 | 2015-09-16 | 亚信科技(南京)有限公司 | 信息处理方法及dns缓存服务器 |
CN105162900A (zh) * | 2015-09-25 | 2015-12-16 | 中国互联网络信息中心 | 一种多节点协作的域名解析和缓存方法及*** |
CN105681483A (zh) * | 2015-12-29 | 2016-06-15 | 赛尔网络有限公司 | 基于dns服务器测量特定ip范围解析占比的方法及*** |
CN106096023A (zh) * | 2016-06-24 | 2016-11-09 | 腾讯科技(深圳)有限公司 | 数据读取方法、数据写入方法及数据服务器 |
Also Published As
Publication number | Publication date |
---|---|
US20190215299A1 (en) | 2019-07-11 |
JP2019537372A (ja) | 2019-12-19 |
US10826869B2 (en) | 2020-11-03 |
CN106790762A (zh) | 2017-05-31 |
EP3570512A1 (en) | 2019-11-20 |
MA47252A (fr) | 2019-11-20 |
EP3570512A4 (en) | 2020-11-18 |
EP3570512B1 (en) | 2023-05-24 |
JP6816275B2 (ja) | 2021-01-20 |
KR20190062530A (ko) | 2019-06-05 |
WO2018130061A1 (zh) | 2018-07-19 |
KR102199403B1 (ko) | 2021-01-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106790762B (zh) | 域名解析方法和装置 | |
US7953077B2 (en) | Network processor with single interface supporting tree search engine and CAM | |
US9870374B2 (en) | Replicating data across data centers | |
CN105704041A (zh) | 使用硬件辅助散列表的ccn路由 | |
US20100306162A1 (en) | Proximity data import | |
US20190182208A1 (en) | Apparatus and method for correlating addresses of different internet protocol versions | |
CN113507393B (zh) | 数据加速传输方法、装置、计算机设备和存储介质 | |
US11095608B2 (en) | Cross protocol association for internet addresses for metadata association systems and methods | |
US11843650B2 (en) | Two-level cache architecture for live video streaming through hybrid ICN | |
CN106959975B (zh) | 一种转码资源缓存处理方法、装置及设备 | |
WO2021217588A1 (zh) | 一种报文解析方法和装置 | |
US20060274762A1 (en) | Method and system for supporting efficient and cache-friendly TCP session lookup operations based on canonicalization tags | |
US10185783B2 (en) | Data processing device, data processing method, and non-transitory computer readable medium | |
CN115004665A (zh) | 文件分享方法、装置及*** | |
CN106817437B (zh) | 地址记录的查询方法和装置 | |
US9576062B1 (en) | Resource object resolution management | |
JP3837670B2 (ja) | データ中継装置、連想メモリデバイス、および連想メモリデバイス利用情報検索方法 | |
WO2018233579A1 (en) | INFORMATION CENTERED NETWORKING ON MULTIPLE ACCESS NETWORK INTERFACES | |
CN109495525B (zh) | 网络组件、解析内容标识的方法和计算机可读存储介质 | |
CN113411364A (zh) | 资源获取方法、装置及服务器 | |
CN115996203B (zh) | 网络流量分域方法、装置、设备和存储介质 | |
JP2020057240A (ja) | 所属地分析用データ構築システム、所属地分析用データ構築プログラム、及び所属地分析システム | |
JP2019185663A (ja) | 関連イベント統合プログラム、装置及び方法 | |
US9135090B2 (en) | Messaging bus residing on a mobile device | |
CN115878922A (zh) | 数据热更新方法、装置、电子设备及计算机可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |