互联网的域名系统(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地址的映射。简单举个例子:
localhost
→ 127.0.0.1
再来个实际点的(简化版):
google.com
→ 216.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请求到对应的服务器,拿到我们熟悉的谷歌搜索页面。