Skip to content

域名(Domain)与 DNS 解析

一、 域名(Domain Name)

1. 作用

  • 便于人类记忆:域名使用有意义的字符来代替纯数字的 IP 地址,例如用 www.google.com 代替 142.251.46.196
  • 网络传输依赖 IP:尽管域名易于记忆,但网络通信(如 TCP/IP 协议栈中的网络层)最终依赖 IP 地址进行寻址和数据传输。

2. 域名类型

域名的结构是分层次的,从右到左,级别越高。一个完整的域名 www.pku.edu.cn. 包含以下几个部分:

级别示例说明
根域名 (Root Domain).位于域名最后,通常被省略。代表域名的根。
顶级域名 (Top-Level Domain, TLD).cn表示国家或地区(如 .cn, .us)或特定组织类型(如 .com 公司, .org 非盈利组织, .edu 教育机构)。
二级域名 (Second-Level Domain, SLD).edu在此例中,.edu.cn 是一个组合,表示中国的教育机构。对于 baidu.combaidu 就是二级域名,通常是用户需要付费购买的部分。
三级域名pkupku (Peking University) 是在 .edu.cn 下的域名,由对应机构(北京大学)管理。
四级域名/主机名www通常用于指定提供特定服务的服务器,如 www (Web 服务), mail (邮件服务)。购买二级域名后,三级及以上域名可由所有者免费自定义

知识点

  • 用户通常购买的是二级域名(如 baidu.com, yuanjing.tech)。
  • 购买二级域名后,可以免费、自定义其下的所有三级、四级等子域名(如 mail.baidu.com, abc.yuanjing.tech)。
  • 早期,一些有商业头脑的人通过抢注有价值的短域名或名人拼音域名而获利。

二、 DNS (Domain Name System)

1. 作用

  • 定义:DNS 是一个分布式数据库,用于将人类可读的域名翻译成机器可读的IP 地址
  • 过程:将域名转换为 IP 地址的过程称为域名解析 (Domain Name Resolution)
  • 服务器:执行域名解析功能的服务器称为 DNS 服务器

2. DNS 服务器分类

全世界公认的 DNS 服务器体系分为三种,外加一种我们日常接触最多的本地 DNS 服务器。

类型说明
本地 DNS 服务器 (Local DNS Server)- 非官方体系,但最先被访问。<br>- 通常由网络服务提供商 (ISP) 提供,或设置为路由器地址。<br>- 具有缓存功能,加速解析。<br>- 在公司或学校内网中,可用于过滤特定网站的访问。
根域名服务器 (Root DNS Server)- 全球共有 13 个逻辑根服务器,分布在数百个物理节点上。<br>- 它不直接解析域名,而是返回对应顶级域名服务器的地址
顶级域名服务器 (TLD DNS Server)- 管理特定顶级域名(如 .com, .cn)<br>- 它不直接解析域名,而是返回对应权限域名服务器的地址
权限域名服务器 (Authoritative DNS Server)- 由域名所有者(或其服务商)管理。<br>- 记录了域名与 IP 地址的最终映射关系。<br>- 它会返回最终的 IP 地址给查询方。

3. 域名配置

购买域名后,所有者需要在域名提供商的控制台进行解析配置,将域名指向自己的服务器 IP。

  • A 记录 (Address Record):将一个域名直接指向一个 IPv4 地址。
    # 将 www.yuanjing.tech 指向服务器 IP 1.2.3.4
    www  A  1.2.3.4
  • @ 记录:表示对主域名(不含任何子域名的二级域名)进行解析。
    # 将 yuanjing.tech 指向服务器 IP 1.2.3.4
    @  A  1.2.3.4
  • * 记录 (泛解析):将所有未明确指定的子域名都指向同一个 IP。
    # 将 *.yuanjing.tech (如 abc.yuanjing.tech, hello.yuanjing.tech) 都指向 1.2.3.4
    * A  1.2.3.4
  • CNAME 记录 (Canonical Name Record):将一个域名指向另一个域名。最终的 IP 解析由目标域名完成。
    # 将 resume.yuanjing.tech 指向另一个域名
    resume  CNAME  another-service.provider.com.

三、 ★ 面试核心:域名解析全过程

当你在浏览器输入 www.baidu.com 并按下回车后,会发生以下解析过程:

