域名查询请求的方法及其系统
技术领域
本发明涉及通信技术领域,具体涉及一种域名查询请求的方
法及其系统。
背景技术
目前计算机域名系统或域名解析服务器(Domain NameSystem,简称DNS)主要是由运营商部署,并为自己的用户提供免费的DNS解析服务。用户发起的域名解析请求,将以UDP报文的方式发给DNS服务器,DNS服务器接收处理后,仍以UDP报文的形式将结果记录返回给用户。
UDP报文的格式为:
其中,报文头的格式为:
其中,QDCOUNT:指示查询记录的个数。
RCODE:指回复时指定的返回码:0:无差错;1:格式错;2:DNS出错;3:域名不存在;4:DNS不支持这类查询;5:DNS拒绝查询;6-15:保留字段。
报文中类型记录的格式为:
Type:记录的类型。例如类型A,则RDATA中返回IPv4地址;类型为AAAA,则RDATA中返回IPv6地址。
在进行域名查询请求时,DNS服务器回复时要在报文头的opcode位指明查询的结果状态。如果查询数QDCOUNT大于1,即一个请求要查询多条域名记录,每条域名记录的查询结果可能为:无差错、不存在、格式错误等,结果状态不相同,此时opcode位无法返回一个统一的结果状态。对于多条不同域名的查询,递归服务器递归查找过程中访问的是不同的一系列权威服务器,各条域名记录的查询依次进行,与单条域名记录分别请求查询无大异,即多条不同域名的查询封装在一个请求包中,意义不大。因此,DNS服务器对于查询数QDCOUNT大于1的请求包,直接返回域名不存在,RCODE位置NXDomain,DNS服务器不进行查找操作。这样产生的缺陷是,同一域名不同类型的解析任务,也只能分次单独请求、获得应答。
目前主流的操作系统都默认使用启用双栈(IPv4/IPv6)操作系统,当用户输入一个域名,浏览器先向DNS服务器请求查询IPv6地址,而当前IPv6服务器较少,因此大部分情况下将获取不到IPv6地址,浏览器会再向DNS服务器请求查询该域名的IPv4地址。因此,大多数时候,解析一个域名要耗费2次DNS服务,进行两次递归查询,从而造成大量的冗余操作,执行效率低下,浪费DNS服务器资源和时间等。
发明内容
本发明提供一种域名查询请求的方法及其系统,其可以避免重复冗余的多次请求和递归查询操作,提高DNS服务器的性能。
为实现上述目的,本发明提供一种域名查询请求的方法,该方法包括:
判断请求中各条查询的域名是否相同;
若判断出所述请求中各条查询的域名相同时,则判断本地缓存是否存在所有查询的类型记录;
若判断出本地缓存不存在部分查询的类型记录时,则根据所述域名转发请求包至相应的权威服务器。
进一步地,在所述判断请求中各条查询的域名是否相同之前还包括:
将查询数大于1的查询请求封装成一个请求包。
进一步地,还包括:
权威服务器接收转发过来的请求包,查询判断请求包中的域名是否存在类型记录,并返回应答。
进一步地,权威服务器接收转发过来的请求包,查询判断请求包中的域名是否存在类型记录,并返回应答具体包括:
若权威服务器查询判断出存在与域名相应的类型记录,则将返回所述存在的类型记录;
若权威服务器查询判断出不存在与域名相应的类型记录,则将返回域名不存在。
进一步地,所述判断请求中各条查询的域名是否相同还包括:
若判断出请求中各条查询的域名不相同,则返回格式错误。
进一步地,还包括:若判断出本地缓存存在所有查询的类型记录时,则将所述所有查询的类型记录打包返回给客户端。
为实现上述目的,本发明提供一种域名查询请求的系统,该系统包括:
第一判断单元,用于判断请求中各条查询的域名是否相同;
第二判断单元,用于在第一判断单元判断出所述请求中各条查询的域名相同时,判断本地缓存是否存在所有查询的类型记录;
转发单元,用于在第二判断单元判断出本地缓存不存在部分查询的类型记录时,根据所述域名转发请求包至相应的权威服务器。
进一步地,还包括:
封装单元,用于将查询数大于1的查询请求封装成一个请求包。
本发明提供的域名查询请求的方法及其系统中,通过将同一域名不同类型的解析任务封装成一个请求包,实现一次请求与递归查询完成同一域名不同类型的多个解析任务,其可以避免重复冗余的多次请求和递归查询操作,提高DNS服务器的性能。
附图说明
图1为本发明实施例一提供的域名查询请求的方法的流程示意图;
图2为本发明的实施例二提供的域名查询请求的系统的流程示意图。
具体实施方式
为使本领域技术人员更好地理解本发明的技术方案,下面结合附图和具体实施方式对本发明作进一步详细描述。
图1为本发明实施例一提供的一种域名查询请求的方法的流程示意图,如图1所示,该域名查询请求的方法包括:
步骤S101、判断请求中各条查询的域名是否相同。
具体地,当用户请求查询多条域名的类型记录时,则递归服务器提取所有的域名进行一个逻辑判断,当判断出各条查询的域名不相同时,则将返回格式错误给用户。
步骤S102、若判断出所述请求中各条查询的域名相同时,则查找判断本地缓存是否存在所有查询的类型记录。
具体地,当递归服务器判断出各条查询的域名相同时,则先查找本地缓存,若在本地缓存中能找到所有查询的类型记录,则将所有类型记录打包返回给用户。
步骤S103、若判断出本地缓存不存在部分查询的类型记录时,则根据所述域名转发请求包至相应的权威服务器。
具体地,若部分查询的类型记录在本地缓存中找不到,则根据相同的域名对应的部分类型记录,该部分类型记录将存在于同一权威服务器中,因此,可以根据域名将请求包转发给相应的权威服务器中。
步骤S100、进一步地,在所述判断请求中各条查询的域名是否相同之前还包括:将查询数大于1的查询请求封装成一个请求包。
具体地,例如:对于IPv6用户输入一个用户名,将对于IPv6用户输入的一个域名,将AAAA类型的查询和A类型的查询封装在一个请求包中,一次同时发给DNS服务器。
优选地,该域名查询请求的方法还包括:权威服务器接收转发过来的请求包,查询判断请求包中的域名是否存在类型记录,并返回应答。
具体地,权威服务器接收转发过来的请求包,查询判断请求包中的域名是否存在类型记录,并返回应答具体包括:
若权威服务器查询判断出存在与域名相应的类型记录,则将返回所述存在的类型记录;
若权威服务器查询判断出不存在与域名相应的类型记录,则将返回域名不存在。
进一步地,所述判断请求中各条查询的域名是否相同还包括:
若递归服务器判断出请求中各条查询的域名不相同,则返回格式错误。
进一步地,还包括:若权威服务器判断出本地缓存存在所有查询的类型记录时,则将所述所有查询的类型记录打包返回给客户端。
本实施例提供的域名查询请求的方法中,通过将同一域名不同类型的解析任务封装成一个请求包,实现一次请求与递归查询完成同一域名不同类型的多个解析任务,其可以避免重复冗余的多次请求和递归查询操作,提高DNS服务器的性能。
图2为本发明的实施例二提供的域名查询请求的系统的流程示意图,如图2所示,该域名查询请求的系统包括:第一判断单元21、第二判断单元22、转发单元23和封装单元24,其中,第一判断单元21用于判断请求中各条查询的域名是否相同;第二判断单元22用于在第一判断单元判断出所述请求中各条查询的域名相同时,判断本地缓存是否存在所有查询的类型记录;转发单元23用于在第二判断单元判断出本地缓存不存在部分查询的类型记录时,根据所述域名转发请求包至相应的权威服务器;封装单元24用于将相同域名的查询请求封装成一个查询数大于1的请求包。
本实施例中,优选地,封装单元24将将查询数大于1的查询请求封装成一个请求包。例如:对于IPv6用户输入的一个域名,将AAAA类型的查询和A类型的查询封装在一个请求包中,一次同时发给DNS服务器。
递归服务器对于查询数大于1的请求包,通过第一判断单元21提取域名进行一个逻辑判断,若判断出各条查询的域名不相同,则递归服务器返回格式错误;若判断出所有查询的域名相同,则通过第二判断单元22先查找本地缓存,若查找判断出本地缓存中能找到所有查询的类型记录,则将所有查询的类型记录打包返回给用户,如果部分查询的类型记录在缓存中找不到,则由于域名相同,所有查询的类型记录将在同一权威服务器中,因此转发单元23可根据域名将请求包转发给相应的权威服务器。
权威服务器对于递归服务器发送过来的请求包,首先提取第一条查询的域名,及其他各条查询的解析类型,查找该域名相对应的解析类型的类型记录,查找结果中若有一条查询存在,则返回存在的类型记录,状态位RCODE置no error;若查询的域名不存在,则状态位RCODE可统一地返回NXDomain。
本实施例提供的域名查询请求的系统中,通过将同一域名不同类型的解析任务封装成一个请求包,实现一次请求与递归查询完成同一域名不同类型的多个解析任务,其可以避免重复冗余的多次请求和递归查询操作,提高DNS服务器的性能。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。