课程笔记:CDN 的工作原理
课程名称:计算机网络应用 核心摘要:本讲围绕 Web 应用加速技术——CDN(内容分发网络)展开。从 CDN 产生的两大动因(地域延迟、集中拥塞)入手,对比讲解无 CDN 场景下的 DNS 域名解析流程,详解 A / NS / CNAME 三类 DNS 记录类型的作用与区别,重点剖析引入 CDN 后借助 GSLB(全局负载均衡)与 SLB(本地负载均衡)实现的就近访问与 302 重定向回源机制。
一、 核心概念与原理
1.1 CDN 的产生背景
将所有微服务集中部署在某一中心机房(如阿里云北京机房)时,会面临两大问题:
- 地域问题:中国地域辽阔,长距离访问导致网络延迟显著增大。北京/天津/河北用户访问快,而广东、海南、新疆等地用户延迟可能高达数秒,体验极差。
- 集中访问问题:海量用户同时请求汇聚到中心机房所在网络主干道,造成大流量数据拥塞与服务器高并发压力。
欧洲国家地域小,对 CDN 需求不强;中国地大物博、人口众多,CDN 几乎是刚需。
1.2 CDN 的核心思想
CDN(Content Delivery Network,内容分发网络) 通过在用户与源站服务器之间增加一个中间层(即缓存层 / 边缘节点),将静态资源推送到距离用户最近的网络边缘节点,使用户就近获取内容。
- 中间层 = 缓存层 = 边缘节点(三者指同一事物)
- 短链路替代长链路,避免跨长距离 IP 路由,降低网络延迟
- 大量用户访问分散到网络边缘,避免网络互联点资源拥挤
1.3 CDN 的关键组成
一个完整的 CDN 必须具备两个核心组件:
- 一套自有 DNS 域名解析系统:必须将域名解析到距离用户最近的边缘节点,而非直接解析回源站机房。
- 遍布各核心省市的边缘节点(缓存服务器):用于就近缓存并响应静态资源。
CDN 属于网络基础设施,通常由商业机构搭建运营,企业一般直接采购,不自建。
1.4 CDN 适用范围
- 适合 CDN 缓存的内容:静态资源、视频流等只读内容。
- 不适合 CDN 缓存的内容:POST 等数据交互、写入操作、核心数据访问——此类请求仍需回源站处理。
二、 技术细节与协议分析
2.1 DNS 域名解析系统
DNS(Domain Name System,域名解析系统) 核心作用:将域名解析为 IP 地址。
2.1.1 不使用 CDN 的访问流程
完整流程步骤如下:
- 客户端浏览器输入域名(如
edu.lagou.com)。 - 优先查询本机 hosts 文件与 hosts 缓存,查看是否存在域名→IP 的映射。
- Windows 路径:
C:\Windows\System32\drivers\etc\hosts - hosts 文件又称本地域名系统,仅对当前计算机生效。
- hosts 中记录优先级最高,例如配置
127.0.0.1 www.taobao.com后访问淘宝会指向本机。
- Windows 路径:
- 若 hosts 中无记录,向本地 DNS(Local DNS)询问,通常由本地网络配置或 DHCP 分配。
- 若本地 DNS 仍无记录,依次进行迭代解析:根 DNS → 顶级 DNS → 权威 DNS。
- 例:Google 的
8.8.8.8即权威 DNS。
- 例:Google 的
- 本地 DNS 最终将解析得到的 IP 地址返回客户端。
- 客户端通过 IP 向远程服务器发起 HTTP 请求,获取数据。
- 解析结果会缓存到本地,避免重复迭代解析,提升效率。
2.1.2 DNS 记录类型对比
主流 DNS 记录类型有三种:
| 记录类型 | 全称 | 含义 | 作用 | 记录值形式 | 典型场景 |
|---|---|---|---|---|---|
| A 记录 | Address(地址记录) | 描述目标域名到 IP 地址的映射关系 | 将域名指向具体 IP 地址 | IP 地址(如 192.168.239.200) | 最常用、最简单的解析方式 |
| NS 记录 | Name Server(名称服务器记录) | 描述目标域名与负责解析该域名的 DNS 之间的映射 | 将子域名委托给其他 DNS 服务器解析 | 域名形式(DNS 服务器域名) | 将域名解析工作委托给其他解析系统 |
| CNAME 记录 | Canonical Name(别名记录) | 描述目标域名与别名之间的对应关系 | 将域名指向另一个域名(别名) | 域名形式(别名) | CDN 场景必备,启用 CDN 时使用 |
2.1.3 主机记录(域名前缀)常见写法
| 主机记录 | 含义 | 示例 |
|---|---|---|
www | 解析为 www.域名 | www.aliyun.com |
@ | 直接解析主域名 | aliyun.com |
* | 泛解析,通配符匹配其他域名 | 匹配所有未单独配置的子域名 |
mail | 解析邮箱服务器 | mail.域名 |
| 具体二级域名 | 解析指定子域名 | edu.godisaman.cn |
2.1.4 A 记录配置示例(阿里云控制台)
以域名 godisaman.cn 为例,添加 A 记录:
- 主机记录:
@(表示解析主域名godisaman.cn) - 记录类型:A
- 解析线路:默认(可选联通/电信/移动/教育网/境外/百度/必应等)
- 记录值:
101.201.239.200(目标服务器 IP) - TTL:10 分钟(解析超时时间,可调)
- 默认端口 80
配置生效后,可将代码上传至 101.201.239.200 的 Nginx 服务器,启动服务,域名备案后即可访问。
2.1.5 CNAME 记录在 CDN 中的配置
以启用 CDN 为例,DNS 解析记录与 CDN 域名管理存在映射关系:
| 项目 | DNS 解析记录(CNAME) | CDN 域名管理配置 |
|---|---|---|
| 目标域名 | cdn.godisaman.cn | 域名:cdn.godisaman.cn |
| 记录值(别名) | cdn.godisaman.cn.w.kunlunsl.com | CNAME:cdn.godisaman.cn.w.kunlunsl.com |
在 CDN 控制台"源站信息"中可查看 CNAME 与源站的对应关系。多个不同域名可通过 CNAME 指向同一别名,最终汇聚到同一服务器集群。
启用 CDN 至少需要两条记录:
- A 记录:配置域名到具体 IP 的关系(指向源站)。
- CNAME 记录:在开通 CDN 后启用,将域名指向 CDN 别名,由 CDN 的 DNS 系统接管解析。
2.2 使用 CDN 的访问流程
引入 CDN 后,对源站的请求会被导向距离用户最近的最优缓存节点,而非源站。整体流程如下(以访问 www.edu.lagou.com/index 为例):
- 用户发起请求:客户端请求
www.edu.lagou.com。 - 本地 DNS 迭代解析:
- 先查本地缓存;若无记录,向根 DNS 发起请求。
- 根 DNS 响应:根据域名后缀(
.com)返回负责解析.com的顶级 DNS IP 地址。 - 本地 DNS 向顶级 DNS 发送报文:顶级 DNS 根据前缀
lagou.com返回对应的权威 DNS IP。 - 本地 DNS 向权威 DNS 查询:通过
edu.lagou.com查找。 - 权威 DNS 命中 CNAME 记录:发现
edu.lagou.com配置了 CNAME,指向别名(如edu.lagou.cd.com或cdn.edu.lagou.com)。 - 别名再解析为 A 记录:别名对应 A 记录,解析得到的 IP 不是源站 IP,而是 GSLB(全局负载均衡)的 IP。
- 本地 DNS 向 GSLB 发送 DNS 报文。
- GSLB 调度决策:根据本地 DNS 的 IP 地址推算用户大致位置(如北京海淀区),综合考虑最优策略,筛选出距离用户较近的 SLB(本地负载均衡)。
- GSLB 返回 SLB 的 IP 地址:作为 DNS 查询的最终结果返回给客户端(注意:返回的是 SLB 地址,而非具体缓存节点地址)。
- 客户端向 SLB 发送请求:SLB 根据负载均衡策略(考虑子节点健康值、载荷情况)筛选最优缓存节点。
- SLB 返回 302 重定向:响应码
302(转发/跳转/重定向),并携带目标缓存服务器地址。 - 客户端按 302 地址请求目标缓存服务器。
- 缓存节点命中判断:
- 缓存存在且未过期 → 直接返回缓存资源。
- 缓存过期或不存在 → 回源:向源站(
edu.lagou.com对应服务器)拉取最新数据,更新缓存后再返回客户端。
核心差异:普通 DNS 请求最终拿到的是源站 IP;使用 CDN 后,在权威 DNS / 顶级 DNS 环节通过 NS 记录将解析委托给 GSLB,由 GSLB 返回 SLB(而非源站)IP,从而实现就近访问。
2.3 GSLB 与 SLB 架构对比
CDN 网络架构中存在两层负载均衡:
| 对比项 | GSLB(全局负载均衡) | SLB(本地负载均衡) |
|---|---|---|
| 全称 | Global Server Load Balance | Server Load Balance |
| 定位 | 全局性负载均衡,属核心系统/DNS 系统 | 本地负载均衡 |
| 调度对象 | 对各区域的**物理集群(SLB)**做全局负载均衡 | 对**集群内物理主机(缓存节点)**做负载均衡 |
| 决策依据 | 根据用户本地 DNS 的 IP 地址推算用户位置 | 综合考虑子节点健康值、载荷情况 |
| 返回结果 | 返回距离用户较近的 SLB 的 IP | 通过 302 重定向返回最优缓存节点地址 |
| 层级关系 | 位于上层,统领各 SLB | 位于下层,每个 SLB 对应一个边缘节点集群 |
架构示意
GSLB(全局负载均衡)
/ | \
/ | \
SLB(北京) SLB(上海) SLB(广州)
/ \ / \ / \
缓存1 缓存2 缓存1 缓存2 缓存1 缓存2
(边缘) (边缘) (边缘) (边缘) (边缘) (边缘)
|
源站
- 每个核心城市/区域部署一组边缘节点(缓存服务器),至少两台以避免单点故障。
- 每组边缘节点前部署一台 SLB,做区域内集群负载均衡。
- 所有 SLB 之上部署 GSLB,做跨区域全局调度。
三、 实践应用与配置命令
3.1 本地 hosts 文件配置(Windows)
# 路径:C:\Windows\System32\drivers\etc\hosts
# 用 notepad++ 以管理员身份打开编辑
# 格式:IP地址 域名
127.0.0.1 localhost
127.0.0.1 www.taobao.com # 本地劫持测试,访问淘宝会指向本机
101.201.239.200 godisaman.cn # 将域名解析到指定服务器 IP
hosts 文件优先级最高,仅对当前计算机生效。
3.2 阿里云 DNS 解析记录配置
A 记录(指向 IP):
| 配置项 | 示例值 |
|---|---|
| 主机记录 | @ |
| 记录类型 | A |
| 解析线路 | 默认 |
| 记录值 | 101.201.239.200 |
| TTL | 10 分钟 |
CNAME 记录(指向别名,CDN 启用):
| 配置项 | 示例值 |
|---|---|
| 主机记录 | cdn |
| 记录类型 | CNAME |
| 解析线路 | 默认 |
| 记录值 | cdn.godisaman.cn.w.kunlunsl.com |
| TTL | 10 分钟 |
启用 CDN 的操作流程:在阿里云控制台开通 CDN → 在 CDN 域名管理中添加域名并获取 CNAME 值 → 回到 DNS 解析为该域名添加 CNAME 记录指向该别名。
3.3 国内主流 CDN 服务商
- 阿里云 CDN(老牌)
- 网宿科技(新锐)
四、 重点与难点提示
4.1 必考知识点
- CDN 的两大产生动因:地域延迟问题 + 集中访问拥塞问题。
- DNS 三类记录类型(A / NS / CNAME)的含义、记录值形式与适用场景——必考表格对比。
- 不使用 CDN 的访问流程:hosts → 本地 DNS → 根 DNS → 顶级 DNS → 权威 DNS → 返回 IP → 发起 HTTP 请求。
- 使用 CDN 的访问流程:在权威 DNS 环节通过 CNAME/NS 记录委托给 GSLB,GSLB 调度到 SLB,SLB 通过 302 重定向到最优缓存节点。
- GSLB vs SLB 的层级关系与职责划分。
4.2 易错点
- hosts 文件优先级最高,且仅对当前本机生效,不影响其他主机。
- 使用 CDN 后解析得到的 IP 不是源站 IP,而是 GSLB 的 IP(进一步返回 SLB 的 IP)。
- CNAME 记录是 CDN 的标志:开通 CDN 后必须由 A 记录切换/补充为 CNAME 记录。
- CDN 仅缓存静态资源;POST 请求、写入操作、核心数据访问仍需回源。
- 302 重定向发生在 SLB → 客户端环节,客户端据此再请求具体缓存节点。
- 缓存节点判断:缓存存在且未过期才直接返回;过期或不存在需回源更新。
4.3 面试题提示
- 简述 CDN 的工作原理。
- A 记录、NS 记录、CNAME 记录的区别?CNAME 在 CDN 中起什么作用?
- GSLB 与 SLB 的区别与协作关系?
- 用户访问 CDN 缓存未命中时如何处理?(回源机制)
- 为什么 CDN 必须有自有的 DNS 解析系统?
五、 课后疑问/遗留问题
- 迭代解析 vs 递归解析的区别与各自适用场景?本讲提及迭代解析,需在后续课程中系统对比。
- TTL 值的合理设置策略?过长导致解析更新慢,过短增加 DNS 查询负担,如何权衡?
- 缓存过期与回源策略:缓存过期时间的配置原则?回源时是否会阻塞用户请求?
- CDN 缓存预热与刷新机制如何实现?
- HTTPS 场景下 CDN 的证书配置与回源协议选择?
- 后续课程将进入基于阿里云 CDN 的实际配置与使用实操环节。