一种减少DNS应答报文的长度的方法及装置与流程

文档序号:15684319发布日期:2018-10-16 20:54阅读:156来源:国知局

本发明涉及互联网技术领域,尤其涉及一种减少dns应答报文的长度的方法及装置。



背景技术:

当本地域名服务器(localdomainnameserver,缩写:ldns)接收到本地的一个客户端发送的域名解析请求时,ldns向域名服务器(domainnameserver,缩写:dns)发送该域名解析请求,dns解析出域名解析请求中的访问目标域名,判断存在此访问目标域名对应的网络服务器的ip地址列表时,将相应的ip地址封装于应答包返回至ldns。ldns将此应答包括内容发送至客户端,客户端根据ip地址进行网络访问。当dns中存在此访问目标域名的别名(cname)域名和最后一层别名域名对应的网络服务器的ip地址列表时,将访问目标域名的别名记录和最后一层别名域名对应的网络服务器的ip地址列表封装于应答包返回至ldns,也可以只将最后一层别名域名对应的网络服务器的ip地址列表封装于应答包返回至ldns。

ldns与dns之间一般使用用户数据报协议(userdatagramprotocol,简称udp)协议进行数据传输,在报文的长度较大时,需在两者之前建立传输控制协议(transmissioncontrolprotocol,简称tcp)进行数据传输。受实际应用时场景情况的限制,某些场景中的dns不支持tcp协议,例如,部分运营商的ldns为了防御ddos攻击会关闭tcp解析功能,部分公共dns、移动端、客户端或播放器因为较多采用定制开发而不支持tcp解析功能。于是,现有的数据传输方式将影响数据传输的有效性。



技术实现要素:

为了解决上述技术问题,本发明提供了一种减少dns应答报文的长度的方法及装置。

本发明提供了的减少dns应答报文的长度的方法,包括:

步骤1,构建针对域名解析请求报文的应答报文;

步骤2,从应答报文中解析出访问目标域名所对应的别名记录和a记录,将所述访问目标域名和所述a记录封装为应答报文;或者,从所述别名记录中选取一部分别名记录,将所述访问目标域名、所述a记录和选取出的别名记录封装为应答报文;或者,从所述a记录选取一部分a记录,将所述访问目标域名、选取出的a记录和别名记录封装为应答报文;从所述别名记录中选取一部分别名记录,从所述a记录选取一部分a记录,将所述访问目标域名、选取出的a记录和选取出的别名记录封装为应答报文;

步骤3,将封装后的应答报文发送至所述域名解析请求报文的发送方。

上述减少dns应答报文的长度的方法还具有以下特点:

所述步骤2还包括:从应答报文中只解析出访问目标域名所对应的别名记录时,选取目标域名和最后一个别名,或者,选取目标域名、最后一个别名和至少一个中间别名封装为应答报文;从应答报文中未解析出访问目标域名所对应的别名记录时,将所述应答报文进行重封装。

上述减少dns应答报文的长度的方法还具有以下特点:

所述从所述别名记录中选取一部分别名记录包括:

查询别名黑名单,选取所述别名记录中不存在于所述别名黑名单内的别名;

或者,查询别名白名单,选取所述别名记录中存在于所述别名白名单内的别名;

或者,查询别名黑名单和别名白名单,选择不存在于所述别名黑名单内并且存在于所述别名白名单内的别名。

上述减少dns应答报文的长度的方法还具有以下特点:

所述步骤1和步骤2之间还包括步骤1’:判断接收到的所述应答报文的长度是否大于或等于预设长度,如果是,执行步骤2使封装后的应答报文的长度小于所述预设长度,如果否,将接收到的所述应答报文发送至所述域名解析请求报文的发送方。

上述减少dns应答报文的长度的方法还具有以下特点:

所述步骤1和步骤2之间还包括步骤1”:从所述应答报文中解析出访问目标域名,判断此访问目标域名是否位于域名集合中,如果是,执行步骤2,如果否,将接收到的所述应答报文发送至所述域名解析请求报文的发送方。

上述减少dns应答报文的长度的方法还具有以下特点:

所述方法还包括设置域名集合的方法,包括以下方式中的一种:

