前言
大家好这里是程序员阿亮,今天来讲解一下DNS
当你打开浏览器,输入 www.google.com 并按下回车时,幕后发生的第一件事并不是连接服务器,而是一场跨越全球的"地址查询"。这个过程依靠的就是 DNS(Domain Name System,域名系统)。如果没有 DNS,你必须记住像 142.250.190.46 这样枯燥的 IP 地址才能上网。今天,我们就来深度拆解这个被称为"互联网电话簿"的核心系统。
一、DNS是什么?
DNS 是一个分布式数据库,它的核心任务是将人类可读的域名(如 example.com)转换为机器可理解的 IP 地址(如 93.184.216.34)。
为什么它是分布式的?
全球有数十亿个域名,如果只存放在一台服务器上:
-
单点故障:服务器宕机,全网瘫痪。
-
访问延迟:距离服务器远的用户访问极慢。
-
性能瓶颈:无法支撑每秒数亿次的查询请求。
因此,DNS 采用了层级树状结构。
二、DNS层级结构
DNS 的查询就像是在政府部门办业务,从最高层逐级向下下放权力:
-
根域名服务器(Root DNS Server) :
它知道所有顶级域名(.com, .cn, .net)的解析服务器在哪里。全球只有 13 组 IPv4 根服务器地址(实际上通过 Anycast 技术部署在几百个地点)。
-
顶级域名服务器(TLD Server) :
负责管理特定的后缀,如 .com 所有的域名都在 TLD 服务器这里备案。
-
权威域名服务器(Authoritative DNS Server) :
这是域名真正的"档案保管处"。比如阿里云 DNS、Cloudflare 或你自己搭建的解析服务器。它保存着域名与 IP 的最终映射关系。
-
本地 DNS 服务器(Recursive Resolver) :
通常由 ISP(电信、移动)或公共服务(8.8.8.8)提供。它是你的"代理人",替你跑腿去问上面三位大佬。
三、 DNS 查询的全过程(以查询 www.baidu.com 为例)
DNS 查询分为两种模式:递归查询 (你对 Local DNS)和 迭代查询(Local DNS 对其他服务器)。
-
浏览器缓存/系统缓存:浏览器先看自己记没记住,再问操作系统(Hosts 文件)。
-
请求本地 DNS (LDNS):如果没有,电脑发请求给 LDNS:"帮我查下百度的 IP"。
-
咨询根服务器:LDNS 问根服务器:"你知道 www.baidu.com 吗?" 根服务器说:"我不具体知道,但我知道 .com 归谁管,你去问 TLD。"
-
咨询 TLD 服务器:LDNS 问 .com 服务器。TLD 说:"我知晓这个域名,它是百度的,你去问百度的权威服务器吧。"
-
咨询权威服务器:LDNS 问百度的服务器。权威服务器查表发现 www 对应 110.242.68.3,告诉 LDNS。
-
结果返回与缓存:LDNS 把结果给你的浏览器,并把这个结果存入自己的缓存(TTL 记录),下次有人问就直接回答。
总结
DNS 是互联网的基石。对于开发者来说,理解 DNS 不仅能帮你解决"为什么我本地能访问,别人访问不了"的问题,更能让你在架构设计中灵活运用 CDN、负载均衡和全站加速 等技术。
一句话总结:DNS 就是把好记的域名变成好用的地址,并通过层级和缓存机制保证了全球范围内的高效运转。