DNS你应该知道的事

109 阅读9分钟

DNS:互联网的“电话簿”与“导航仪”

想象一下,当你想去拜访一个朋友时,你需要的不是他家房子的经纬度坐标(比如:北纬39.9°,东经116.3°),而是他的住址“北京市朝阳区某某街道XX号”。这个“地址”对人类来说,远比一串冰冷的数字坐标友好得多。

互联网世界也是如此。这篇文章,就带你快速了解这个关键角色——DNS(Domain Name System)

一、DNS到底是什么?

DNS,中文名叫 “域名系统” 。你可以把它理解为 “互联网的巨型电话簿” 或者 “全球地址导航仪”

  • 我们眼中的网络世界: 我们输入 www.google.com 这样的域名来访问网站。
  • 计算机眼中的网络世界: 它们只认识像 142.251.42.206 这样的数字串,这叫 IP地址。它才是网站在互联网上的真实“门牌号”。

DNS的核心工作,就是担任“翻译官”,把我们熟悉的域名“翻译”成计算机认识的IP地址。

这个过程是自动的,你几乎感知不到。每当你打开一个网站、点击一个链接,背后都有DNS在默默工作。

二、为什么需要DNS?没有它行不行?

不行! 如果没有DNS,互联网会变得极其难用。

试想一下,如果你想上百度,不是输入 baidu.com,而是必须记住并输入 110.242.68.66 这样一串数字;想上淘宝,得输入另一个IP地址……这简直是一场噩梦!

DNS的三大功劳:

  1. 方便记忆: 让我们能用有意义的词语(域名)而不是冰冷的数字(IP)上网。
  2. 隐藏复杂性: 网站服务器可能会更换机房、IP地址可能会变,但域名可以保持不变。DNS帮我们处理了这些背后的变化。
  3. 负载均衡: 一个热门网站(如淘宝)背后有成千上万台服务器。DNS可以根据你的位置或服务器压力,将你引导到最快、最不拥挤的那一台IP地址上。

三、DNS协议

对于Internet来说,域名层次结构的顶级(相当于国际快递地址中的国家部分)由ICANN(互联网名称与数字地址分配机构)负责管理。目前,已经有超过250个顶级域名,每个顶级域名可以进一步划为一些子域(二级域名),这些子域可被再次划分(三级域名),依此类推。所有这些域名可以组织成一棵树,如下图所示(图片来自Distributed Systems - Name Services):

WeChatWorkScreenshot_91215e89-e80c-417c-869c-8d81aed05bde.png

我们知道不能只用一台域名服务器来响应所有的DNS查询,因为没有一台机器能够给全球的用户提供查询服务,计算能力、存储、带宽都不允许。只能合理组织一个域名服务器集群,使他们协同工作,共同提供域名解析服务。接下来首先要面对的一个问题是如何合理地将所有的域名资源记录存储到不同的域名服务器上。

前面说过域名的名字空间可以组织为一棵树,这里我们可以进一步将其划分为不重叠的区域(DNS zone),针对上图的域名空间,一种可能的域名划分如下图:

WeChatWorkScreenshot_bb2b8fc0-be38-4e52-ab7b-1e75c046f6e0.png

然后将每个区域与多个域名服务器(其中一个是master,其他slave服务器则用来提供数据备份、加快解析速度、保证服务可用性)关联起来,称这些域名服务器为该区域的权威域名服务器(Authoritative Name Servers ),它保存两类域名资源记录

1:该区域内所有域名的域名资源记录。

2:父区域和子区域的域名服务器对应的域名资源记录(主要是NS记录)。

这样,所有的域名资源记录都保存在多个域名服务器中,并且所有的域名服务器也组成了一个层次的索引结构,便于我们后面进行域名解析。下面以一个简化的域名空间为例子,说明域名资源记录是如何保存在域名服务器中的,如下图a:

WeChatWorkScreenshot_2b8b3afe-9517-4125-bc4d-a32ef6dbcddd.png

图中域名空间划分为A, B, C, D, E, F, G七个DNS区域,每个DNS区域都有多个权威域名服务器,这些域名服务器里面保存了许多域名解析记录。对于上图的DNS区域E来说,它的权威域名服务器里面保存的记录如图中表格所示。

仔细观察上图你可能会发现区域A、B并没有父区域,他们之间并没有一条路径连在一起。这将导致一个很麻烦的问题,那就是区域A的权威域名服务器可能根本不知道区域B的存在。认识到这一点后,你可能会想出一个很自然的解决方案,就是在A中记录B域名服务器的地址,同时在B中记录A的,这样它们两个就联系起来了。但是考虑到我们有超过250个顶级域名,这样做并不是很恰当。

