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双栈功能,为解决网络地址资源数量问题提供了有力保障,助力提升我国互联网的承载能力和服务水平。
免责声明:本网站内容主要来自原创、合作伙伴供稿和第三方自媒体作者投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。任何单位或个人认为本网站中的网页或链接内容可能涉嫌侵犯其知识产权或存在不实内容时,应及时向本网站提出书面权利通知或不实情况说明,并提供身份证明、权属证明及详细侵权或不实情况证明。本网站在收到上述法律文件后,将会依法尽快联系相关文章源头核实,沟通删除相关内容或断开相关链接。