CDN
CDN的产生背景及作用
随着互联网用户数量激增,网络流量不断增加,许多问题逐渐突显:
- 用户和网站之间的访问路径过长。
- 突发的大流量可能造成链路拥堵。
- 不同地区用户访问网站的响应速度存在明显差异。
为了解决这些问题,提高用户访问速度,优化信息传输效率,同时缓解源站服务器的压力,CDN(内容分发网络) 应运而生。
CDN的作用:
- 缩短访问路径:通过在用户与源站之间增加一层缓存网络,将用户请求引导至最近的边缘节点。
- 降低网络拥堵:分散大流量到边缘节点,避免对源站和核心网络的过度依赖。
- 提升响应速度:用户能够从距离最近的缓存节点获取内容,以最快速度获得所需信息。
- 优化用户体验:减少时延,提高内容加载速度。
- 节约资源:缓解源站服务器压力,优化带宽使用。
通俗类比:淄博烧烤案例
假如所有人都要去淄博吃烧烤,但每个人距离淄博的距离不同,而且蜂拥而至会导致去淄博的高速路堵车。为了解决这个问题,可以在各地开设"分店",用户可以就近前往分店品尝烧烤,既解决了线路拥堵问题,又让人们更快享用美食。
CDN概述
CDN(Content Delivery Network,内容分发网络)是一种通过在现有互联网架构中增设缓存层的加速技术。其核心理念是将网站内容缓存到距离用户最近的网络边缘节点,使用户可以快速获取所需内容。
CDN的主要目标:
-
提高网站访问的速度和稳定性。
-
减少因网络带宽、用户访问量等问题引发的性能瓶颈。
-
通过分布式架构,提升高并发支持能力。
-
增强安全性
- 缓解DDoS攻击压力。
- 隐藏源站服务器的真实IP地址。
隐藏真实IP的功能
隐藏真实IP的实现原理
CDN通过让用户请求的流量优先经过分布式的缓存节点,避免直接与源站交互,从而隐藏源站的真实IP地址。其基本原理如下:
- 当用户发起请求时,DNS解析指向CDN的边缘节点,而不是源站地址。
- 边缘节点接收并处理用户请求,如果缓存中有数据,则直接返回给用户。
- 只有在缓存节点未命中(Cache Miss)的情况下,边缘节点会向源站发起请求,并将返回数据缓存更新。
- 用户始终无法直接接触源站,源站的真实IP地址被有效保护。
隐藏真实IP的优势
-
抵御网络攻击
- 防止DDoS、CC攻击等恶意流量直接打到源站。
- 边缘节点分布式地吸收恶意流量,确保源站安全。
-
增强隐私保护
- 源站服务器的位置和IP信息不对外暴露,降低入侵风险。
-
简化运维
- 管理者无需对源站频繁上线防火墙或调整IP规则,CDN负责流量过滤和分发。
隐藏真实IP的典型场景
- 金融行业:防止源站服务器的IP信息被攻击者利用。
- 电商业务:在大促期间防止恶意流量攻击源站。
- 政府及企业:提高重要系统的隐私性和安全性。
客户端访问源站过程(未使用CDN)
当客户端通过浏览器访问一个网站(如 www.example.com
)时,以下过程会发生:
-
客户端查询本机缓存:
- 首先在本机的
hosts
文件和 DNS 缓存中查询域名对应的 IP 地址。 - 若找到结果,则直接使用,无需进一步查询。
- 首先在本机的
-
本地 DNS 服务器查询:
- 若本机缓存中未找到,客户端会向本地 DNS(ISP 提供)发送查询请求。
-
迭代解析过程:
-
本地 DNS 若无记录,则通过以下步骤逐级向更高级别 DNS 服务器查询:
- 向根域名服务器查询,获取顶级 DNS 的地址。
- 向顶级域名服务器查询,获取权威 DNS 的地址。
- 向权威 DNS 查询,获取域名对应的 IP 地址。
-
最终,本地 DNS 将解析结果返回给客户端。
-
-
向源站发起 HTTP 请求:
- 客户端根据解析后的 IP 地址,向源站服务器发起 HTTP 请求。
- 源站返回对应的内容供客户端使用。
示意图:
rust
客户端 -> 本地 DNS -> 根 DNS -> 顶级 DNS -> 权威 DNS -> 源站服务器
DNS记录类型
DNS 解析过程依赖多种记录类型,以下是常见记录类型:
-
A 记录(Address) :将域名直接解析为 IPv4 地址。
-
NS 记录(Name Server) :指定负责解析域名的 DNS 服务器。
-
CNAME 记录(Canonical Name) :将一个域名指向另一个域名,便于管理和负载均衡。
- 示例:
www.example.com
可以通过 CNAME 指向cdn.example.com
,而后者通过 A 记录解析为实际 IP 地址。
- 示例:
通过CDN获取缓存内容的过程
CDN 的核心工作是将用户请求导向最近的缓存节点,而非源站服务器。这一过程中涉及两级负载均衡:
- 全局负载均衡(GSLB) :选择合适的边缘节点集群。
- 本地负载均衡(SLB) :选择集群内最优的缓存节点。
请求过程
-
客户端发起域名请求,首先向本地 DNS 查询。
-
本地 DNS 定位到 CDN 的全局负载均衡服务器(GSLB)。
-
GSLB 根据用户位置和网络条件,选择最优的本地负载均衡服务器(SLB),返回其 IP 地址。
-
客户端向 SLB 发起 HTTP 请求。
-
SLB 检查缓存节点是否有请求的资源:
- 如果存在,则直接返回缓存内容。
- 如果不存在,则向源站获取资源并更新缓存后返回。
CDN的优势
- 加速访问:缩短用户请求路径,让用户从最近的边缘节点获取内容,减少时延。
- 缓解拥堵:分散流量到多个缓存节点,避免对源站和核心网络的过度依赖。
- 提升稳定性:分担源站压力,应对高并发场景。
- 节约资源:降低带宽使用,优化服务器性能。
- 隐藏真实IP:通过缓存节点处理用户请求,源站IP地址不会暴露,有效防止恶意攻击。
- 优化用户体验:提升页面加载速度,减少因网络抖动导致的性能问题。
对比:普通 DNS 请求 vs 使用 CDN 的请求
普通 DNS 请求
- 用户提交域名。
- 客户端向本地 DNS 查询。
- 本地 DNS 逐级迭代解析,获取源站 IP。
- 客户端直接向源站服务器发送请求。
- 源站返回内容。
使用 CDN 的请求
- 用户提交域名。
- 客户端向本地 DNS 查询域名。
- 本地 DNS 定位到 CDN 的 GSLB。
- GSLB 返回最优 SLB 的 IP。
- 客户端向 SLB 发起请求。
- SLB 定位最优缓存节点并返回内容,或从源站获取更新数据。
面试题:
如何确认一个系统是否使用了 CDN?如何获取其真实 IP?
1、确认:
先使用nslookup解析域名查看IP是否有Aliases使用别名,和多个IP地址。
2、绕过方式:
1、用国外的IP去ping,有些只针对国内IP使用CDN
2、查找子域名:
- 很多时候,一些重要的站点会做CDN,而一些子域名站点并没有加入CDN,而且跟主站在同一个C段内,
3、DNS历史解析记录:
- 查询域名的历史解析记录,可能会找到网站使用CDN前的解析记录,从而获取真实ip
4、网站邮件头信息:
- 通过网站给自己发送邮件,从而让目标主动暴露他们的真实的IP,查看邮件头信息,获取到网站的真实IP
5、利用SSL证书寻找真实IP:
- 证书颁发机构 (CA)必须将他们发布的每个SSL/TLS证书发布到公共日志中,SSL/TLS证书通常包含域名、子域名和电子邮件地址
6、IP备案去查更多的域名
CDN和DNS区别?CDN绕过思路?
- CDN:内容分发网络,主要作用就是让用户就近访问 网络资源,提高响应速度,降低网络拥堵。 DNS:域名服务器,主要作用就是将域名翻译成ip地 址。
- CDN绕过思路:子域名,内部邮件,黑暗引擎搜索, 国外ping,证书及DNS查询,app抓包,配置不当泄露,扫全网,DOS攻击等