接收用户输入的自定义的域名,将接收到的域名加入所述域名集合;

判断所述域名解析请求报文的发送方是不支持tcp解析的客户端或者所述域名解析请求报文的发送方是本地dns服务器,将所述域名解析请求报文中携带的访问目标域名加入所述域名集合。

本发明提供的减少dns应答报文的长度的装置,包括:

构建模块,用于构建或收到针对域名解析请求报文的应答报文;

解析模块,用于从应答报文中解析出访问目标域名所对应的别名记录和a记录,将所述封装为应答报文发送至所述重封装模块;

重封装模块,用于将所述访问目标域名和所述a记录封装为应答报文;或者,从所述别名记录中选取一部分别名记录,将所述访问目标域名、所述a记录和选取出的别名记录封装为应答报文;或者,从所述a记录选取一部分a记录,将所述访问目标域名、选取出的a记录和别名记录封装为应答报文;从所述别名记录中选取一部分别名记录,从所述a记录选取一部分a记录,将所述访问目标域名、选取出的a记录和选取出的别名记录封装为应答报文;

发送模块,用于将封装后的应答报文发送至所述域名解析请求报文的发送方。

上述减少dns应答报文的长度的装置还具有以下特点:

解析模块,还用于从应答报文中只解析出访问目标域名所对应的别名记录时,将所述别名记录发送至所述重封装模块;用于从应答报文中未解析出访问目标域名所对应的别名记录时,将所述应答报文发送至所述重封装模块;

所述重封装模块,还用于从所述解析模块接收到别名记录时,选取目标域名和最后一个别名,或者,选取目标域名、最后一个别名和至少一个中间别名封装为应答报文;还用于从所述解析模块接收到应答报文后,将所述应答报文进行重封装。

上述减少dns应答报文的长度的装置还具有以下特点:

所述重封装模块,用于根据以下方式从所述别名记录中选取一部分别名记录:

查询别名黑名单,选取所述别名记录中不存在于所述别名黑名单内的别名;

或者,查询别名白名单,选取所述别名记录中存在于所述别名白名单内的别名;

或者,查询别名黑名单和别名白名单,选择不存在于所述别名黑名单内并且存在于所述别名白名单内的别名。

上述减少dns应答报文的长度的装置还具有以下特点:

还包括判断模块,用于判断接收到的所述应答报文的长度是否大于或等于预设长度,如果是,向解析模块和重封装模块发送重新封装触发信号和所述预设长度;如果否,将所述应答报文转发至所述发送模块;

所述重封装模块,用于持装应答报文时将封装后的应答报文的长度控制为小于所述预设长度。

上述减少dns应答报文的长度的装置还具有以下特点:

还包括判断模块,用于从所述应答报文中解析出访问目标域名,判断此访问目标域名是否位于预设域名集合中,如果是,向解析模块和重封装模块发送重新封装触发信号,如果否,将接收到的所述应答报文发送至所述域名解析请求报文的发送方。

上述减少dns应答报文的长度的装置还具有以下特点:

所述装置还包括域名集合维护模块;

所述域名集合维护模块,用于接收用户输入的自定义的域名,将接收到的域名加入所述域名集合;或者,用于判断所述域名解析请求报文的发送方是不支持tcp解析的客户端或者所述域名解析请求报文的发送方是本地dns服务器,将所述域名解析请求报文中携带的访问目标域名加入所述域名集合。

本发明可以在保证正常通信的情况下有效控制应答报文的长度,提高应答报文的传输速率和安全性。

附图说明

构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是实施例中减少dns应答报文的长度的方法的流程图。

图2是实施例中减少dns应答报文的长度的装置的结构图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。

图1是实施例中减少dns应答报文的长度的方法,此方法包括:

步骤1,dns服务器构建针对域名解析请求报文的应答报文;

步骤2,从应答报文中解析出访问目标域名所对应的别名记录和a记录,将所述访问目标域名和所述a记录封装为应答报文;或者,从所述别名记录中选取一部分别名记录,将所述访问目标域名、所述a记录和选取出的别名记录封装为应答报文;或者,从所述a记录选取一部分a记录,将所述访问目标域名、选取出的a记录和别名记录封装为应答报文;从所述别名记录中选取一部分别名记录,从所述a记录选取一部分a记录,将所述访问目标域名、选取出的a记录和选取出的别名记录封装为应答报文;