第一步:查找本地缓存和文件

  1. 浏览器缓存:浏览器会先检查自己的缓存中是否有该域名的 IP 地址记录。

  2. 操作系统缓存:如果浏览器缓存没有,会检查操作系统的 DNS 缓存。

  3. hosts 文件:如果系统缓存也没有,会查找本地的 hosts 文件。该文件允许用户手动配置域名与 IP 的映射关系。

    • Windows:C:\Windows\System32\drivers\etc\hosts
    • macOS/Linux:/etc/hosts
    text
    # hosts 文件示例
    127.0.0.1  localhost
    # 手动将 www.sina.com 指向本机,可用于开发或屏蔽网站
    127.0.0.1  www.sina.com

    如果在上述本地步骤中找到对应的 IP 地址,解析过程结束,直接使用该 IP 发起网络请求。

第二步:向 DNS 服务器发起递归查询

如果本地没有找到记录,计算机会向本地 DNS 服务器(通常是路由器或 ISP 的 DNS 服务器)发起查询。本地 DNS 服务器会负责后续的迭代查询过程。

  1. 查询本地 DNS 服务器
    • 如果本地 DNS 服务器的缓存中有 www.baidu.com 的记录,它会直接返回这个 IP 地址。
    • 如果没有,它将开始向根域名服务器发起查询。

第三步:迭代查询过程

  1. 查询根域名服务器:本地 DNS 服务器向根服务器发起查询:“www.baidu.com 的 IP 是什么?”

    • 根服务器回复:“我不知道,但 .com 归 TLD 服务器管,它的地址是 X.X.X.X,你去问它。”
  2. 查询顶级域名服务器 (TLD Server):本地 DNS 服务器转向 TLD 服务器(管理 .com 的)发起查询:“www.baidu.com 的 IP 是什么?”

    • TLD 服务器回复:“我不知道,但 baidu.com 的权限域名服务器地址是 Y.Y.Y.Y,你去问它。”
  3. 查询权限域名服务器 (Authoritative Server):本地 DNS 服务器再转向 baidu.com 的权限域名服务器发起查询:“www.baidu.com 的 IP 是什么?”

    • 权限域名服务器掌管着 baidu.com 所有的解析记录,它查找后回复:“它的 IP 地址是 Z.Z.Z.Z。”

第四步:返回结果并缓存

  1. 返回结果给客户端:本地 DNS 服务器拿到 IP 地址 Z.Z.Z.Z 后,将其返回给用户的操作系统。
  2. 本地 DNS 缓存:同时,本地 DNS 服务器会将这个域名和 IP 的对应关系缓存起来,以便下次有其他用户查询时能直接返回结果,加快速度。
  3. 发起 HTTP 请求:用户的操作系统拿到 IP 地址后,浏览器就可以向目标服务器 Z.Z.Z.Z 发起 HTTP 请求,开始加载网页。

总结:域名解析面试题回答要点

阐述域名解析过程:

  1. 检查本地:首先,依次检查浏览器缓存操作系统缓存和本地 hosts 文件中是否有该域名的 IP 记录。如果有,直接使用,解析结束。
  2. 本地 DNS 服务器:如果本地没有,则向本地 DNS 服务器(通常由 ISP 提供)发起查询。如果其缓存中有记录,则直接返回。
  3. 根域名服务器:如果本地 DNS 服务器缓存中没有,它会向根域名服务器查询。根服务器会返回对应的顶级域名(TLD)服务器地址。
  4. 顶级域名服务器:本地 DNS 服务器接着向 TLD 服务器(如 .com 的服务器)查询。TLD 服务器会返回该域名对应的权限域名服务器地址。
  5. 权限域名服务器:最后,本地 DNS 服务器向权限域名服务器查询,获取到最终的 IP 地址。
  6. 返回与缓存:本地 DNS 服务器将获取到的 IP 地址返回给客户端,并将该记录缓存起来,以备后续查询。如果所有步骤都无法找到,则解析失败。

补充:为了提升效率,减少查询次数和时间,上述每一个查询节点(如本地 DNS 服务器、各级 DNS 服务器)都可能设置了高速缓存(Cache)。后续对同一域名的请求可以直接利用缓存结果,无需走完整流程。