而我们使用的域名系统则采用了一种更加聪明的方法,那就是引入根域名服务器,它保存了所有顶级区域的权威域名服务器记录。现在通过根域名服务器,我们可以找到所有的顶级区域的权威域名服务器,然后就可以往下一级一级找下去了。下图为全球根域名服务器的分布图,可以在这里找到。

WeChatWorkScreenshot_8ba34cbf-14de-47d8-8f50-0559994766d2.png

四、DNS是如何工作的?一次完整的寻址过程

当你输入一个网址并按下回车时,一次高效的DNS查询就开始了。这个过程通常分几步走,像一个层层递进的问路过程:

  1. 浏览器缓存查询: 你的浏览器首先会翻自己的“小本本”(缓存),看看最近是否访问过这个网站,如果有记录,直接使用,最快最省事。

  2. 操作系统缓存查询: 如果浏览器没找到,它会去问电脑的操作系统(比如Windows或MacOS):“嘿,你这有 xxx.com 的地址吗?”

  3. 求助本地DNS服务器: 如果本地都没有记录,你的电脑就会向 本地DNS服务器(通常由你的网络服务商,如电信、联通提供)发起询问。这是你DNS查询的“第一站”。

  4. 根域名服务器指路: 本地DNS服务器自己也不知道,它就会去问互联网DNS体系的“总指挥部”——根域名服务器。根服务器不直接给出答案,但它会告诉你:“.com 域名归A机构管,你去问它吧。”

  5. 顶级域服务器指路: 本地DNS服务器接着去找 .com顶级域服务器 询问。顶级域服务器管理所有以 .com 结尾的域名,它同样不直接给答案,而是说:“xxx.com 这个域名的详细信息在B那里,你去找B。”

  6. 权威域名服务器获取答案: 本地DNS服务器最后找到管理 xxx.com 这个域名的 权威域名服务器。这次,它终于拿到了最终的IP地址。

  7. 返回结果并缓存: 本地DNS服务器欢快地把IP地址返回给你的电脑,同时自己也会把这个结果记下来(缓存)一段时间,以便下次有人问同样的问题时能快速回答。

  8. 网站连接建立: 你的电脑拿到IP地址后,才正式向目标网站服务器发起连接,网页内容开始加载。

整个过程在毫秒之间完成,正是这套高效、分布式的系统,支撑着我们顺畅的网上冲浪体验。

五、DNS缓存

每次翻译的过程其实都是对网络资源的一笔不小开销,聪明的人们就设计了缓存机制,在每台客户端主机-每台路由-每个跳板机以及我们的ISP服务商中都存着大量的翻译结果,我们每次访问成功后都会逐级缓存下来,这样就能极大的减少我们的查询时间,让我们网上冲浪更加欢快。(缓存的本质也是维护一个host)

六、除了翻译,DNS还能做什么?

现代DNS的功能已经超越了简单的“翻译”。

  • CDN与加速: 如前所述,DNS可以将你引导到离你地理位置上最近的服务器节点,大幅提升网页加载速度和视频播放流畅度。
  • 内容过滤与安全: 一些DNS服务(如知名的 1.1.1.18.8.8.8)可以提供恶意网站拦截、成人内容过滤等功能。
  • 内网服务发现: 在公司或家庭的内部网络中,DNS可以帮助设备轻松地通过主机名找到彼此,比如用 printer.local 就能访问打印机。

七、一个实用小技巧:修改你的DNS

有时候,你可能会觉得网速慢,或者某些网站打不开。这可能是你的默认DNS服务器(ISP提供)响应慢或不稳定。一个简单的优化方法就是手动更换一个更快、更可靠的公共DNS服务器

如何修改(以Windows为例):

  1. 打开“网络和Internet设置”。
  2. 进入“更改适配器选项”。
  3. 右键你正在使用的网络连接,选择“属性”。
  4. 双击“Internet协议版本4 (TCP/IPv4)”。
  5. 选择“使用下面的DNS服务器地址”,然后填入你喜欢的DNS地址。

推荐几个知名的公共DNS:

  • 国内常用:
    • 114.114.114.114
    • 223.5.5.5 (阿里云)
    • 119.29.29.29 (腾讯云)
  • 国际常用:
    • 8.8.8.8 (Google DNS)
    • 1.1.1.1 (Cloudflare DNS)

更换DNS有时能带来意想不到的提速效果,并可能解决一些因DNS污染或故障导致的无法访问问题。

总结

DNS是互联网的基石,它虽默默无闻,至关重要。无它全球互联网将进入“局域网”时代。