新闻中心

当前位置: 首页 > 新闻中心 > 新闻中心
敬畏技术、拥抱变化,泰策浅析基于IPv6的DNS技术
发表时间:2018-09-29     浏览次数:526     来源:

        IPv4是第一个被广泛使用,构成现今互联网技术的基础的协议,自1981年被定义以来,作为IP的代名词,已在IP领域称霸30多年。但随着Internet的呈指数级的飞速发展,导致IPv4地址空间面临枯竭的危机、路由表膨胀、服务质量难以保证等一系列自身无法解决的问题,IPv6在1998年应运而生。IPv6能够提供充足的网络地址和广阔的创新空间,是全球公认的下一代互联网商业应用解决方案,IPv6取代IPv4成为下一代互联网的核心是互联网演进升级的必然趋势。
 
        我国是世界上较早开展IPv6实验和应用的国家,在技术研发、网络建设、应用创新等方面都取得了重要阶段性成果,已具备大规模部署的基础和条件。但由于基于IPv4的互联网生态已经发展成熟,想要完成改造,涉及环节众多,大规模IPv6部署并非易事,需要耗费大量人力物力以及全产业参与者的支持和配合。
 
        2018年11月两办印发的《推进互联网协议第六版(IPv6)规模部署行动计划》使得IPv6真正开始落地执行,计划要用5到10年时间,形成下一代互联网自主技术体系和产业生态,建成全球最大规模的IPv6商业应用网络,实现下一代互联网在经济社会各领域深度融合应用,成为全球下一代互联网发展的重要主导力量。
 
        《推进互联网协议第六版(IPv6)规模部署行动计划》也明确指出对域名系统的而升级改造。加快互联网域名系统(DNS)的全面改造,构建域名注册、解析、管理全链条IPv6支持能力,开展面向IPv6的新型根域名服务体系的创新与实验。
 
        域名系统(Domain Name System,简称:DNS)DNS作为IP地址和域名的转换系统,在互联网中有着举足轻重的地位,可以说是互联网的基石。几乎所有的互联网应用都需要DNS, DNS的重要性是不言而喻的。IPv6网络中的DNS作为Internet基石的地位更加巩固,128位的IPv6地址根本不适应人们的使用,人们将更加依附DNS。
 
        IPv6网络中的DNS与IPv4的DNS在体系结构上是一致的,都是采用树型结构的域名空间。虽然IPv4协议与IPv6协议是存在相当大区别的两套协议,但这并不意味着需要单独两套DNS体系,相反在DNS的体系和域名空间上两者必须是一致的,IPv4和IPv6共同拥有统一的域名空间。在IPv4到IPv6的过渡阶段,域名可以同时对应于多个IPv4和IPv6的地址。DNS主要通过UDP来承载,DNS的原始规范在UDP数据包大小方面采取了非常保守的立场。只使用UDP传递了小响应,如果响应大于512字节,将被截断并分片传输,此时DNS协议中的flags字段Truncated位被置位显示响应已被截断,即当DNS响应数据大于512字节的时候,数据只返回512字节,剩余的数据将被丢弃。此时,DNS客户端通常会使用TCP重新发起原来的查询请求,允许返回响应超过512个字节。由于IPv6和DNSSEC的引入,DNS数据包大于512字节的可能性大大增加,采用TCP会增大DNS服务器的负荷,这是因为需要进行TCP连接的确立和切断等处理。假如位于域名上游的所有路由服务器均由于高负荷的TCP处理而导致性能下降,那么整个DNS就会停止工作。这一点是采用TCP无论如何也无法避免的。
 
        为解决此问题,域名服务协议进行了协议扩展,利用旨在通过UDP帮助DNS交换超过512字节的数据的EDNS0。使用EDNS0,在向DNS发出请求时,客户端可以通过指定UDP缓冲区大小来表示其愿意通过UDP接收更大的数据包。使用这一功能,就可以通过一个UDP数据包来交换超过512字节的数据而无需借助TCP进行传输,当然在超时机制和重复查询等机制开启的情况下,仍收到截断响应,则应该切换到尝试TCP。
 
        当然截断搜索响应也需要大量时间并且可能包含大量数据包,如果大型响应数据包在DNS中不常见或者碎片丢包非常罕见,这种开销也是可以接受的。但事实并非如此。由于IPv6和DNSSEC的引入,DNS大型响应并不少见,且碎片丢包率也很高。
 
        由于IPv6的数据只能在源端分片,目的端重组,不允许在中间路由器上进行分片和重组。将这个比较耗时的分片与重组操作从中间路由器转到端系统,大大加快了网络中的IP转发速率。那么如果路由器收到IPv6数据包太大,超过它的MTU而不能转发出去怎么办?通常情况下,IPv6包发向一个目的地址的第一个包,如果在路由过程中被某个中间路由器卡住,该路由器会丢弃该数据包并向源主机返回一个“分组太大”的ICMPv6差错报文,同时会附上它自己的MTU,源主机再调整包的大小,会使用较小长度的IP数据包重新发送数据,然后后面的数据包就都不会超过这个大小,即第一个包可能会重发。再如果过了这个中间路由器,报文继续往下走,又遇到一个路由器,MTU更小,同样该路由器也会向源主机发个ICMPv6的报文,告诉源主机,包大了,源主机要再调整包大小重发,就这样直到数据包达到目的地址。所以IPv6碎片丢包率远远高于IPv4数据。2017年9月的早期工作显示,当尝试通过DNS递归解析器传递碎片化的IPv6 UDP数据包时,失败率为38%。
 
        从理论上讲,TCP应该能通过保守选择会话的最大报文长度(MSS)来避免数据包太大而被丢弃的问题,但是UDP怎么样?那么UDP的主要客户端应用程序DNS呢?我们可以将DNS从UDP移开并使用TCP代替,这样肯定会使许多功能变得更加容易,但是缺点是TCP在服务器上施加了更大的负载开销。所以我们还需要改进UDP中大响应的处理方式,那么我们试试使用UDP和TCP的混合方法:在可能的情况下使用UDP,而在必要时使用TCP。
 
        解决这一挑战的方法是”附加截断响应”(Additional Truncated Response,简称ATR,记录为互联网草案:2017年9月的draft-song-atr-large-resp-00,  下一代互联网国家工程中心的宋林建)提案。本草案中描述的方法很简单:如果DNS服务器提供需要发送分段的UDP数据包的响应,则服务器应等待10ms的时间并将原始查询作为截断响应返回。如果客户端接收并重新组合分段的UDP响应,则客户端的DNS解析器将忽略随后的截断响应,因为其未完成的查询已被回答。如果网络丢弃了分段的UDP响应,则将接收截断的响应,并且将触发客户端立即切换到使用TCP重新查询。
 
        经有关部门对每个IP解析器行为的测试,使用UDP时,高达40%的IPv4解析器未能收到大的分片UDP响应,50%的IPv6解析器未能收到分片的UDP响应,这个分片UDP响应包的丢失比率是很惊人的。如果强制使用TCP协议,大约21%的IPv4解析器无法完成解析任务,45%的IPv6解析器无法完成解析任务。而使用ATR,在IPv4中的ATR丢失率为29%,即有超过10%的无法接收分片UDP响应的解析器能够切换TCP并完成任务;IPV6中ATR的丢失率为45%。
 
        在DNS中,超过90%的用户使用IP地址最常用的10000个解析器,所以在查看DNS时,不应使用计算解析器行为来推断对用户的影响。我们需要从用户角度来衡量ATR的影响。测试数据表明在IPv4情况下,大约9%的服务器使用ATR将通过向客户端发信号通知立即切换到TCP以执行重新查询来提高分段UDP响应的解析速度。在IPv6中,大约15%的服务器使用ATR通知客户端切换为TCP重新查询。
 
        ATR可以实现在传递大型DNS响应时提高DNS的解析速度和成功率,ATR方法消除客户端执行大量超时和重新查询周期,消除大量查询数据包并缩短解决时间。但是ATR将另一个UDP数据包添加到大型分段DNS响应中,这有助于攻击者使用DNS DDoS攻击,因为当ATR数据包添加到大型DNS响应时,相同的初始查询流将生成更多数据包和更大的字节数。

        DNS是互联网中极为重要的组成部分,ATR并没有完全解决响应问题,如果解析器无法接收碎片UDP响应并且无法使用TCP执行DNS查询,则ATR无法提供帮助。但是,在IP片段过滤存在问题的情况下,ATR可以使查询不可避免地转移到TCP,速度比现在快很多,但它是以额外的数据包和额外的DNS功能为代价的。基于IPv6的DNS应用还面临很多挑战需要我们逐一解决。
 
        为实现下一代互联网在经济社会各领域深度融合,IPv6规模建设既是国家战略,也是高速发展的移动通信网络的需求。作为国内首家DNS商用解决方案提供商,泰策一直在跟踪最新的IPv6技术要求,并凭借十多年的DNS相关技术经验,获得了IPv6 READY认证logo,积极配合各地的电信运营商进行DNS系统的IPv6改造,保证各地运营商的设备和系统具备IPv4/IPv6双栈功能,为解决网络地址资源数量问题提供了有力保障,助力提升我国互联网的承载能力和服务水平。