【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

8.8.8.8——用于快速浏览的 DNS 服务器

  • 2009-12-10
  • 本文字数:1421 字

    阅读完需:约 5 分钟

谷歌提供了两台公共 DNS 服务器,分别是 8.8.8.8 和 8.8.4.4 ,以进一步提高浏览网页的速度。

DNS 服务器的作用是,把网站名字——文字标识符转换为底层网络协议使用的数字标识符。根据谷歌统计,平均每位用户每天需要数百次的这种转换服务。如今,很多网页都很复杂,包含了来自不同域名的内容,每一个域名都需要一次解析。域名解析过程——连接 DNS 服务器、找到数字 ID、返回结果——增加了网页浏览的延迟, 导致加载网页需要数秒钟的时间,甚至 11 秒(如本例)。

谷歌认为这种 DNS 延迟是不可接受的,它开通了两个分布于全球的公共 DNS 服务器以提高浏览速度。他们试图解决三个主要问题

  • 速度:解析器端的缓存丢失是导致 DNS 反应缓慢的主要原因。出色的缓存技术能够提高响应速度。谷歌公用 DNS 实施了预取技术:在记录的 TTL 过期之前,我们会不断异步、独自地刷新大量流行域名的记录。这使得谷歌公用 DNS 能够在数据包访问服务器并返回的单次往返时间内处理很多 DNS 请 求。
  • 安全:DNS 容易受到欺骗性攻击,这种攻击会破坏解析服务器的缓存并把所有用户路由到一个恶意网站。除非新的协议如 DNSSEC 得到广泛应用,解析器需要采取进一步措施保证它们的缓存安全。谷歌公共 DNS 通过打乱域名查询记录和在 DNS 消息中包含额外数据等措施使攻击者难以欺骗有效的响应。
  • 有效性:谷歌公共 DNS 符合 DNS 标准,提供给用户期望的准确反馈,不会阻碍、过滤或者重定向请求从而损害用户的浏览体验。

谷歌声称它们的 DNS 更优秀,因为

  • 充分利用服务器处理来自客户的流量负载,包括恶意访问。
  • 防止 Dos 攻击和放大攻击。虽然这主要是一个安全问题并对封闭的解析器影响更大一些,但是防止 Dos 攻击也有利于性能,因为这消除了 DNS 承担的额外流量负载。更多有关我们降低攻击机会的办法的信息,请查看安全优势
  • 针对共享缓存的负载平衡,以提高服务集群间的聚合缓存命中率。
  • 预取名字解析,克服传统的、被动的缓存机制,致力于处理缓存之外的大多数请求。我们正在测试一种 DNS 预取技术,认为很可能会大幅提高 DNS 速度。我们给出了其优势概况、限制和挑战,以及我们准备如何利用流量优先设置和缓存分区等技术应对这些挑战。

在一个类似但不同的说明中,谷歌解释了 Chrome 如何处理名字解析以提高浏览速度。Chrome 软件工程师 Jim Roskind 给出了一些提示:

  • 当页面加载时,Chrome 分析页面的所有链接,同时提前要求操作系统解析这些名字以得到 IP 地址。当操作系统完成时,反馈被丢弃了,因为这些反馈现在已经存储到了操作系统的缓存中。因此,当用户点击某个链接时,浏览器会询问对应的 IP,结果会从这些缓存中返回,而不需要再次解析。
  • 另一个解决方案是监控鼠标。当用户想要点击某链接时,他需要花费 200 毫秒停留并实际点击它。在这段时间内,Chrome 尝试获取该链接的 IP。
  • 还有一个解决办法是长时间的缓存之前的名字解析,当用户重访这个特定页面时。Chrome 已经准备好了 IP。
  • Chrome 要求操作系统在浏览器加载之前先解析主页的 IP。当浏览器的加载完成后,主页能够快速加载,因为其 IP 已经存储在操作系统的缓存中。这减少了 250-500 毫秒的启动时间。

