DNS解析过程以及CDN流程

要理解从输入域名到浏览器加载页面的全过程,核心是搞懂两个关键环节:

  1. DNS 协议 :将www.baidu.com这类易记域名,翻译成180.101.50.242这类机器能识别的 IP 地址;
  2. 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 后,执行以下操作:

  1. TCP 三次握手:与 CDN 节点服务器建立可靠的 TCP 连接;
  2. 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)

0voice · GitHub

相关推荐
记得开心一点嘛1 天前
布隆过滤器解决缓存穿透
redis·缓存
源远流长jerry1 天前
浏览器的条件请求以及缓存
缓存
REDcker1 天前
WebRTC-HTTP 出口协议 (WHEP) draft-murillo-whep-01 中文翻译
网络协议·http·webrtc
小北方城市网1 天前
第 6 课:全栈项目性能 & 安全双进阶 ——Redis 缓存 + JWT 认证(打造高并发高安全后端)
开发语言·数据库·redis·python·安全·缓存·数据库架构
gjc5921 天前
数据库和缓存稳定性保障-扩容及升级规范
java·开发语言·数据库·缓存
源远流长jerry1 天前
HTTP 1.x ~ HTTP 3 完整详解
网络·网络协议·http
什么都不会的Tristan1 天前
解决缓存相关问题(缓存穿透、缓存雪崩、缓存击穿)
缓存
松涛和鸣1 天前
DAY 44 HTML and HTTP Server Interaction Notes
linux·前端·网络·数据库·http·sqlite·html
ps酷教程1 天前
HttpData
http·netty