步骤3,将封装后的应答报文发送至域名解析请求报文的发送方。

本方法中,域名解析请求报文的发送方可以是ldns、客户端或探测器等。

其中,步骤2还包括:从应答报文中只解析出访问目标域名所对应的别名记录时,选取目标域名和最后一个别名,或者,选取目标域名、最后一个别名和至少一个中间别名封装为应答报文;从应答报文中未解析出访问目标域名所对应的别名记录时,将所述应答报文进行重封装。

步骤2中,从别名记录中选取一部分别名记录包括:

查询别名黑名单,选取别名记录中不存在于别名黑名单内的别名;

或者,查询别名白名单,选取别名记录中存在于别名白名单内的别名;

或者,查询别名黑名单和别名白名单,选择不存在于别名黑名单内并且存在于别名白名单内的别名。

本方法中的黑白名单为人工维护域名列表,从而在应答报文重组时用于确定有哪些域名的别名记录可以删除或者保留。实现黑白名单功能的目的在于适应一些特殊需求,比如cname链中默认cname环节不能消除,一般出现于多cdn厂商,厂商要求保留厂商信息的情况。

比如某公司的域名和加速域名,就由此公司确认是否不能特殊处理,默认都可以处理,没有特殊交代则不在设置在任何名单,如有特殊交代需要保留的就设置在白名单;特殊交代必须不能保留的就设置在黑名单。

整个解析过程的cname记录和a记录只要保障解析链完成,就可以保障解析正常。

例如,cname记录和a记录如下:

www.a.comcnametest.a.com

test.a.comcnametest1.a.com

test1.a.comcnametest2.a.com

test2.a.comcnametest3.a.com

test3.a.coma1.1.1.1

处理过程中会把整个解析过程进行有序数据结构化:

www.a.com

test.a.com

test1.a.com

test2.a.com

test3.a.com

1.1.1.1

结合黑白名单,会从结构化数据中选取可进行重新组包的部分,然后重新构建cname和a记录,因为数据是有序的,所以解析链结构未改变,解析过程正常。最终解析结果为:

目标域名cname选取的别名包括:www.a.com、test.a.com、test1.a.com。

选择的a记录为1.1.1.1。

本方法中dns服务器可以包括ldns服务器和权威dns,如果dns服务器为ldns服务器时,从权威dns接收到针对域名解析请求报文的多个应答报文,其中部分应答报文中只包括别名记录,部分应答报文中包括别名记录和a记录。如果为权威dns时,直接构建针对域名解析请求报文的应答报文。此应答报文中包括别名记录和a记录。

本方法中,步骤1和步骤2之间还包括步骤1’:判断接收到的应答报文的长度是否大于或等于预设长度,如果是,执行步骤2使封装后应答报文的长度小于所述预设长度。如果否,将接收到的应答报文发送至域名解析请求报文的发送方。预设长度可以设置为500~512字节之间的值。

另外,在权威dns下,设置的条件为应答报文的长度不超过500字节,a记录的ip个数不超过8个,在执行步骤2后使封装后应答报文的长度不超过500字节并且使a记录的ip个数不超过8个,如果接收到的应答报文中的a记录的ip个数大于8个时,从a记录中选择数量小于8个的ip作为选择出的a记录。

步骤1和步骤2之间还包括步骤1”:从应答报文中解析出访问目标域名,判断此访问目标域名是否位于预设域名集合中,如果是,执行步骤2,如果否,将接收到的应答报文发送至域名解析请求报文的发送方。

此方法还包括设置域名集合的方法,包括以下方式中的一种:

一,接收用户输入的自定义的域名,将接收到的域名加入所述域名集合;

二,判断所述域名解析请求报文的发送方是不支持tcp解析的客户端或者所述域名解析请求报文的发送方是本地dns服务器,将所述域名解析请求报文中携带的访问目标域名加入所述域名集合。

三、所述域名解析请求报文是探测器发出的tcp请求时,判断可以从所述域名解析请求报文中解析目标域名但无法解析出其它内容时,将所述目标域加入所述域名集合。