关于未来:1-2% 的 TCP/IP 数据包会在传输中丢失,TCP/IP 栈在 Windows 上 3 秒后会超时重发。当第一个数据包丢失后,用户等待页面加载,但是目标网站还没有真正连接。3 秒对于谷歌来说太长了,因此他们将在 Chrome 中采取一种机制:当服务器在一定的时间内没有响应的时候,要么重新发送 TCP/IP 数据包,要么重新发起一个新的连接。

2009-12-10 02:567370
用户头像

发布了 501 篇内容, 共 248.1 次阅读, 收获喜欢 57 次。

关注

评论

发布
暂无评论
发现更多内容

搞懂现代Web端即时通讯技术一文就够:WebSocket、socket.io、SSE

JackJiang

websocket 即时通讯 IM

EMQ 映云科技与 RT-Thread 达成战略合作,共建产业物联网平台

EMQ映云科技

人工智能 云计算 大数据 物联网 emq

腾讯云 TDSQL 审计原理揭秘

腾讯云数据库

数据库 tdsql

论亚马逊QLDB与腾讯TDSQL对历史数据的管理和计算

腾讯云数据库

数据库 tdsql

为数据赋能:腾讯TDSQL分布式金融级数据库前沿技术 - 云+社区 - 腾讯云

腾讯云数据库

数据库 tdsql

Vue进阶(壹佰):当前页面刷新并重载页面数据

No Silver Bullet

Vue 9月日更

朋友圈架构设计

XP

模块(三)如何设计出合理的架构

我是一只小小鸟

微型博客开发项目,手动创建导航组件的新增页面

梦想橡皮擦

9月日更

TLS协议分析 (五) handshake协议 证书与密钥交换

OpenIM

终于,基础软件领域的行业盛会来了!

Jessie

开源 云原生 基础软件 中间件 #数据库

直播预告:京东云DevOps与JFrog制品库的融合

京东科技开发者

DevOps 制品库管理 运维开发

Retrofit源码解读HTTP

Changing Lin

android 9月日更

解读顶会ICDE’21论文:利用DAEMON算法解决多维时序异常检测问题

华为云开发者联盟

华为云数据库 时序数据 深度神经网络算法 DAEMON 轨迹分析

Vue进阶(九十九):页面锚点至顶部

No Silver Bullet

Vue 9月日更

使用GO语言实现Mysql数据库CURD

Regan Yue

数据库 Go 语言 9月日更

从源码角度分析 MyBatis 工作原理

vivo互联网技术

sql mybatis JDBC ORM

【VueRouter 源码学习】第五篇 - 两种路由模式的设计

Brave

源码 vue-router 9月日更

LeetCode题解:897. 递增顺序搜索树,栈,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

TLS协议分析 (三) record协议

OpenIM

GetX代码生成IDEA插件,超详细功能讲解(透过现象看本质)

小呆呆666

学习Linux tar 命令:最简单也最困难

华为云开发者联盟

Linux 文件 Linux tar tar命令 存档

【LeetCode】分割平衡字符串Java题解

Albert

算法 LeetCode 9月日更

【Flutter 专题】54 图解基本生命周期

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

TLS协议分析 (四) handshake协议概览

OpenIM

Rust从0到1-高级特性-宏

rust 高级特性 Macros

如何在AI工程实践中选择合适的算法?

博文视点Broadview

带你认识数据库视图对象,下次不要再认成“表”了

华为云开发者联盟

数据库 sql 对象 视图 GaussDB(DWS)

颇具年代感的《JMeter中文操作手册》

FunTester

Jmeter 性能测试 自动化测试 接口测试 FunTester

从 CI_CD 到 DevOps

SoFlu软件机器人

DevOps 自动化 基础软件

学会这5种JS函数继承方式,前端面试你至少成功50%

华为云开发者联盟

面试 大前端 js 继承 函数继承

8.8.8.8——用于快速浏览的DNS服务器_Google_Abel Avram_InfoQ精选文章