DNS原理
本文最后更新于59 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

DNS是如何工作的

当浏览网页,发送邮件或使用App时,背后都有一个默默工作的基础功能,也就是DNS(域名系统,Domain Name System)。他将容易记的域名如www.bilibili.com转换成机器可读的IP地址如127.0.0.1,方便人们不需要人脑记复杂的ip

1. 为什么需要DNS

互联网上的每一台设备都有一个唯一的IP地址,用于定位和通信。但IP地址由数字组成,难以记忆和传播。例如访问www.bilibili.com网站,你可能会记住 bilibili.com,而不是 134.166.250.23(IPv4)或 2404:6800:4008:c03::be(IPv6)这种复杂的地址。
早期互联网使用一个名为 HOSTS.TXT 的文本文件来维护域名与IP的映射关系,由中央管理机构(SRI的NIC)定期更新并分发。但随着网络规模爆炸式增长,这种集中式管理暴露出严重问题,如文件体积越来越大,下载负担重。主机名冲突。单点故障风险高。

于是,DNS 在1983年被提出,后经多次修订成为今天的标准。它采用分布式、层次化的数据库,将域名管理权分散到各级机构,既保证了扩展性,又提高了可靠性和效率。

2. DNS的层次结构

DNS的命名空间是一个树状结构,类似文件系统的目录树。树的每个节点代表一个域名,叶子节点通常是具体的主机。

一个完整的域名(FQDN,Fully Qualified Domain Name)从根开始,由“.”分隔成多个标签。例如  www.bilibili.com.(最后的点表示根,通常省略)。

  • 根域(Root Domain):树的最高层,由“.”表示。根域下是所有顶级域。
  • 顶级域(TLD,Top-Level Domain):如 .com.org.net、国家代码 .cn.uk 等。每个TLD由专门的注册管理机构管理(如Verisign管理 .com 和 .net)。
  • 二级域(Second-Level Domain):在TLD下注册的名称,如 example.com,通常由个人或组织申请。
  • 子域(Subdomain):二级域下的进一步划分,如  www.bilibili.com a.bilibili.com ,可由域名所有者自行创建。

没有一个服务器存储所有域名信息。每个层级都有对应的权威域名服务器,负责维护本层级的记录,并指向下一层级的服务器。这种委托机制使得管理权分散,任意一个区域出现故障不会影响全局。

例如,管理 .com 的服务器不存储  www.bilibili.com 的具体IP,但知道哪个权威服务器负责  www.bilibili.com ,并把查询指引过去。

3. DNS服务器类型

  • 本地递归解析器(Local Recursive Resolver)

通常由你的ISP(互联网服务提供商)或公共DNS服务(如Google的8.8.8.8,Cloudflare的1.1.1.1)提供。它负责接收客户端的查询请求,并代为完成整个域名解析过程,最后将结果返回给客户端。它会缓存结果以加速后续查询。

  • 根域名服务器(Root Name Server)

全球有13组根服务器(逻辑上13个地址,背后有多台物理服务器,使用任播技术分布世界各地)。它们存储顶级域(TLD)的权威服务器信息(即告诉查询者 .com 的服务器在哪)。根服务器不负责具体域名,只提供TLD的指引。

  •  顶级域域名服务器(TLD Name Server)

管理特定顶级域(如 .com)的服务器。它们知道该TLD下所有二级域的权威服务器地址。例如,查询  bilibili.com,TLD服务器会告知  bilibili.com  的权威服务器是 ns3.dnsv5.com 等。

  • 权威域名服务器(Authoritative Name Server)

负责存储特定域名的DNS记录(如A记录、MX记录等)。权威服务器是最终回答域名IP的地方。通常由域名所有者(如公司自己)或托管服务商(如Cloudflare,AWS Route 53)维护。

  • 客户端(Stub Resolver)

嵌在操作系统中的解析器(如Linux的glibc解析器)。它负责向本地递归解析器发起查询,并等待结果。

4. DNS解析过程

假设你在浏览器里输入 www.bilibili.com,浏览器首先得知道这个网站的IP才能连接。整个过程分两种查询模式:递归查询迭代查询。一般来说,从你电脑到本地解析器是递归查询,而本地解析器去问各个权威服务器是迭代查询。

你的电脑向本地DNS服务器(可能是你路由器分配的,比如192.168.1.1,或者你手动设的8.8.8.8)发出请求:帮我查查 www.bilibili.com 的IP,你不知道的话就帮我去找,最后把结果告诉我。 本地解析器必须给你一个答案,不管是找到IP了还是报错。本地解析器收到你的请求后,就开始自己跑腿了。

先问根域名服务器,再去问顶级域服务器,最后问权威域名服务器,本地解析器拿到IP后,先把它缓存起来,然后把这个IP返回给你的电脑。你的操作系统拿到IP交给浏览器,浏览器就可以发起连接,打开网页了。

缓存是为了不让根服务器和顶级域服务器累趴下,DNS到处都用缓存。每一级查询的结果(比如根指引、顶级域指引,还有最终IP)都会被本地解析器存一段时间,存多久由每条记录的TTL(生存时间)决定。下次有人问同一个域名,本地解析器直接用缓存里的结果,省得再跑一趟。

DNS记录常见类型

  • A 把域名指向一个IPv4地址 (blf1287.asia. IN A 192.0.2.1)
  • AAAA 把域名指向一个IPv6地址(blf1287.asia. IN AAAA 2001:db8::1/)
  • CNAME 把一个域名指向另一个域名(比如a.w.bilicdn1.com是www.bilibili.com 的别名)
  • MX 邮件交换记录 告诉别人发邮件到这个域名该用哪个邮件服务器,还有优先级
  • NS 指定这个域名的权威DNS服务器是哪个
  • TXT 存一些文本信息,常用来做验证,比如SPF或DKIM

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