速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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:567711
用户头像

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

关注

评论

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

搞懂Spring事务失效的8大原因,轻轻松松面试过关

码哥小胖

Java spring Spring Boot

阿里P7岗位面试,面试官问我:为什么HashMap底层树化的标准元素个数是8

鄙人薛某

Java 面试 hashmap 哈希

程序员是这样解读《隐秘的角落》

陈东泽 EuryChen

学习 程序员 隐秘的角落

架构师训练营 - 第五周命题作业

牛牛

极客大学架构师训练营 命题作业 一致性Hash算法

公司制的黄昏:区块链重构商业世界

CECBC

区块链思维 裂变 契约 激励

老龄化时代的人机共生:京东数科以AI机器人推动产业增长

脑极体

week5

Geek_2e7dd7

架构师训练营 - 第 5 周命题作业

红了哟

正确的做事比做正确的事更重要

魔曦

架构师 极客大学架构师训练营

Spring Boot 多数据源 Redis 配置

南南

redis 面试 Spring Boot Redis作者

阿里内推面试,挂在了一道简单的问题上…

小新

Java 阿里巴巴 程序员 架构 面试

产业区块链发展迎来爆发期

CECBC

产业区块链 系统稳定性 应用安全性 信任的机器

这份架构PDF如何得到百度、洋码头、饿了么CTO等大咖联袂推荐?

小新

Java 架构 面试 队列

最强总结——分布式事务处理方式

小闫

面试 分布式 分布式锁 分布式存储 分布式缓存

20道Redis面试题(含答案)面试官会问的我都找到了

你是人间四月天

redis 面试 Spring Cloud redis6.0.0 Redis项目

打造Redis分布式环境下的银弹?我觉得Redisson比Redlock更胜一筹

码农月半

Java redis redis高可用 Redis项目

架构师训练营 - 第 5 周学习总结

红了哟

码农必备SQL高性能优化指南!35+条优化建议立马get

码哥小胖

MySQL SQL语法 sql查询 sql

让你大显身手——掌握RocketMQ与Kafka中如何实现事务

小谈

kafka 面试 RocketMQ JVM原理

Uniapp使用GoEasy实现websocket实时通讯

GoEasy消息推送

uni-app websocket 即时通讯

第五周总结

武鹏

深入理解队列:LinkedBlockingQueue源码深度解析

itlemon

阻塞队列 LinkedBlockingQueue Queue

啃碎并发(一):Java线程总述与概念

猿灯塔

Week5 学习总结

wyzwlj

极客大学架构师训练营

记录一次拼多多Web前端面试【一面+二面+hr面】

阿文

面试 Spring Cloud Spring Boot Web

一篇文章深入理解分布式锁

itlemon

redis 分布式锁

week5 学习总结

Geek_2e7dd7

【week05】总结

chengjing

最右JS2Flutter框架——开篇(一)

刘剑

flutter 大前端 探索与实践

架构师训练营 一致性Hash算法Java实现

Cloud.

【week05作业】

chengjing

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