图2是实施例中减少dns应答报文的长度的装置,此装置包括:

构建模块,用于构建针对域名解析请求报文的应答报文;

解析模块,用于从应答报文中解析出访问目标域名所对应的别名记录和a记录;

重封装模块,用于将所述访问目标域名和所述a记录封装为应答报文;或者,从所述别名记录中选取一部分别名记录,将所述访问目标域名、所述a记录和选取出的别名记录封装为应答报文;或者,从所述a记录选取一部分a记录,将所述访问目标域名、选取出的a记录和别名记录封装为应答报文;从所述别名记录中选取一部分别名记录,从所述a记录选取一部分a记录,将所述访问目标域名、选取出的a记录和选取出的别名记录封装为应答报文;

发送模块,用于将封装后的应答报文发送至域名解析请求报文的发送方。

其中,

解析模块还用于从应答报文中只解析出访问目标域名所对应的别名记录时,将所述别名记录发送至所述重封装模块;用于从应答报文中未解析出访问目标域名所对应的别名记录时,将所述应答报文发送至所述重封装模块。重封装模块还用于从所述解析模块接收到别名记录时,选取目标域名和最后一个别名,或者,选取目标域名、最后一个别名和至少一个中间别名封装为应答报文;还用于从所述解析模块接收到应答报文后,将所述应答报文进行重封装。

重封装模块具体用于根据以下方式从别名记录中选取一部分别名记录:

查询别名黑名单,选取别名记录中不存在于别名黑名单内的别名;

或者,查询别名白名单,选取别名记录中存在于别名白名单内的别名;

或者,查询别名黑名单和别名白名单,选择不存在于别名黑名单内并且存在于别名白名单内的别名。

此装置还包括判断模块,此判断模块用于判断接收到的应答报文的长度是否大于或等于预设长度,如果是,向解析模块和重封装模块发送重新封装触发信号和预设长度;如果否,将应答报文转发至发送模块。重封装模块用于持装应答报文时将封装后的应答报文的长度控制为小于所述预设长度。

或者,判断模块用于从应答报文中解析出访问目标域名,判断此访问目标域名是否位于预设域名集合中,如果是,向解析模块和重封装模块发送重新封装触发信号,如果否,将接收到的应答报文发送至域名解析请求报文的发送方。

装置还包括域名集合维护模块;此域名集合维护模块用于接收用户输入的自定义的域名,将接收到的域名加入所述域名集合;或者,用于判断所述域名解析请求报文的发送方是不支持tcp解析的客户端或者所述域名解析请求报文的发送方是本地dns服务器,将所述域名解析请求报文中携带的访问目标域名加入所述域名集合。

下面通过具体实施例详细说明本发明。

具体实施例

dns服务器和ldns服务器之间建立udp连接,从ldns服务器接收到域名解析请求报文,此域名解析请求报文中的访问目标为protal.abc.com,dns服务器查询到此访问目标对应的别名记录和a记录如下:

使用现有技术中的应答报文的应答方法,dns服务器将访问目标、上述别名记录和a记录均封装于应答报文中,发送到ldns服务器。如果上述名记录所占用字节长度较大,导致应答报文的长度大于预设长度,例如大于512字节,dns服务器需要与ldns服务器重新建立tcp连接,通过此tcp连接将封装后的应答报文发送至ldns服务器。

使用本发明中的应答报文的应答方法,dns服务器从别名记录中选取出一部分别名记录,将访问目标域名、选取出的别名记录和a记录封装于应答报文。上述别名记录所占用的字节长度较大时,封装后的应答报文的长度将很有可能小于预设长度,例如小于512字节,dns服务器则直接使用已建立的udp连接将封装后的应答报文发送至ldns服务器,而无需重新切换协议并建立连接。

上面描述的内容可以单独地或者以各种方式组合起来实施,而这些变型方式都在本发明的保护范围之内。

本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用一个或多个集成电路来实现,相应地,上述实施例中的各模块/单元可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任何特定形式的硬件和软件的结合。

需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的物品或者设备中还存在另外的相同要素。

以上实施例仅用以说明本发明的技术方案而非限制,仅仅参照较佳实施例对本发明进行了详细说明。本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1