域名|Chrome的一个功能造成全球根DNS负载过大

【域名|Chrome的一个功能造成全球根DNS负载过大】域名|Chrome的一个功能造成全球根DNS负载过大


Chromium浏览器是免费开源的 。 它是谷歌Chrome和微软Edge的内核 。
Chrome的一个功能造成全球根DNS负载过大 。 该功能的目的是防止用户的互联网服务提供商(ISP)流量劫持 。 例如 , 我们国家有三大ISP , 移动 , 联通 , 电信 。

DNS , 即域名系统 。 DNS的用途就是将很难记住的服务器IP地址转换为相对容易记住的域名的方式 。 我们访问某一个网站的时候 , 不需要记住该网站的服务器IP地址 。 只要输入域名 , DNS会自动将域名翻译为一个具体的IP地址 。 可以说 , 没有DNS , 就没有互联网 。
2009年5月19日晚上 , 暴风DNS受攻击导致江苏、河北、山西、广西、浙江等省部分用户断网 。
2014年1月21日下午 , 我们国家通用顶级域的根服务器出现异常 , 导致国内部分用户无法访问.com的网站 。
浏览器加载一个大型网站的单个网页 , 可能需要进行多次DNS查询 。 我分析了一下百度的首页 , 该页面长度才一万多个字符 , 涉及了40个单独的一级或者二级域名 。
为了负载均衡 , DNS被设计为多层金字塔架构 。 金字塔的顶部是根服务器 , 全球只有13台IPV4根服务器 , 负责管理全球的域名信息 , 其中美国10台 , 欧洲2台 , 日本1台 。 中国只有3台根服务器镜像 。 目前 , 全球有25台IPV6根服务器 , 其中中国有4台 。 在根服务器的下一层 , 有些国家的域名管理机构(如中国的CNNIC)有自己的域名数据库 , 被称为顶级域名服务器 。 再下一级是各机构的域名服务器以及ISP的缓存域名服务器 。
因为DNS是多级缓存的层次架构 , 实际上全世界的DNS查询只有很少一部分会去跟服务器查询 。 大多数人的查询都可以从本地ISP的DNS获取到域名解析信息 。 如果本地ISP的DNS不知道答案 , 那么它会将查询转发到上一级的DNS 。 最终 , 会可能会转到根服务器查询 。 若根服务器还是查询失败 , 那么网站将无法访问 。
Chrome给用户提供了便捷的单框搜索功能 。 我们可以在浏览器顶部的地址栏输入框里输入域名或者输入关键词调用百度、谷歌等搜索引擎来查询 。
在企事业单位内网使用时 , 可能会碰到一些问题 。 它可能会部署私有的TLD解析内部网站 。 例如 , 企事业单位内网用户键入“marketing” , 如果该单位内网有一个同名的内部网站 , Chrome将显示一个信息栏 , 询问用户是搜索“marketing”还是访问http://marketing 。 但是有些ISP会劫持每一个输入错误的网址 , 并强制跳转到一个刊载广告的页面 。
Chrome不想经常在地址栏里询问用户是搜索某个关键词还是访问某个网站 。 所以 , Chrome的开发者在浏览器启动或者更改网络环境的时候 , 做了一个测试:Chrome会随机生成三个7到15个字符的顶级域名进行DNS查询 。 如果其中任何两个请求返回时具有相同的IP地址 , 则Chromium假定本地网络正在劫持它应该接收的NXDOMAIN错误 , 因此它只将所有单字条目视为搜索某个关键词 。
不幸的是 , 在没有劫持DNS查询结果的网络上 , 这三个查找往往会一直传播到根域名服务器:本地的DNS不知道如何解析qwajuixk , 所以它将查询发送到它的上一级 , 它的上一级DNS还是没有办法解析 , 最终会将查询转发到根域名服务器 , 根域名服务器才能最终明确这不是一个正确的域名 。
由于大约有1.67*10^21个可能的7到15个字符的假域名 , 所以在没有DNS劫持的网络上发出的每一个探测查询最终都会到达根域名服务器 。 我们从Verisign的根域名服务器的查询统计数据来看 , 这加起来相当于根域名服务器总负载的一半 。
我们自己可以在Chrome里设置禁用Intranet重定向检测器来解决这个问题 。 如果Chrome采用新的措施解决了这个问题 , 全世界的根域名服务器可以减少600亿次虚假的域名查询 。


    推荐阅读