代码改变世界

【计算机网络】深入浅出DNS:网络世界的地址簿与导航系统 - 教程

2025-11-23 21:39  tlnshuju  阅读(0)  评论(0)    收藏  举报

前言

TCP/IP 网络协议栈中使用 IP 地址和端口号来确定网络上的一台主机的一个代码。但是IP 地址不方便记忆。于是人们发明了一种叫主机名的东西,是一个字符串,并且使用 hosts 文件来描述主机名和 IP 地址的关系。

最初,凭借互连网信息中心(SRI-NIC)来管理这个 hosts 文档的。

  1. 如果一个新计算机要接入网络,或者某个计算机 IP 变更,都需要到信息中心申请变更 hosts 文件。
  2. 其他计算机也需要定期下载更新新版本的 hosts 文件才能正确上网。

但是产生了 DNS 系统就是这样就太麻烦了,于。(域名服务器)

  1. 一个组织的系统管理机构,维护系统内的每个主机的 IP 和主机名的对应关系。

  2. 如果新计算机接入网络,将这个信息注册到数据库中;

后面用户输入域名的时候,会自动查询 DNS 服务器,由 DNS 服务器检索数据库, 得到对应的 IP 地址

域名(如:www.google.com):就像一个人的名字。我们记名字很容易,但很难记住他家的具体经纬度坐标。
IP地址(如:142.251.42.206):就像这个人的“经纬度坐标”或“电话号码”。这是计算机在网络上定位另一台计算机的唯一方式。
DNS的作用就是:当你在浏览器里输入一个名字(域名)时,它帮你查到这个名字对应的电话号码(IP地址),这样你的浏览器才能打电话(建立连接)给正确的服务器。

本文章就是和大家简单介绍一下 DNS 技术。

1. 前置

  • 域名分析

    我们以一个完整的域名mail.server.example.com. 为例

    • 根域:这是域名系统中的最高层级。在我们输入的时候通常是被忽略的。其中上面域名中最后末尾的.就是根域。

    • 顶级域:这是域名框架中的紧接着根域的分支。它通常分为两类:

      1. 通用顶级域(gTLD):如 .com(商业机构),.org(非营利组织),.net(网络机构),以及新的如 .app, .io, .ai 等
      2. 国家及地区顶级域(ccTLD):如 .cn(中国),.us(美国),.jp(日本)等。

      同时:管理 .com 的TLD服务器就知道所有以 .com 结尾的二级域名(如 example.com)的权威服务器在哪里
      其中上面的域名中的 .com 就是一个顶级域

    • 二级域:这是我们自己/公司自行注册的部分了。我们拥有对这个域名的控制权,可以自主创建下一级的子域名,并设置对应的DNS记录。

      整个域名所有权的核心。就是这一级

      其中上面的域名中的 example 就是一个二级域。

    • 子域名:这是由二级域名的所有者自由创建的,无需额外注册,也无需付费。

      我们可以把 example.com 这个一个大区域划分成多个区域,用于不同的服务。(其中上面的 .server 就是二级域下的一个子域名)

      www.example.com -> 网站

      mail.example.com -> 邮件服务器

      server.example.com -> 某台特定服务器

      子域名可以有多级,比如 mail.server1.ny.example.com。

小结:

  • 域名之间的层级关系,大家能够用类比:文件系统的目录树

    想象一下电脑档案路径,比如:C:\Users\YourName\Documents\example.docx

    这个路径是从大到小,从左到右组织的:

    C: -> 盘符(最顶层)

    Users -> 文件夹

    YourName -> 子文件夹

    Documents -> 子文件夹

    example.docx -> 具体的文件

    域名体系的组织方式与此高度相似,只是方向相反:从右到左,从小范围到大范围

  • 树状图:

根域 .
.com
.org
.cn
example.com
google.com
wikipedia.org
baidu.cn
mail.example.com
www.google.com
mail.google.com
mail.server.example.com
  • 理解域名

    我们应该如何理解域名呢?

    一个域名就是一块“数字领土”。当你注册了 example.com,你就相当于在互联网世界里拥有了一块叫 example.com 的领地。

    • 管辖权通过:在这块领土内,你拥有绝对的管理权。你能够:

      • 划分区域:创建子域名,就像在领地上划分区域。例如:“办公区”(office.example.com)、“生活区”(home.example.com)、“仓库区”(storage.example.com)。

      • 制定规则:设置 DNS 记录,就像制定访问的规则。比如:当我们在 DNS 中设置了一个 www.example.com 的对应 ip 地址。那么就是告诉 DNS 当有人需要来到 www 的区域上的时候,请去往对应的 ip……

    • 层次性:这种领土是层层嵌套的。

      .com 是一个顶级领土(比如一个“商业国家”)。

      example 是你在这个商业国家里注册的一块私人领地。

      www 是你私人领地上盖的一栋具体建筑。

