🌐用户输入URL到浏览器的第一步——DNS解析

107 阅读4分钟

🌐 什么是 DNS?

DNS 全称:Domain Name System(域名系统)

它是互联网的“电话簿”或“翻译官”,核心作用是:

将人类友好的域名(如 www.baidu.com)转换为机器可识别的 IP 地址(如 14.215.177.39

因为网络通信最终依赖的是 IP 地址,但记 IP 太难了,所以有了域名。DNS 就是连接这两者的桥梁。

为什么需要 DNS?

  • 用户友好:记住 google.com 比记住 172.217.3.14 容易得多。
  • 灵活性:一个域名可以指向多个 IP(负载均衡),IP 变了也不影响用户访问。
  • 分布式设计:全球数十亿网站,不可能用一个中心服务器管理所有映射,所以 DNS 是分布式数据库系统

每个域名所对应的ip地址不是唯一的,一个域名的背后,有一堆的服务器,在多地的机房,就近原则。

通过负载均衡算法。如果某个服务器 down 了,还有其他的服务器可以用——容灾,高性能。

DNS 解析的过程

当你在浏览器输入 http://www.baidu.com 并回车时,第一步就是 DNS 解析

整个过程遵循“先查缓存 → 未命中则逐级查询”的原则,按优先级顺序如下:

第一步:补全 URL

浏览器先判断你输入的内容是否是完整 URL:

  • 如果只输入 baidu.com,会自动补全为 http://www.baidu.com
  • 然后提取出主机名(hostname):www.baidu.com

第二步:查找 DNS 缓存(本地优先)

  • DNS 查询遵循“由近及远”的策略,依次检查以下缓存:

1️⃣ 浏览器缓存(最快)

  • 现代浏览器(Chrome、Firefox 等)自带 DNS 缓存。
  • 查看方式:
chrome://net-internals/#dns
  • 特点:

    • 快速响应
    • 通常缓存几分钟(TTL 控制)
    • 第一次访问无缓存,需继续向下查询

2️⃣ 操作系统缓存

  • OS 层也有 DNS 缓存机制
  • Windows 命令查看:
ipconfig /displaydns

清除缓存命令:

ipconfig /flushdns

3️⃣ Hosts 文件(手动配置,最高优先级)

  • 路径(Windows):C:\Windows\System32\drivers\etc\hosts
  • 格式:
IP地址        域名
127.0.0.1     bilibili.com
192.168.1.10  myproject.local
  • 用途:
    • 开发调试:把本地服务绑定到正式域名,模拟线上环境
    • 屏蔽广告/恶意网站
    • 内部测试:不依赖 DNS 服务器即可完成解析

⚠️ 注意:Hosts 文件的优先级高于网络 DNS 查询! 只要配置了,就不会再去网上查。

完整流程如下:

步骤操作说明
1补全 URL输入 baidu.com → 自动补全为 http://www.baidu.com
2浏览器 DNS 缓存Chrome 内置缓存,查看地址:chrome://net-internals/#dns
3操作系统 DNS 缓存Windows 命令:ipconfig /displaydns
清除缓存:ipconfig /flushdns
4Hosts 文件检查路径:C:\Windows\System32\drivers\etc\hosts
格式:IP 域名
例:127.0.0.1 bilibili.com
✅ 优先级最高!配置后直接返回,不走网络查询

 第三步:递归解析器

如果以上三层本地缓存都未命中,系统就会向 ISP(互联网服务提供商)指定的 DNS 递归解析器发起请求。

比如你的路由器默认使用电信/联通的 DNS,或你手动设置为:

  • 8.8.8.8(Google Public DNS)
  • 1.1.1.1(Cloudflare DNS)
  • 114.114.114.114(国内公共 DNS)

这个递归解析器会帮你完成后续的“全球查询”。

第四步:递归解析器的“全球寻址”之旅(迭代查询)

递归解析器开始层层向上查询,直到找到目标 IP。这个过程是 迭代查询 ,主要包括以下几步:

1️⃣ 向根域名服务器(Root Server)查询

  • 全球有 13 组根服务器(逻辑上的)

问:“.com 域由谁管理?”

  • 返回:负责 .com 的顶级域名服务器地址

2️⃣ 向顶级域名服务器(Top-Level Domain Server, TLD)

  • 如 .com.org.cn

问:“baidu.com 的权威服务器是谁?”

  • 返回:baidu.com 的权威 DNS 服务器地址(如 ns1.baidu.com
3️⃣ 向权威域名服务器(Authoritative Name Server)
  • 这是真正存储域名与 IP 映射的地方

问:“www.baidu.com 对应什么 IP?”

  • 返回:最终的 IP 地址(如 14.215.177.39

✅至此,递归解析器拿到了结果,返回给你的电脑,并缓存起来

总结:DNS 解析全过程图解

用户输入 www.baidu.com
        ↓
补全 URL & 提取域名
        ↓
[1] 浏览器缓存? → 是 → 返回 IP
        ↓ 否
[2] 系统缓存?   → 是 → 返回 IP
        ↓ 否
[3] Hosts 文件? → 是 → 返回 IP
        ↓ 否
[4] 向递归解析器请求
        ↓
     根服务器 → .com TLD 服务器 → baidu.com 权威服务器
        ↓
    获得 IP 地址 → 返回客户端 + 缓存
        ↓
浏览器发起 HTTP 请求