CDN与DNS解析-从原理到Cloudflare
CDN与DNS解析:从原理到Cloudflare
概述
在介绍内容分发网络(Content Delivery Network,CDN)之前,我们需要先了解:当访问一个网站时,背后大致发生了什么。
如果自己搭建过网站,会发现整个过程大致涉及三个不同类型的服务提供商:
1. 服务器提供商
这是用来部署网站内容的地方。比如阿里云、腾讯云、AWS 等云服务平台,我们可以在上面租用一台云服务器,这台服务器拥有一个公网 IP。把网站代码、图片、视频等资源部署到这台服务器上后,就可以通过 IP 地址直接访问网站了。
当然,全球有很多服务器提供商可供选择。
2. 域名注册商
虽然 IP 地址可以访问网站,但它不方便记忆,所以我们通常希望通过更好记的网址(如 example.com
)来访问网站。为了获得这个“名字”,需要通过一家域名注册商购买域名。
那这些注册商是怎么来的呢?这背后还有一层:域名注册局(Registry)。注册局通常由政府或专业机构管理,负责特定后缀(如 .com
、.cn
、.org
等)的域名。它维护着整个后缀的域名数据库,包括 WHOIS 信息(记录了域名所有者、联系信息等)。
但普通用户不能直接向域名注册局注册域名,这就像办签证时不能直接找大使馆,而要通过中介机构。域名注册商正是这样的中介——它们获得注册局授权,代用户完成注册流程,提交信息、收取费用、进行管理。
注册商也有很多,比如阿里云、Namecheap、GoDaddy 等等。
3. DNS 解析服务商
有了服务器(IP),也有了域名。现在的问题是:如何让“example.com”这个名字,对应到我们的服务器的 IP 呢?
这就需要用到 DNS(域名系统)解析。
当在浏览器中输入网站地址时,系统会向 DNS 服务器发送查询请求,DNS 查询后将域名解析为对应的 IP 地址,浏览器才能真正发起网络请求。
而这个“DNS 服务器”是由谁提供的呢?就是我们所设置的 DNS 解析服务商。DNS 服务商和域名注册商可以是同一家(如阿里云也提供解析服务),也可以不同(比如可以用 Cloudflare 来管理 DNS,即便域名是在腾讯云注册的)。换句话说:域名注册商负责“我们拥有这个名字”; DNS 解析服务商负责“这个名字指向哪个 IP”。
在域名注册平台中,我们可以手动选择使用哪一家 DNS 服务商,只要你修改了域名的 NS(Name Server)记录,DNS 权限就会转交给新的服务商。
📖 WHOIS 查询示例
在前面我们提到:域名的注册信息是由“域名注册局(Registry)”统一管理的,而 WHOIS 就是我们用来查询这些信息的公开接口。WHOIS 是一个用来查询域名或 IP 注册信息的协议和数据库系统。它的名字源于英文:“Who is?”,也就是“这个域名是谁的?” WHOIS 查询可以告诉我们:
- 域名的注册人是谁
- 域名是在哪一天注册的
- 域名的注册商是谁
- 使用了哪个 DNS 服务商
- 域名当前状态(是否锁定、是否到期)
- 联系方式、技术支持邮箱等(视是否隐藏)
WHOIS 系统由两部分组成:
组成部分 | 功能说明 |
---|---|
WHOIS 协议 | 一种基于 TCP 的查询协议,通常端口是 43,用于从 WHOIS 服务器获取文本数据 |
WHOIS 数据库 | 一个全球公开的、由各个域名注册局和注册商共同维护的数据库 |
以查询一个域名(如 example.com
)为例,WHOIS 查询过程如下:
- 浏览器或工具发起 WHOIS 查询请求
- 请求先到 IANA 根 WHOIS 服务器,查这个域名属于哪个注册局(例如
.com
属于 Verisign) - 然后查询会被转发到对应注册局的 WHOIS 服务器(如 whois.verisign.com)
- 最后跳转到具体的域名注册商的 WHOIS 服务器(如 Cloudflare、Namecheap、GoDaddy)
整个过程就像问“这个房子的主人是谁”,需要从房产总局(IANA)一路查到地方房管局(注册局)再到房屋中介(注册商)。
以阮一峰老师的网络博客为例,从下面的 WHOIS 查询可以看到:这个网站的域名是 runyifeng.com
,这个域名的注册商是 Cloudflare, Inc.
,WHOIS 查询同样给出了注册商的注册信息。这个域名的 DNS 解析服务器是 kara.ns.cloudflare.com
和 norman.ns.cloudflare.com
,表示该域名的 DNS 解析也是由 Cloudflare 提供的。DNS 解析结果显示了当前域名解析出的 IP 地址,包括 IPv4 和 IPv6 地址。例如:172.67.200.141
和 104.21.52.150
,他们都是 Cloudflare 的 CDN 边缘节点 IP。这表示该站点已经启用了 CDN 加速,用户访问的是 Cloudflare 的边缘节点,而非网站自己的服务器 IP。从这里也可以看到,CDN 实际上是 DNS 解析商提供的一种服务。为了方便理解 CDN,接下来我们还是先再深入了解一下 DNS 解析。
DNS 解析记录
DNS 解析很好理解,就是通过一个 DNS 解析记录,把域名解析到 IP 上。下面是一张实际的 DNS 配置截图,后面解释了解析记录中每一项的含义和作用。
🔠 主机记录(Host / Name)
这是域名前缀(也叫子域名),决定最终拼出来的是哪个完整网址:
主机记录 | 实际含义 |
---|---|
@ |
代表主域名本身(如 example.com ) |
www |
代表 www.example.com |
music |
代表 music.example.com |
mail |
代表 mail.example.com (常用于邮箱) |
可以添加任意主机记录来自定义子域名,比如 api.example.com
、blog.example.com
等。
📌 记录类型(Type)
每条记录的类型表示它的用途或目标,常见的包括:
类型 | 含义 | 示例 |
---|---|---|
A | 将主机名解析为 IPv4 地址 | www → 192.0.2.1 |
AAAA | 将主机名解析为 IPv6 地址 | www → 2001:db8::1 |
CNAME | 设置一个“别名”,指向另一个域名 | cdn → www.example.com |
TXT | 文本记录,常用于验证、身份认证等 | _dnsauth → some-verification-token |
🧭 记录值(Value / Address)
就是域名最终要解析到的目标。比如:
- 如果是 A 记录 → 填 IPv4 地址,如
101.43.128.210
- 如果是 CNAME → 填另一个域名,如
app.anotherdomain.com
- 如果是 TXT → 填字符串 token,如
google-site-verification=abc123
🔁 TTL(生存时间)
TTL(Time To Live)表示:DNS 记录在缓存中保存的时间(单位:秒)
TTL = 600
→ 意思是“缓存 10 分钟”,10 分钟内不会重新向 DNS 查询- TTL 设短可加快变更生效速度,设长可减少查询频率、提升性能
🛠 常见用途
使用场景 | 主机记录 | 类型 | 记录值 | 用途说明 |
---|---|---|---|---|
网站首页 | @ |
A | 101.43.128.210 |
主域名 example.com 的指向 IP |
访问子域 | music |
A | 101.43.128.210 |
music.example.com |
邮件验证 | _dnsauth |
TXT | 一串 token | 配合邮箱服务做 DKIM 验证 |
Google 验证 | @ |
TXT | google-site-verification=... |
验证你对该域名的所有权 |
CDN 别名 | cdn123 |
CNAME | abc.cdnprovider.com |
子域名转发到 CDN 服务 |
内容分发网络(CDN)
在一般情况下,DNS 解析服务会根据我们解析记录的配置,将域名解析到我们网站服务器的公网 IP 上。但这种方式在实际访问中可能会遇到一些问题:
- 假如我们的服务器部署在中国大陆,而用户来自美国,那用户每次访问都需要跨越半个地球,延迟比较高;
- 我们的服务器可能带宽有限,当访问量上来,网站就会变慢,甚至卡死。而且,如果遭遇 DDoS 攻击(即分布式拒绝服务攻击,Distributed Denial of Service),大量恶意流量可能让我们的服务器直接崩溃;
- 域名直接指向真实 IP,会让我们的服务器地址暴露,容易被攻击、扫描、抓取。
那有没有一种方法可以同时解决这些问题呢?这就是 CDN(Content Delivery Network,内容分发网络) 的作用。CDN 是一种通过分布在全球的数据中心节点来加速网站内容传输的技术。 它的核心思路是把我们网站的静态资源(如图片、CSS、JS、视频等)缓存到离用户更近的“边缘服务器”上,用户访问时就就近获取内容,而不是每次都找我们的源站服务器。
当开启 CDN 后,DNS 不再解析你的域名到我们的真实服务器 IP,而是解析到 CDN 节点的 IP。这样用户的请求就会优先被分发到 CDN 厂商的边缘节点上,大多数内容都能从缓存中直接返回。这不仅加快了加载速度,也减轻了我们服务器的压力,还可以有效缓解恶意流量带来的风险。我们的真实 IP 地址也会被隐藏起来,避免暴露。
🌍 Cloudflare
Cloudflare 是一家提供全球 CDN、网站安全防护、性能优化等服务的技术公司。它之所以能成为全球最知名的 CDN 服务商之一,是因为它投入了巨资建设了遍布全球的边缘服务器网络(PoP),自研的网络协议、路由调度系统,以及强大的防火墙、抗 DDoS 防护体系。Cloudflare 在全球几乎所有主要国家和地区都有节点,包括中国香港、中国台湾、新加坡、日本,以及欧美、非洲等。虽然中国大陆暂未开放公共节点,但用户依然可以从周边地区的节点获得不错的速度。可以说,Cloudflare 在全球修了一张网络高速公路,让网站一上线就是“顶配起步”。
使用 Cloudflare 的 CDN 服务非常简单:
- 注册一个 Cloudflare 账号;
- 添加我们的网站;
- Cloudflare 会自动扫描你当前的 DNS 记录;
- 在域名注册商后台,将域名的 DNS 服务器(NS)改为 Cloudflare 提供的地址;
- 完成后,Cloudflare 会自动接管你的 DNS,并默认开启 CDN 加速与安全防护。
此时,可以看到 DNS 解析返回的是 Cloudflare 的 Anycast IP,这些 IP 会动态指向离用户最近的边缘节点。
比如前面 WHOIS 查询中看到:
1 | [172.67.200.141 ] |
这是因为 CDN 会将网站缓存分发到多个节点,每个节点拥有自己的 IP 地址。DNS 查询会返回多个 IP,浏览器或 DNS 解析器根据策略(如就近、轮询等)选择其中一个访问,从而提升速度、避免单点故障。
当尝试直接访问这些 CDN IP 地址时,可能会看到这样的提示:
原因是 Cloudflare 的边缘节点是“共享型”的,多个网站可能共用同一个 IP,它必须依靠 HTTP 请求中的 Host 头 来判断要访问哪个网站。如果直接用浏览器访问 IP,没有 Host 头,Cloudflare 就不知道你是谁 → 拒绝访问。可以通过 curl 工具附加请求头测试访问,例如:
1 | curl -H "Host: yourdomain.com" http://172.67.200.141 |
这样就能访问成功。
在浏览器 F12 的 Network 面板中查看任意静态资源的响应头:
1 | cf-cache-status: HIT |
如果是 HIT
,就说明资源已经被缓存到了 Cloudflare 节点,正在被 CDN 加速访问。如果是 DYNAMIC
或 MISS
,说明该资源没有被缓存,或是首次访问,Cloudflare 会回源请求你的服务器。
小结
🌐 域名与 DNS
- 域名注册商 是我们购买域名的渠道,例如阿里云、Namecheap、Cloudflare;
- 域名注册局(Registry) 管理整个域名后缀(如
.com
),负责记录域名的合法性; - DNS 解析服务商 负责把域名“翻译”成 IP 地址,如 Cloudflare DNS、DNSPod 等;
- DNS 中的
A
、CNAME
、TXT
、AAAA
等记录类型分别用于不同场景(解析 IP、别名、验证等); @
表示主域名,www
、api
、mail
等表示子域名;TTL
决定 DNS 缓存时间,影响解析更新的速度。
🧭 WHOIS 查询
- WHOIS 查询可以查看域名注册人、注册商、DNS 服务等关键信息;
- 有助于判断网站的可信度、历史、安全性;
- 注册商通常支持开启 WHOIS 信息保护,防止隐私泄露。
🚀 CDN(内容分发网络)
- CDN 通过在全球布设边缘服务器,把网站内容缓存到离用户更近的地方;
- 不仅加速访问,还能防止 DDoS 攻击、隐藏真实 IP、减轻服务器压力;
- Cloudflare 是全球领先的 CDN 和网站安全服务商,提供免费强大的解决方案;
- 使用 CDN 后,DNS 会将域名解析到边缘节点 IP,而非源站 IP;
cf-cache-status: HIT
表示资源已成功被 CDN 缓存。