Skip to content

互联网的域名系统(DNS)是怎么回事?

DNS是个啥?简单来说,它是个把网站域名(hostname)转换成IP地址的系统。你知道,互联网上的网站其实是通过IP地址(IPv4或IPv6)来识别的。有了DNS,咱们就不用费劲去记那些烦人的IP地址了。

举个例子,看看两个大家熟的网站:

域名www.google.com
IPv4地址216.58.223.228
IPv6地址2c0f:fb50:4003:802::2004

你随便输这些地址到浏览器,都能打开我们熟悉的谷歌搜索页面。(小提醒:IPv6得有IPv6到IPv6的连接才行。)

我敢打赌,你能随口说出10到15个网站域名,但要是让你说出它们的IPv4地址,估计得抓瞎。

DNS解析就是让你输入google.com而不是一串IP地址的救星。

DNS的核心概念和组件

要搞懂DNS,咱得先聊聊几个关键概念。这些是DNS和DNS查询能正常运转的基础。

DNS记录

DNS记录本质上是域名和IP地址的映射。简单举个例子:

localhost127.0.0.1

再来个实际点的(简化版):

google.com216.58.223.228

DNS记录有好几种类型,下面是几个常见的:

  • A记录:最基本的记录,存的是域名的IPv4地址。
    google.com为例,A记录可能长这样:

    • 第一个字段是域名。
    • 第二个字段是记录类型,这里是A记录。
    • 第三个字段是域名解析到的值,这里是IPv4地址。
    • 最后是TTL(缓存时间),单位是秒,表示记录缓存多久。
  • AAAA记录:跟A记录差不多,但存的是IPv6地址。

  • CNAME记录:CNAME(规范名称)记录简单说就是重定向记录,把一个域名指向另一个域名。主要用来注册子域名。
    比如,www.google.com会重定向到google.com
    注意,不是所有记录都解析到IP地址,有的会解析到另一个域名,最后再通过DNS解析到IP。

  • MX记录:MX(邮件交换)记录指定邮件服务器。多了个“优先级”字段,值越低优先级越高。如果主邮件服务器挂了(比如服务器宕机),就用下一个优先级的服务器。

  • NS记录:NS(名称服务器)记录指向域名对应的名称服务器。
    它告诉你哪个DNS服务器是这个域名的“权威服务器”(存着实际的DNS记录)。换句话说,它告诉互联网去哪儿找DNS记录来获取IP地址。
    一个域名通常有多个NS记录,因为大多域名有主名称服务器和一个或多个备用服务器(作为后备)。

名称服务器

得区分清楚“名称服务器记录”和“名称服务器”。

  • 名称服务器:一种DNS服务器,存着域名的所有DNS记录,比如A记录、MX记录、CNAME记录等。
  • 名称服务器记录:本质上是指向名称服务器的指引。

域名通常用多个名称服务器提高可靠性:如果主服务器挂了,DNS查询可以回落到备用服务器。更新主服务器会触发备用服务器同步更新。

大多数情况下,NS记录会列出多个服务器(比如前面提到的例子)。

名称服务器分两种:

  • 权威名称服务器:存着“区域文件”,包含域名的实际DNS记录映射。
  • 递归名称服务器:不存区域文件,也不存实际DNS记录,而是存着指向其他服务器的映射,这些服务器要么有区域文件,要么知道去哪儿找区域文件。它们通过NS记录递归查找信息。

DNS区域和区域文件

  • DNS区域:DNS命名空间的分块,交给管理员管理。管理员可以创建和编辑区域内的记录。
    一个区域通常包含一个域名及其记录,但区域和域名不一定一对一,一个区域可能包含多个域名及其记录。

  • 区域文件:纯文本文件,存在DNS服务器上,记录DNS区域和其中每个域名的实际映射。
    它们是名称服务器存储域名/网站映射信息的地方,回答DNS查询。

DNS解析服务器(递归解析器)

DNS查询的起点。它们的目标是把域名解析成IP地址,充当Web客户端和名称服务器的中间人。

注意:它们不是名称服务器,而是通常由互联网服务提供商(ISP,比如美国的Starlink、AT&T,尼日利亚的MTN-NG)运行的递归服务器。

还有些公共DNS解析器,比如Cloudflare的(1.1.1.1)和谷歌的(8.8.8.8)。

DNS解析过程

好了,域名到IP的转换到底咋实现的?

当你在浏览器输入域名(正常人都输域名吧,谁会去输IP地址😅),系统会先试着在本地找出对应的IP地址,然后才去网上找。

google.com为例,来看看整个过程:

本地解析

  • 浏览器缓存:系统先查浏览器的缓存。如果之前访问过这个网站,IP可能已经缓存好了。
  • 操作系统缓存:没找到?那就去操作系统层面查,结合操作系统的stub resolver/etc/hosts文件,找有没有缓存或配置好的域名解析。

递归解析

本地没找到,就得去外网查,通过递归查询名称服务器,直到把域名转成IP地址。

  • DNS解析服务器(递归解析器):第一站是你的DNS解析服务器,通常由ISP运行。它的任务是通过递归查询找到域名对应的区域文件,拿到IP地址。
  • 解析器缓存检查:递归服务器先查自己的缓存。常用网页可能被你或其他电脑请求过,缓存里有快速答案。
  • 根名称服务器查询:缓存没找到,就去问根名称服务器。全球有13个根服务器,任何请求都得通过它们。根服务器像个索引,不存记录,但知道顶级域名(TLD)记录在哪儿。
    google.com为例,根服务器会返回.com域名的查找信息。
  • 顶级域名(TLD)服务器查询:顶级域名包括.com.net.org.ng等。解析器拿到TLD服务器的IP后去查询,得到权威名称服务器的地址,里面有实际的区域文件。
  • 权威名称服务器查询:最后问权威服务器,它通过区域文件把域名解析成IP地址,返回给递归服务器。

到这一步,我们就拿到了google.com的A记录(IPv4)地址:216.58.223.228

注意:这时候我们还没正式向谷歌的服务器发请求要网页呢😅。

DNS解析完后,才会发起HTTP请求到对应的服务器,拿到我们熟悉的谷歌搜索页面。