小结:

  • “域”的本质是一个管理边界,它界定了一块你拥有控制权的命名空间

2. DNS 查询过程

  • 前置:DNS 服务器:

    DNS一个单一的服务器就是不,而是一个全球分布的层级架构,主要分为四层:

    1. 根域名服务器:全球只有13组(注意是组,每组都有很多台镜像服务器),它们知道所有顶级域(如 .com, .net, .cn)的信息。

    2. 顶级域(TLD)域名服务器:负责管理特定的顶级域。比如 .com TLD服务器知道所有以 .com 结尾的域名的授权信息。

    3. 权威域名服务器:是域名真正的主人管理的服务器。它存储着该域名下所有子域名(如 www, mail)和其IP地址的最终映射关系

    4. 本地DNS服务器:通常由你的网络运营商(如电信、联通)提供,或者是你自己设置的。它是你电脑发起 DNS 查询的“第一站”和“代理”。

下面我们来讲解 DNS 的查询过程:

  1. 浏览器缓存:我们在浏览器输入 www.example.com 后,浏览器第一会检查自己的缓存里有没有该域名的IP地址。假如有(并且没过期),直接使用,解析结束。

  2. 操作系统缓存:假如浏览器缓存没有,浏览器会去询问操作系统的缓存。在Windows里是 hosts 文件,在Mac/Linux里也是 /etc/hosts 文件以及系统自身的 DNS 缓存。

  3. 询问本地 DNS 服务器:如果前两步都没找到,你的电脑就会把查询请求发送给本地DNS服务器(这个地址通常在连接网络时自动获取)。

  4. 本地DNS服务器的查询(递归查询):(先查本地 DNS 的缓存)我们的电脑对本地 DNS 服务器说:“帮我找到 www.example.com 的IP”。接下来,本地DNS服务器就开始替你去奔波了:

    • 询问根域名服务器:本地 DNS 服务器最初去问 13 个根服务器之一:“你知道 www.example.com 在哪吗?” 根服务器不会直接给出答案,但它会回复说:“我不知道 www.example.com 的IP,但我可以告诉你 .com 顶级域服务器的地址,你去问它吧。”

    • 询问顶级域(TLD)服务器通过:本地DNS服务器拿着根服务器给的地址,去问 .com TLD服务器:“你知道 www.example.com 在哪吗?” TLD服务器同样不会给出最终答案,但它会回复:“我不知道 www.example.com 的IP,但我能够告诉你 example.com 这个域的权威域名服务器的地址,你去问它吧。”

    • 询问权威域名服务器:本地 DNS 服务器最后拿着 TLD 服务器给的地址,去问 example.com 的权威服务器:“请告诉我 www.example.com 的IP地址” 这次,权威服务器终于给出了最终的答案:“www.example.com 的IP是 93.184.216.34。”

  5. 返回结果并缓存:本地DNS服务器终于拿到了IP地址,这下它会做两件事情:

    • 首先,把该结果缓存起来(根据TTL值设定有效期,缓存在 DNS 本地服务器上),下次再有人问同样的问题,它就可以直接回答,不用再跑一圈了。

    • 然后,把IP地址 93.184.216.34 返回给你的电脑。

  6. 操作系统缓存并返回:你的操作系统收到IP后,也把它放进自己的缓存里,随后交给浏览器。

  7. 浏览器发起连接:浏览器终于拿到了 www.example.com 的IP地址,现在它可以与目标服务器建立TCP连接,发起 HTTP 请求,然后获取网页内容了。

  • 整个流程如下图:

    在这里插入图片描述


  • 加入缓存的流程图:
用户/浏览器 浏览器缓存 操作系统缓存本地DNS服务器根/TLD/权威服务器第一次查询(无缓存场景) 输入网址 查询DNS 浏览器缓存未命中查询平台缓存系统缓存未命中查询本地DNS本地DNS缓存未命中开始迭代查询返回最终IP 权威结果! 在本地DNS缓存 返回IP 在操作系统缓存 返回IP 在浏览器缓存 返回IP 第二次查询(缓存命中场景)再次访问同一网址浏览器缓存命中!直接利用IP(查询结束,无需后续步骤)用户/浏览器 浏览器缓存 操作系统缓存本地DNS服务器根/TLD/权威服务器