CN111371804A - Dns后端转发方法及系统 - Google Patents
Dns后端转发方法及系统 Download PDFInfo
- Publication number
- CN111371804A CN111371804A CN202010181059.0A CN202010181059A CN111371804A CN 111371804 A CN111371804 A CN 111371804A CN 202010181059 A CN202010181059 A CN 202010181059A CN 111371804 A CN111371804 A CN 111371804A
- Authority
- CN
- China
- Prior art keywords
- forwarding
- dns
- request
- thread
- response
- 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.)
- Granted
Links
Images
Classifications
-
- 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/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- 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]
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
本发明公开了一种DNS后端转发方法及系统,其中所述方法包括如下步骤:前端处理线程绕过内核协议栈直接处理数据链路层到达的网络报文并在触发转发请求时发起转发;后端请求转发线程响应转发请求,通过创建套接字接入网络与后端服务器进行通信;后端应答接收线程通过epoll系统调用监听套接字以获得后端服务器返回的应答报文。本发明可以提高网络收发包的速度,进而提升整体DNS解析的性能。
Description
技术领域
本发明涉及计算机网络通信技术领域,尤其涉及一种DNS后端转发方法及系统。
背景技术
DNS(Domain Name System,域名系统)提供了互联网上的一个重要服务,其本质是建立了人的名字世界和底层的二进制协议地址世界的桥梁。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的 IP地址数串,通过域名最终得到该域名对应的 IP 地址的过程叫做域名解析。然而,5G以及物联网的发展,带来了网络流量爆发式的增长,而DNS解析作为互联网的一项基础服务之一,其是否能够提供一个高性能的解析便直接影响到5G以及物联网的最终实现。
目前,现有技术中实现DNS解析的架构均采取内核态收发包的架构,而网络报文从网卡经过内核态最终到达用户态的过程存在很大的资源消耗,导致运行在内核态的DNS服务程序极限性能仅能达到200万QPS(Queries per second,每秒查询率)左右,这样的速度存在很大的瓶颈,完全无法满足5G以及物联网对DNS解析的要求。
发明内容
本发明的目的在于提供一种DNS后端转发方法及系统,解决了现有技术中网络收发包速度慢,DNS解析性能不佳的技术问题。
为了解决上述技术问题,本发明的一种DNS后端转发方法,包括如下步骤:
前端处理线程绕过内核协议栈直接处理数据链路层到达的网络报文并在触发转发请求时发起转发;
后端请求转发线程响应转发请求,通过创建套接字接入网络与后端服务器进行通信;
后端应答接收线程通过epoll系统调用监听套接字以获得后端服务器返回的应答报文。
作为本发明上述DNS后端转发方法的进一步改进,所述前端处理线程在DNS缓存中查找对应资源记录失败时触发转发请求。
作为本发明上述DNS后端转发方法的进一步改进,周期性分析DNS缓存中的资源记录,根据预取需要触发转发请求。
作为本发明上述DNS后端转发方法的进一步改进,所述后端请求转发线程在创建套接字接入网络时,根据负载均衡策略选择对应转发的后端服务器。
作为本发明上述DNS后端转发方法的进一步改进,发起转发时由所述前端处理线程在等待队列中注册DNS请求,并向转发队列存入DNS请求内容,所述后端请求转发线程取出转发队列中的DNS请求内容进行处理并转发给对应的后端服务器,所述后端应答接收线程在获取到后端服务器返回的DNS应答时,与所述等待队列中的DNS请求进行匹配。
作为本发明上述DNS后端转发方法的进一步改进,所述等待队列包括多个存储位,所述存储位由等待队列分配的交易识别符标记,所述DNS请求根据注册分配的交易识别符存入对应的存储位,同一存储位的DNS请求通过匹配关键词进行查找匹配。
作为本发明上述DNS后端转发方法的进一步改进,所述后端应答接收线程在需要向终端响应应答时,将接收的应答报文重组后递交给内核协议栈,由所述内核协议栈通过虚拟网卡模块返回给对应的网卡发送出去。
作为本发明上述DNS后端转发方法的进一步改进,实现数据链路层收发报文的网卡,在具有若干对收发队列时,为每对收发队列设置对应的前端处理线程、后端请求转发线程及后端应答接收线程,以保证一一对应。
为了解决上述技术问题,本发明的一种DNS后端转发系统,包括:
触发单元,用于前端处理线程绕过内核协议栈直接处理数据链路层到达的网络报文并在触发转发请求时发起转发;
转发单元,用于后端请求转发线程响应转发请求,通过创建套接字接入网络与后端服务器进行通信;
接收单元,用于后端应答接收线程通过epoll系统调用监听套接字以获得后端服务器返回的应答报文。
作为本发明上述DNS后端转发系统的进一步改进,发起转发时由所述前端处理线程在等待队列中注册DNS请求,并向转发队列存入DNS请求内容,所述后端请求转发线程取出转发队列中的DNS请求内容进行处理并转发给对应的后端服务器,所述后端应答接收线程在获取到后端服务器返回的DNS应答时,与所述等待队列中的DNS请求进行匹配。
与现有技术相比,本发明采用无锁化的线程设置,使前端处理、请求转发及应答接收操作分布式部署,并选择适应的数据处理通道运行,线程之间成对设置,资源使用一一对应,相对独立。本发明可以提高网络收发包的速度,进而提升整体DNS解析的性能。
结合附图阅读本发明实施方式的详细描述后,本发明的其他特点和优点将变得更加清楚。
附图说明
为了更清楚地说明本发明实施方式或现有技术的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见,下面描述中的附图仅仅是本发明中记载的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明一实施方式中DNS后端转发方法流程图。
图2为本发明一实施方式中数据处理的内核旁路方式示意图。
图3为本发明一实施方式中DNS后端转发示意图。
图4为本发明一实施方式中等待队列示意图。
图5为本发明一实施方式中向内核协议栈传输报文的示意图。
图6为本发明一实施方式中从内核协议栈接收报文的示意图。
图7为本发明一实施方式中DNS后端转发系统示意图。
具体实施方式
以下将结合附图所示的各实施方式对本发明进行详细描述。但这些实施方式并不限定本发明,本领域的普通技术人员根据这些实施方式所做出的结构、方法或功能上的变化均包含在本发明的保护范围内。
需要说明的是,在不同的实施方式中,可能使用相同的标号或标记,但这些并不代表结构或功能上的绝对联系关系。并且,各实施方式中所提到的“第一”、“第二”也并不代表结构或功能上的绝对区分关系,这些仅仅是为了描述的方便。
对于DNS解析而言,它的作用就是根据域名查出对应的IP地址,它是HTTP(HyperText Transfer Protocol,超文本传输协议)等协议的前提。通常情况下,终端在需要发起DNS解析时,会向特定的DNS解析服务器发起查询,而相应的DNS解析服务器则会根据接收到的相应DNS请求来实现一定的查询过程,从而返回相应的DNS应答。因此,DNS解析服务器的报文收发及查询效率,直接决定着DNS解析的性能。
作为DNS解析服务器等计算机设备,会从网络中接收到外部发来的各种网络报文,对于DNS解析服务器而言,主要以DNS报文为主。但是计算机设备并不知道何时能收到上述网络报文,因此则需要设计一个机制去响应未知到达的网络报文。轮询是指通过周期性地询问来主动确定网络报文有没有到达,而中断则是通过一定的硬件结构配合来被动响应,这种被动响应需要打断当前工作的连续性,比如一次中断处理需要将CPU(CentralProcessing Unit,中央处理器)的状态寄存器保存在堆栈,并运行中断服务程序,最后再将保存的状态寄存器信息从堆栈中恢复,整个过程需要至少300个处理器时钟周期,这也就是中断相对于轮询的最大缺点。
如图2所示,负责数据链路层报文收发的一般是网卡,网卡为主要工作在数据链路层的网络器件,被设计用来允许计算机设备在计算机网络上进行通讯。在计算机设备上运行的操作系统,以Linux操作系统为例,包括用户态空间和内核态空间。传统的网络报文收发如图2中的左边流程,在内核态空间中通过网卡驱动来完成操作系统与网卡之间的数据传送,网卡通过中断方式通知内核协议栈对报文进行处理,内核协议栈先会对报文的合法性进行必要的校验,然后判断报文目标是否为本机的Socket,满足条件则会将报文拷贝一份向上递交到用户态空间的Socket来处理,进一步由上层的业务应用调用Socket接口最终获得。如上所述,中断及内核态、用户态之间的切换都给整个收发过程带来不必要的消耗,因此,在图2右边流程中,本发明采用了轮询架构作为另一种收发机制,通过绕过内核协议栈的I/O技术,截断网卡触发的中断,并重设中断回调行为。具体地,在内核态空间设置用户态IO,来支持用户态空间的轮询模式驱动,用户态IO主要屏蔽网卡发出的中断信号,同时还为用户态提供共享内存的内存映射条件,然后由轮询模式驱动采用主动轮询的方式去感知报文到达,用户态空间的DNS应用在实现DNS解析时,可以直接对网卡到达的网络报文进行处理。网卡接收到网络报文后,可以通过DMA(Direct Memory Access,直接内存存取)方式传输到预分配的内存中,在DDIO(Direct Data I/O,数据直接传输技术)技术兼容的情况下,还可以直接将报文保存到CPU的Cache中,轮询模式驱动通过不断轮询来感知上述缓存区是否收到相应报文,并可在缓存区中直接处理报文。整个过程完全取代现有的中断架构的处理过程,DNS应用可以在此基础上实现相应的报文处理及DNS解析等工作,因此可以大大地优化DNS解析性能。需要补充的是,在更多的实施方式中,也可以综合上述两种架构处理方式,具体可以根据网卡的数量及数据收发的需求进行合理配置,比如可以将大多数网卡绑定在轮询架构中以服务DNS应用,而其他网卡采用传统的中断架构处理服务业务应用。
如图1所示,本发明一实施方式中DNS后端转发方法流程图。DNS后端转发方法,具体包括如下步骤:
步骤S1、前端处理线程绕过内核协议栈直接处理数据链路层到达的网络报文并在触发转发请求时发起转发。在步骤S1中,前端处理线程负责接收外部发来的各种网络报文,对其中的DNS请求做出相应的处理。如上所述,为了提高收发效率,是通过轮询确定从网卡接收到达的网络报文,网络报文会被存放在指定的缓存区,而并不向上发出中断,也不会拷贝一份向上传递,前端处理线程通过获得缓存区的控制权来直接对缓存区的网络报文进行处理。
作为具体地对DNS请求进行的处理,前端处理线程对应设置一个DNS缓存,DNS缓存包括可供查询的资源记录等,比如特定域名对应的IPv4地址或IPv6地址。DNS缓存中的内容可以是事先存储的,亦或者通过后端服务器查询返回的更新结果。当收到DNS请求时,会去对应的DNS缓存中查找相应的应答内容,如果查找到通过网卡直接返回给查询终端即可。但是如果DNS缓存中不存在DNS请求对应的应答内容,此时就无法做出响应,因此就需要向后端服务器发起请求,相应地触发转发请求。后端服务器是本机以外具有DNS解析能力的DNS服务器,可以是权威DNS服务器,也可以是递归DNS服务器,如果是权威DNS服务器,那么本机不仅需要转发请求,还要支持相应的递归查询能力。在更多的实施方式中,转发请求不仅仅局限于收到的DNS请求无法在DNS缓存中找到对应资源记录时触发,也可以应用在DNS缓存预取时触发转发。如上所述,DNS缓存是实现DNS解析的直接查询对象,但是DNS缓存中资源记录的充实性直接决定了查询成功的平均几率,也意味着是否经常要向后端服务器发起查询。如果当前的DNS请求在DNS缓存中查找对应资源记录失败时,就需要向后端服务器进行进一步查询,这对于当前的DNS请求来说就会耗费更多的时间。因此,可以在DNS缓存中提前将经常查询的资源记录从后端服务器中获得并存储,这样就可以保证相应的DNS请求到达时直接在DNS缓存中查找,而不必花费时间到后端服务器进行查询,这种提前预取的过程可以安排在空闲的时间段触发,这样也完全不会影响正常的DNS解析。进一步,对于DNS缓存中的资源记录来说,一般都会设置相应的TTL(Time To Live,生存周期),当对应的资源记录TTL快要截止时,比如设定在TTL截止前的预设时间,也可以触发向后端服务器的转发请求,这样可以保证对应的资源记录始终是最新的且有效的。
步骤S2、后端请求转发线程响应转发请求,通过创建套接字接入网络与后端服务器进行通信。前端处理线程对确定的转发任务进行注册,并存入相应的DNS请求内容,而真正负责转发的是由后端请求转发线程实施,这样可以保证DNS解析运行的并行性和效率。让前端处理线程专注于外部网络的报文收发及报文处理,而由后端请求转发线程专门处理与后端服务器的通信及转发处理。考虑到向后端服务器进行转发的需求及频度,后端请求转发线程及后端应答接收线程都采用内核态收发包架构,通过创建套接字(Socket)与网络中的后端服务器进行通信,具体地,向后端服务器实施转发时,每个后端请求转发线程采用一组固定的 UDP 端口,相应地会创建对应数量的Socket实现报文转发。在为网卡的多个收发队列设置多个后端请求转发线程时,每个后端请求转发线程采用的UDP端口不重叠,这样保证线程之间一一对应。
虽然通过后端请求转发线程独立地完成转发工作,但是如上所述,是否触发转发及转发的DNS请求内容都是由前端处理线程来确定的,因此在前端处理线程与后端请求转发线程之间还存在一定的交互,需要设计一定的机制把DNS请求内容等传递给对应的后端请求转发线程,并保证线程之间的异步性。如图3所示,为成对的前端处理线程、后端请求转发线程及后端应答接收线程对应设置转发队列和等待队列,前端处理线程在确定需要转发时,会向等待队列中注册对应DNS请求的节点,这个过程将在以下详述,同时还会对注册的节点进行赋值组装成相应的转发节点存入转发队列,即向转发队列中存入相应的DNS请求内容。负责转发的后端请求转发线程会对转发队列中的节点内容进行逐一取出,进一步会将对应的DNS请求内容做重新组装,重新组装的格式是根据对应的后端服务器接收DNS请求的要求决定的,具体可以参照对应的原始请求信息实施,重新组装的DNS请求通过上述创建的套接字发送到指定的后端服务器,这样就完成向后端服务器做进一步查询的工作。
优选地,当供扩展的后端服务器存在多个时,后端请求转发线程还需对接收转发查询的后端服务器进行选择,基于负载均衡策略主要是为了保证后端服务器响应的平衡性和高效性,可以始终保证采用最佳的后端服务器进行查询,进一步可以将不同终端的DNS请求转发给不同的后端服务器进行解析查询。具体的负载均衡策略包括根据请求报文源地址(客户端IP)的转发策略、根据请求报文目的地址(服务端IP)的转发策略、根据请求域名的转发策略,根据请求类型的转发策略等,这些策略具体可以结合预设的调度算法或者采用随机的分配方式确定相应的后端服务器。同时相应的策略还可以包括距离最优、服务性能最优等速度优化策略。以上策略的选择及执行可以根据人工设置配置文件指定,亦或者对以上策略优先级实行动态调整,具体的优先级关系也可以通过配置文件指定,当启动后重新修改配置文件时,可以通过执行配置重载的命令重载配置即可。后端请求转发线程向根据对应策略确定的后端服务器发起DNS请求,大大提高转发查询的性能,在更多的实施方式中,当策略确定的后端服务器存在多个权重相同时,则可以从多个权重一样的服务器中随机确定一个后端服务器实施转发请求。
步骤S3、后端应答接收线程通过epoll系统调用监听套接字以获得后端服务器返回的应答报文。当后端服务器接收到相应的DNS请求时,也会执行一套他们自己的查询流程,当确定了相应的DNS应答后,就会将之返回给本机,此时本机则需要对返回的应答报文进行监听。具体后端应答接收线程通过epoll系统调用监听套接字(Socket),epoll是以Linux为代表的操作系统为处理大批量文件描述符而作了改进的poll,可以对多路同步IO进行管理,多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。
通过监听收到了相应的应答报文后,就需要对收到的应答报文进行判断,确定是否为对应后端请求转发线程发出请求的响应应答,这个时候就需要与上述的等待队列进行匹配。如上所述,已经提及了在前端处理线程、后端请求转发线程及后端应答接收线程之间设置的转发队列、等待队列,后端请求转发队列可以通过转发队列提取出对应的DNS请求内容进行转发,而等待队列则是为后端应答接收线程获得后端服务器返回的DNS应答时,做匹配处理使用的。如图4所示,等待队列包括多个存储位,多个存储位的组成可以看成一个环形队列,每个存储位对应一个交易识别符标记transID,通过transID可以确定对应的存储位。针对网卡多个收发队列创建的多对前端处理线程、后端请求转发线程及后端应答接收线程,相应分配的transID段也有所不同,因此也可以通过transID确定所在的transID段,从而确定相应的线程对及相应的等待队列、转发队列。比如针对网卡的第一收包队列及第一发包队列,分别设置第一前端处理线程、第一后端请求转发线程及第一后端应答接收线程,相应地也会设置第一等待队列和第一转发队列,第一等待队列相应的transID段假设为1-999,此时就意味着第一等待队列中包括999个存储位,第一前端处理线程向等待队列中注册对应DNS请求的节点时,相应的transID就会在1-999中分配,具体地,可以是按照转发情况,每转发一次递增一,完成一个循环后再重新从1开始递增,第一后端请求转发线程在重新组装请求时也会将transID信息重组在报文内,因此可以获取报文中的transID信息来判断对应的第一等待队列及线程编号等。
等待队列如上所述的数据结构,由于transID是循环分配的,所以导致前端处理线程向等待队列中注册对应DNS请求的节点时,会被分配到相同的存储位上,意味着在同一存储位上可能存在多个节点信息,那么就需要解决两个问题,一个是如何存储一个是如何查找。在本实施方式中,在每个存储位下可以采用链表的方式顺次连接相同transID的节点,节点内容包括最基本的转发信息,转发信息中的特征值作为匹配关键词key来实现查找。后端应答接收线程在获取到后端服务器返回的DNS应答时,会向等待队列进行匹配,至于具体使用哪个线程的等待队列,可以提取出应答报文中的transID来判断,或者直接根据对应的端口号来判断。只有对匹配上的DNS应答做处理,匹配不上的DNS应答说明并不是响应对应后端请求转发线程发出的请求,属于无效应答,相应地可以直接丢弃。匹配主要依赖于请求及应答中的域名、资源记录类型、网络/协议类型等特征进行分析的,为了提高等待队列匹配的速度,对等待队列中的匹配关键词也做了特殊的算法转换,主要针对域名匹配的复杂性,将域名的特征转换成域名转换值及域名长度两个维度。其中域名转换值按照以下公式进行计算:
H(n)=H(n-1)*A+domain(n)
其中,H(0)=0,n表示域名的字符位数,A为调节参数,H(n)表示截止第n位的转换值,domain(n)表示域名对应n位的数值;
通过将域名长度值代入H(n)中就可以计算出相应域名的转换值从而作为匹配关键词,进一步还会对以上所述的资源记录类型、网络/协议类型、域名长度等做计算及加入匹配关键词。需要说明的是,调节参数A的作用是为了调整域名转换值的分布,保证不同域名,不管长度及组成,计算的域名转换值都不同,调整参数A根据实际情况进行设置。相应地,后端应答接收线程在对接收到的应答报文进行处理时,会提取出transID来定位等待队列及等待队列中的存储位,对于存储位中的链表节点,可以计算出相应的匹配关键词后沿着链表顺次匹配,直到匹配成功为止。
对匹配成功的应答报文,则需要对应答报文进行解码并存入指定的DNS缓存中,不同的DNS缓存也是跟特定的线程编号绑定的,因此也可以根据transID或者端口号来判断对应的DNS缓存。对于预取查询的,由于没有终端的查询请求,因此完成存入对应DNS缓存中后就完成了相应的工作。对于终端请求的,根据需求存入DNS缓存后,还要将其重新组包返回给相应的终端,此时在本实施方式中,是将应答报文递交给内核协议栈,但是在轮询架构中由于对数据链路层网络报文的直接收发,已经通过用户态IO对内核协议栈进行了旁路,此时则需要通过在内核协议栈与本实施方式中的轮询架构之间建立一个虚拟网卡模块以实现通信,具体地,通过队列组件在内核协议栈与轮询架构之间建立关系。如图5、图6所示,为了和内核协议栈进行通信,可以在内核协议栈侧模拟一个与内核协议栈对接的虚拟网口,扮演网卡的角色,另一侧则是对接轮询架构的收发接口,而在收发接口与虚拟网口之间设置队列组件来实现报文的传递。
如上所述,重组后的应答报文交给内核协议栈后,为了可以通过网卡发送出去,如图6所示,先在套接字缓存区sk_buf中存有待发送的报文,首先从第三队列中获得未承载报文的mbuf指针,即可以在存储器缓存区mbuf中存入报文的空闲区域地址,将套接字缓存区sk_buf中待发送的报文存入存储器缓存区mbuf中的对应地址,然后将指定报文的mbuf指针通过第四队列发送给收发接口,从而可以通过存储器缓存区mbuf获取发送的报文,以实现相应的转发。当相应的应答报文到达轮询架构时,就可以直接从轮询架构绑定的网卡发送出去。
如图5所示,当需要向内核协议栈传递报文时,这里主要针对前端处理线程在转发TCP的DNS请求给后端服务器时,需要从轮询架构将相应的报文递交给内核协议栈,由内核协议栈与后端服务器建立TCP连接。具体地,报文原来存放在存储器缓存区mbuf中,为了传递给内核协议栈的套接字缓存区sk_buf中,通过第一队列将指定报文的mbuf指针,即报文对应存储器缓存区mbuf的地址,发送至虚拟网口,这样内核协议栈侧就可以根据第一队列提供的指针把存储器缓存区mbuf中的报文存入套接字缓存区sk_buf中,内核协议栈就可以利用内核态空间的套接字缓存区sk_buf进行处理,同时,虚拟网口还需要通过第二队列向收发接口发送未承载报文的mbuf指针,即通知轮询架构可回收的存储器缓存区mbuf的区域。DNS应答请求到达内核协议栈后就可以由内核协议栈实施转发,反之接收的过程可以参照图6相应的实施方式。
如上已经多次提到由于网卡存在多个收发队列时,通过设置多对前端处理线程、后端请求转发线程及后端应答接收线程,来对网卡中不同队列的报文进行独立处理,对成对的线程从零开始编号,相同编号的前端处理线程、后端请求转发线程及后端应答接收线程成一组,不同编号的线程分别与网卡的收发队列一一对应,不同编号的线程分别设置单独的DNS缓存、等待队列、转发队列等,如上所述通过transID等可以确定相应的线程及资源。这样可以保证前端处理线程带转发的请求,一定会被固定交给对应的后端请求转发线程转发,而后端应答接收线程也固定地会处理对应的应答报文,由于采用无锁化的设置,可以减少切换带来的不必要的耗费,最大化地增加数据处理的效率。
需要补充的是,上述步骤S1、步骤S2及步骤S3并不代表绝对的先后顺序,对于网卡同一收发包队列对应的前端处理线程、后端请求转发线程及后端应答接收线程而言,实际上可以看作同时运行的,三个线程对应的执行过程是根据数据的到达情况并行处理的。
如图7所示,本发明一实施方式中DNS后端转发系统示意图。DNS后端转发系统具体包括触发单元U1、转发单元U2及接收单元U3。
触发单元U1,用于前端处理线程绕过内核协议栈直接处理数据链路层到达的网络报文并在触发转发请求时发起转发。触发单元U1中的前端处理线程负责对外部网络接收到的报文进行处理,由于绕过了内核协议栈直接对到达的报文进行处理,因此减少了中断及拷贝带来的花费。触发单元U1在进一步处理时,会根据DNS缓存的情况向后端服务器转发特定的请求,具体的触发条件包括前端处理线程在DNS缓存中查找对应资源记录失败时触发转发请求,或者周期性分析DNS缓存中的资源记录,根据预取需要触发转发请求。
转发单元U2,用于后端请求转发线程响应转发请求,通过创建套接字接入网络与后端服务器进行通信。转发单元U2建立后端请求转发线程来完成向后端服务器转发的实际工作,发起转发时除了需要对报文进行重组外,还可以对后端服务器进行选择,后端请求转发线程在创建套接字接入网络时,根据负载均衡策略选择对应转发的后端服务器,具体的负载均衡策略可以参照DNS后端转发方法的具体实施方式。
接收单元U3,用于后端应答接收线程通过epoll系统调用监听套接字以获得后端服务器返回的应答报文。接收单元U3通过监听创建的套接字,接收后端服务器经过查询返回过来的应答报文,根据需要更新DNS缓存中的内容,对于还需要进一步返回给终端请求用户的,还需要重组DNS应答,将其返回给终端。返回给终端的路径是将重组的应答报文递交给内核协议栈,参照DNS后端转发方法的具体实施方式中,在内核协议栈与轮询架构之间设置虚拟网卡模块,由内核协议栈通过虚拟网卡模块返回对应的网卡发送出去。
在具体的实施方式中,发起转发时由所述前端处理线程在等待队列中注册DNS请求,并向转发队列存入DNS请求内容,所述后端请求转发线程取出转发队列中的DNS请求内容进行处理并转发给对应的后端服务器,所述后端应答接收线程在获取到后端服务器返回的DNS应答时,与所述等待队列中的DNS请求进行匹配。如图4所示,所述等待队列包括多个存储位,所述存储位由等待队列分配的交易识别符标记,所述DNS请求根据注册分配的交易识别符存入对应的存储位,同一存储位的DNS请求通过匹配关键词进行查找匹配。
实现数据链路层收发报文的一般是网卡,网卡中目前一般包括多个收发队列,为了最大化地利用不同收包队列及发包队列地数据处理的能力,为每对收发队列设置对应的前端处理线程、后端请求转发线程及后端应答接收线程,保证网卡的一个收包队列对应建立一组线程进行独立处理,每组线程设置对应的DNS缓存、等待队列、转发队列等资源,减少与其它线程之间的资源竞争。进一步通过设置将成组的前端处理线程、后端请求转发线程及后端应答接收线程固定在对应的CPU核上运行,极大地减少切换带来的资源消耗。需要说明的是,DNS后端转发系统的具体实施方式还可以参照DNS后端转发方法的具体实施方式。
结合本申请所公开的技术方案,可以直接体现为硬件、由控制单元执行的软件模块或二者组合,即一个或多个步骤和/或一个或多个步骤组合,既可以对应于计算机程序流程的各个软件模块,亦可以对应于各个硬件模块。为了描述的方便,描述上述装置时以功能分为各种模块分别描述,当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
通过以上实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请也可以借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分也可以以软件产品的形式体现出来。该软件可以由微控制单元执行,依赖于所需要的配置,支持上述架构所需要的机制,也可以包括任何类型的一个或多个微控制单元。该软件存储在存储器,例如,易失性存储器(例如随机读取存储器等)、非易失性存储器(例如只读存储器、闪存等)或其任意组合。
综上所述,本发明采用无锁化的线程设置,使前端处理、请求转发及应答接收操作分布式部署,并选择适应的数据处理通道运行,线程之间成对设置,资源使用一一对应,相对独立。本发明可以提高网络收发包的速度,进而提升整体DNS解析的性能。
应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为了清楚起见,本领域技术人员应当将说明书作为一个整体,各实施方式中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
上文所列出的一系列的详细说明仅仅是针对本发明的可行性实施方式的具体说明,它们并非用以限制本发明的保护范围,凡未脱离本发明技艺精神所作的等效实施方式或变更均应包含在本发明的保护范围之内。
Claims (10)
1.一种DNS后端转发方法,其特征在于,包括如下步骤:
前端处理线程绕过内核协议栈直接处理数据链路层到达的网络报文并在触发转发请求时发起转发;
后端请求转发线程响应转发请求,通过创建套接字接入网络与后端服务器进行通信;
后端应答接收线程通过epoll系统调用监听套接字以获得后端服务器返回的应答报文。
2.根据权利要求1所述的DNS后端转发方法,其特征在于,所述前端处理线程在DNS缓存中查找对应资源记录失败时触发转发请求。
3.根据权利要求1所述的DNS后端转发方法,其特征在于,周期性分析DNS缓存中的资源记录,根据预取需要触发转发请求。
4.根据权利要求1所述的DNS后端转发方法,其特征在于,所述后端请求转发线程在创建套接字接入网络时,根据负载均衡策略选择对应转发的后端服务器。
5.根据权利要求1所述的DNS后端转发方法,其特征在于,发起转发时由所述前端处理线程在等待队列中注册DNS请求,并向转发队列存入DNS请求内容,所述后端请求转发线程取出转发队列中的DNS请求内容进行处理并转发给对应的后端服务器,所述后端应答接收线程在获取到后端服务器返回的DNS应答时,与所述等待队列中的DNS请求进行匹配。
6.根据权利要求5所述的DNS后端转发方法,其特征在于,所述等待队列包括多个存储位,所述存储位由等待队列分配的交易识别符标记,所述DNS请求根据注册分配的交易识别符存入对应的存储位,同一存储位的DNS请求通过匹配关键词进行查找匹配。
7.根据权利要求1所述的DNS后端转发方法,其特征在于,所述后端应答接收线程在需要向终端响应应答时,将接收的应答报文重组后递交给内核协议栈,由所述内核协议栈通过虚拟网卡模块返回给对应的网卡发送出去。
8.根据权利要求1所述的DNS后端转发方法,其特征在于,实现数据链路层收发报文的网卡,在具有若干对收发队列时,为每对收发队列设置对应的前端处理线程、后端请求转发线程及后端应答接收线程,以保证一一对应。
9.一种DNS后端转发系统,其特征在于,包括:
触发单元,用于前端处理线程绕过内核协议栈直接处理数据链路层到达的网络报文并在触发转发请求时发起转发;
转发单元,用于后端请求转发线程响应转发请求,通过创建套接字接入网络与后端服务器进行通信;
接收单元,用于后端应答接收线程通过epoll系统调用监听套接字以获得后端服务器返回的应答报文。
10.根据权利要求9所述的DNS后端转发系统,其特征在于,发起转发时由所述前端处理线程在等待队列中注册DNS请求,并向转发队列存入DNS请求内容,所述后端请求转发线程取出转发队列中的DNS请求内容进行处理并转发给对应的后端服务器,所述后端应答接收线程在获取到后端服务器返回的DNS应答时,与所述等待队列中的DNS请求进行匹配。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010181059.0A CN111371804B (zh) | 2020-03-16 | 2020-03-16 | Dns后端转发方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010181059.0A CN111371804B (zh) | 2020-03-16 | 2020-03-16 | Dns后端转发方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111371804A true CN111371804A (zh) | 2020-07-03 |
CN111371804B CN111371804B (zh) | 2023-01-20 |
Family
ID=71207244
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010181059.0A Active CN111371804B (zh) | 2020-03-16 | 2020-03-16 | Dns后端转发方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111371804B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035530A (zh) * | 2020-09-17 | 2020-12-04 | 中国银行股份有限公司 | 一种分布式实时支付系统中的交易报文匹配方法及系统 |
CN113067849A (zh) * | 2021-02-05 | 2021-07-02 | 湖南国科亿存信息科技有限公司 | 基于Glusterfs的网络通信优化方法及装置 |
WO2023078210A1 (zh) * | 2021-11-02 | 2023-05-11 | 华为技术有限公司 | 报文处理方法及装置、通信系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100299441A1 (en) * | 2009-05-22 | 2010-11-25 | Silver Spring Networks, Inc. | Multi-protocol network registration and address resolution |
CN106209852A (zh) * | 2016-07-13 | 2016-12-07 | 成都知道创宇信息技术有限公司 | 一种基于dpdk的dns拒绝服务攻击防御方法 |
CN106972985A (zh) * | 2017-03-29 | 2017-07-21 | 网宿科技股份有限公司 | 加速dpi设备数据处理与转发的方法和dpi设备 |
CN107135278A (zh) * | 2017-07-06 | 2017-09-05 | 深圳市视维科技股份有限公司 | 一种高效的负载均衡器及负载均衡系统 |
-
2020
- 2020-03-16 CN CN202010181059.0A patent/CN111371804B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100299441A1 (en) * | 2009-05-22 | 2010-11-25 | Silver Spring Networks, Inc. | Multi-protocol network registration and address resolution |
CN106209852A (zh) * | 2016-07-13 | 2016-12-07 | 成都知道创宇信息技术有限公司 | 一种基于dpdk的dns拒绝服务攻击防御方法 |
CN106972985A (zh) * | 2017-03-29 | 2017-07-21 | 网宿科技股份有限公司 | 加速dpi设备数据处理与转发的方法和dpi设备 |
CN107135278A (zh) * | 2017-07-06 | 2017-09-05 | 深圳市视维科技股份有限公司 | 一种高效的负载均衡器及负载均衡系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112035530A (zh) * | 2020-09-17 | 2020-12-04 | 中国银行股份有限公司 | 一种分布式实时支付系统中的交易报文匹配方法及系统 |
CN112035530B (zh) * | 2020-09-17 | 2023-11-21 | 中国银行股份有限公司 | 一种分布式实时支付系统中的交易报文匹配方法及系统 |
CN113067849A (zh) * | 2021-02-05 | 2021-07-02 | 湖南国科亿存信息科技有限公司 | 基于Glusterfs的网络通信优化方法及装置 |
WO2023078210A1 (zh) * | 2021-11-02 | 2023-05-11 | 华为技术有限公司 | 报文处理方法及装置、通信系统 |
Also Published As
Publication number | Publication date |
---|---|
CN111371804B (zh) | 2023-01-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111371804B (zh) | Dns后端转发方法及系统 | |
US6490615B1 (en) | Scalable cache | |
CN111371920A (zh) | Dns前端解析方法及系统 | |
US7996569B2 (en) | Method and system for zero copy in a virtualized network environment | |
EP3913893A1 (en) | Method and apparatus for processing data message | |
WO2020236295A1 (en) | System and method for facilitating efficient message matching in a network interface controller (nic) | |
CN101217493B (zh) | 一种tcp数据包的传输方法 | |
JP4722157B2 (ja) | ネットワークトラフィックのインテリジェントロードバランシング及びフェイルオーバー | |
JP4651692B2 (ja) | ネットワークトラフィックのインテリジェントロードバランシング及びフェイルオーバー | |
US7447777B1 (en) | Switching system | |
US7447230B2 (en) | System for protocol processing engine | |
JP4840943B2 (ja) | ネットワークトラフィックのインテリジェントロードバランシング及びフェイルオーバー | |
US20020040402A1 (en) | System and method for implementing a clustered load balancer | |
CN110768994B (zh) | 一种基于dpdk技术的提高sip网关性能的方法 | |
CN110099035B (zh) | 一种网络广告数据高并发访问服务方法 | |
US11431765B2 (en) | Session migration—based scheduling method and server | |
CN107135268B (zh) | 基于信息中心网络的分布式任务计算方法 | |
CN110099115B (zh) | 一种透明调度转发的负载均衡方法及系统 | |
CN1954576A (zh) | 处理启动请求的技术 | |
CN113891396B (zh) | 数据包的处理方法、装置、计算机设备和存储介质 | |
US6742075B1 (en) | Arrangement for instigating work in a channel adapter based on received address information and stored context information | |
CN114640716A (zh) | 一种基于快速网络路径的云网络缓存加速系统和方法 | |
CN113946587A (zh) | 句柄标识解析缓存方法、查询方法及其句柄标识解析系统 | |
US7647384B2 (en) | Method and system for managing fragmented information packets in a computer network | |
CN117240935A (zh) | 基于dpu的数据平面转发方法、装置、设备及介质 |
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 |