要理解从输入域名到浏览器加载页面的全过程,核心是搞懂两个关键环节:
- DNS 协议 :将
www.baidu.com这类易记域名,翻译成180.101.50.242这类机器能识别的 IP 地址; - CDN 技术 :在 DNS 解析的基础上,把用户请求导向距离最近的缓存服务器,实现网页 / 视频的快速加载。
我们以访问 www.taobao.com(淘宝,使用 CDN 加速)为例,拆解从输入域名到页面渲染的每一步细节。
一、前置知识:核心概念
| 概念 | 作用 |
|---|---|
| DNS 服务器 | 分布式的域名 - IP 映射数据库,分为本地 DNS、根 DNS、顶级域 DNS、权威 DNS 四级; |
| CDN(内容分发网络) | 由遍布各地的缓存节点服务器组成,提前缓存静态资源(如淘宝首页的图片、JS/CSS); |
| 权威 DNS(CDN 专用) | CDN 服务商的核心组件,作用是不直接返回源站 IP,而是返回距离用户最近的 CDN 节点 IP; |
| 源站服务器 | 网站的原始服务器(如淘宝的核心服务器),存储所有未缓存的动态数据(如实时商品价格)。 |
二、完整流程:DNS 解析 + CDN 加速
步骤 1:用户输入域名,浏览器触发 DNS 查询
用户在浏览器地址栏输入 www.taobao.com 并回车,浏览器会先检查本地缓存,判断是否有该域名的 IP 映射记录:
- 浏览器缓存 :浏览器会缓存近期访问过的域名 - IP 记录(有效期由 DNS 响应的
TTL字段决定); - 操作系统缓存 :若浏览器缓存无记录,会读取操作系统的
hosts文件(如 Windows 的C:\Windows\System32\drivers\etc\hosts)和系统 DNS 缓存。
若本地缓存有有效记录,直接跳过后续 DNS 解析步骤,进入步骤 6。
步骤 2:请求本地 DNS 服务器(运营商 DNS)
若本地缓存无记录,浏览器会向本地 DNS 服务器 发送查询请求 ------ 这是用户网络的 "默认 DNS",通常由宽带运营商(电信 / 联通 / 移动)提供,地址可在路由器或网络设置中查看(如 223.5.5.5 阿里公共 DNS、8.8.8.8 谷歌 DNS)。
本地 DNS 服务器也有自己的缓存,若缓存中有 www.taobao.com 的 IP 记录(且未过期),会直接返回给浏览器;若没有,则进入递归查询流程。
步骤 3:DNS 递归查询(从根到权威,核心!)
本地 DNS 服务器采用递归查询 的方式,逐级向更上层的 DNS 服务器查询,直到找到 www.taobao.com 的权威记录。
阶段 3.1:查询根 DNS 服务器
根 DNS 服务器是全球最高层级的 DNS 服务器,共 13 组,分布在全球各地。
- 本地 DNS 向根 DNS 发送请求:
请问 www.taobao.com 的 IP 是多少? - 根 DNS 不存储具体域名的 IP,只返回顶级域 DNS 的地址 ------
.com顶级域的 DNS 服务器地址。
阶段 3.2:查询顶级域 DNS 服务器(.com 服务器)
本地 DNS 向 .com 顶级域 DNS 发送请求:请问 www.taobao.com 的 IP 是多少?
- 顶级域 DNS 也不存储具体记录,返回权威 DNS 服务器的地址------ 淘宝域名的权威 DNS 服务器地址(通常是 CDN 服务商的 DNS,如阿里云 CDN 的权威 DNS)。
阶段 3.3:查询权威 DNS 服务器(CDN 核心!)
这是DNS 解析与 CDN 结合的关键步骤:
- 淘宝的权威 DNS 服务器由其 CDN 服务商(如阿里云)维护;
- 权威 DNS 服务器不返回淘宝源站的 IP ,而是根据用户的地理位置、网络运营商、节点负载 ,计算出距离用户最近的 CDN 节点服务器的 IP;
- 权威 DNS 将该 CDN 节点 IP 返回给本地 DNS 服务器。
举个例子:北京电信用户访问淘宝,权威 DNS 会返回 "北京电信 CDN 节点" 的 IP;广州联通用户则返回 "广州联通 CDN 节点" 的 IP。
步骤 4:本地 DNS 服务器返回结果给浏览器
本地 DNS 服务器将获取到的 CDN 节点 IP 返回给浏览器,并将该记录缓存(有效期由 TTL 决定),供后续其他用户查询。
步骤 5:浏览器与 CDN 节点建立连接(HTTP/HTTPS)
浏览器拿到 CDN 节点 IP 后,执行以下操作:
- TCP 三次握手:与 CDN 节点服务器建立可靠的 TCP 连接;
- TLS 握手(若为 HTTPS):CDN 节点返回自己的 CA 证书(通常由 CDN 服务商统一部署),浏览器验证证书合法性后,协商对称密钥,建立 HTTPS 安全通道。
步骤 6:CDN 节点判断资源是否缓存
浏览器向 CDN 节点发送 HTTP/HTTPS 请求:请返回 www.taobao.com 的首页资源。CDN 节点检查自身缓存,判断是否有该资源(如首页的 HTML、图片、JS/CSS):
情况 A:资源已缓存(命中缓存)
- CDN 节点直接将缓存的静态资源(如图片、JS)通过已建立的连接返回给浏览器;
- 这是 CDN 加速的核心价值:用户从 "就近节点" 获取资源,速度远快于直接访问千里之外的源站。
情况 B:资源未缓存(未命中缓存)
- CDN 节点会向淘宝的源站服务器发起请求,获取最新的资源;
- CDN 节点将资源返回给浏览器的同时,缓存该资源(有效期由 CDN 配置的缓存策略决定),供后续用户访问。
步骤 7:浏览器渲染页面
浏览器接收 CDN 节点返回的资源(HTML、图片、JS 等),解析并渲染出淘宝首页。
步骤 8:动态资源请求(回源)
对于 CDN 不缓存的动态资源(如用户的购物车数据、实时商品库存),CDN 节点会作为 "代理",将请求转发到淘宝的源站服务器,源站处理后返回数据,再由 CDN 节点转发给浏览器。
三、核心流程总结图
用户输入 www.taobao.com
↓
浏览器检查本地缓存 → 无记录
↓
请求本地 DNS 服务器 → 无缓存
↓
DNS 递归查询:根 DNS → .com 顶级域 DNS → 权威 DNS(CDN)
↓
权威 DNS 返回【最近的 CDN 节点 IP】
↓
浏览器 ↔ CDN 节点 建立 TCP/HTTPS 连接
↓
CDN 节点:缓存命中 → 返回静态资源;未命中 → 回源获取并缓存
↓
浏览器渲染页面
四、DNS 解析的两种模式
| 模式 | 特点 | 适用场景 |
|---|---|---|
| 递归查询 | 本地 DNS 替用户 "跑腿",逐级查询直到获取结果,最终返回给用户 | 绝大多数用户访问场景(浏览器→本地 DNS) |
| 迭代查询 | 服务器只返回下一级服务器的地址,由客户端自己继续查询 | DNS 服务器之间的查询(本地 DNS→根 DNS→顶级域 DNS) |