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

相关推荐
知我Deja_Vu3 天前
redisCommonHelper.generateCode(“GROUP“),Redis 生成码方法
数据库·redis·缓存
古译汉书3 天前
【IoT死磕系列】Day 7:只传8字节怎么控机械臂?学习工业控制 CANopen 的“对象字典”(附企业级源码)
数据结构·stm32·物联网·http
没有bug.的程序员3 天前
电商秒杀系统深度进阶:高并发流量建模、库存零超卖内核与 Redis+MQ 闭环
数据库·redis·缓存·高并发·电商秒杀·流量建模·库存零超卖
troublea3 天前
ThinkPHP3.x高效学习指南
mysql·nginx·缓存
troublea3 天前
ThinkPHP6快速入门指南
数据库·mysql·缓存
Emotional。3 天前
AI Agent 性能优化和成本控制
人工智能·深度学习·机器学习·缓存·性能优化
jnrjian3 天前
Oracle 共享池 库缓存下的 Library Cache Lock
数据库·缓存·oracle
21号 13 天前
Http粘包问题回顾
网络·网络协议·http
A懿轩A3 天前
【SpringBoot 快速开发】面向后端开发的 HTTP 协议详解:请求报文、响应码与常见设计规范
spring boot·http·设计规范
吧啦蹦吧3 天前
http-SNI
网络·网络协议·http