0x01 什么是CDN
CDN,全称(Content Delivery Network),内容分发系统,是指一种通过互联网互相连接的电脑网络系统,利用最靠近每位用户的服务器,更快、更可靠地将音乐、图片、视频、应用程序及其他文件发送给用户,来提供高性能、可扩展性及低成本的网络内容传递给用户;
CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度、智能DNS等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求
0x02 CDN原理
想象一下,一个网站,服务器在北京。在北京(距离近)访问网站响应时间大约20ms,而在广州(距离远)响应时间差不多100ms。
如何让广州的用户也享受10ms的速度呢?
很简单,将服务器上的内容复制一份,存储到广州的服务器,让广州周边的用户访问广州的服务器。同理,如果在全国各地都部署服务器,全国的用户都能享受10ms的速度。
CDN的基本原理:将内容发布到不同的节点上,用户就近访问,提升响应速度。
0x03 CDN常见词汇
- 源站:发布内容的原始站点(例子中在北京的服务器),通常接入CDN后不再提供给用户访问。
- CDN节点:又称为缓存服务器(例子中的全国各地服务器),是直接提供给用户访问的服务器。如果用户请求的内容存在缓存中,则直接返回给用户;否则先去源站获取内容,返回给用户,并将内容保存在CDN节点缓存中(下次请求时直接从缓存中读取)。
- 回源:用户请求的内容不在CDN节点缓存中,需要到源站获取。
- 命中缓存:用户请求的内容正好存在CDN节点缓存中,可以直接返回内容给用户,不需要访问源站获取。
0x04 CND优缺点
0x041 优点
显然,加速是最大的优势,因此,部分服务商甚至把CDN称作“加速网络”、“网站加速服务”。
除了加速之外,还有以下优势:
- 减少源站宽带压力:将请求分发到各个CDN节点上,源站只需承担回源时的宽带压力。如果使用的是云服务器,可以省去部分昂贵的宽带费用。
- 提升网站静态资源的并发数;
- 隐藏源站IP地址:用户访问网站时,连接到CDN节点,而不是连接到源站。因此,恶意用户无法直接对源站服务器发起攻击,恶意请求将首先到达CDN节点,CDN节点可以拦截部分攻击(例如SYN泛洪)。
0x042 缺点
- 对于动态内容加速效果有限:CDN通常用于加速图片、视频、CSS文件等静态资源,而对于动态内容每次访问都需要回源。因此,对于动态内容,接入CDN后可能变得更慢(也可能变快)。
- 如果遇到DDOS攻击,可能产生高额CDN费用。
- 由于访问日志分布在各个CDN节点,获取访问日志会有延迟。
- 网页内容会泄露给CDN提供商,即使是HTTPS加密的请求。
0x05 智能DNS解析流程
问题来了:如何让广州的用户访问广州的CDN节点(而不是北京的节点)呢?
通常是通过DNS智能解析来实现,当用户请求解析域名时,DNS服务器对于不同地区的用户,返回就近的CDN节点IP地址。
以域名 www.web-security.cn为例,通过多个地点在线Ping工具,可以直观地看到,不同地区ping域名得到的IP不一样:
智能解析如下
- 户端向本地DNS服务器发起域名解析请求;
- 本地DNS经过查询后,发现该域名是一条CNAME记录,该记录由智能DNS服务器负责解析,所以本地DNS服务器需要向智能DNS请求解析该域名(即CNAME记录中的值);
- 智能DNS根据本地DNS的IP地址,选择一个CDN节点,并将CDN节点的IP地址返回给本地DNS;
- 本地DNS返回CDN节点IP给客户端;
- 客户端向指定的CDN节点发起请求;
- CDN节点收到请求后,判断请求的内容是否在缓存中,如果存在则直接将内容返回给客户端(到第8步),否则需要向源站发起请求并将内容缓存起来(第6、7步),再将内容返回给客户端(第8步)。
仍然以域名 www.web-security.cn为例,该域名部署在腾讯云CDN。通过dig命令查看DNS解析过程:
dig www.web-security.cn +trace
命令运行后,返回结果中关键的信息如下:
www.web-security.cn. 600 IN CNAME www.web-security.cn.cdn.dnsv1.com.
其中CNAME表示别名记录,即域名www.web-security.cn.指向www.web-security.cn.cdn.dnsv1.com.。继续用dig命令查找该域名:
dig +trace www.web-security.cn.cdn.dnsv1.com.
返回结果:
www.web-security.cn.cdn.dnsv1.com. 600 IN CNAME 1942275.dispatch.spcdntip.com.
仍然是一条CNAME记录,继续dig:
dig +trace 1942275.dispatch.spcdntip.com.
返回结果:
spcdntip.com. 172800 IN NS ns-open1.qq.com.spcdntip.com. 172800 IN NS ns-open2.qq.com.spcdntip.com. 172800 IN NS ns-open3.qq.com.......1942275.dispatch.spcdntip.com. 60 IN A 182.254.52.2131942275.dispatch.spcdntip.com. 60 IN A 182.254.52.146
重点在这里,前3行表示,域名spcdntip.com.是由DNS服务器ns-open*.qq.com负责解析。即最后两行返回的IP地址(也就是CDN节点的IP),是由DNS服务器ns-open*.qq.com.返回的。
经过测试,在不同地区执行dig +trace 1942275.dispatch.spcdntip.com.,会获得不同的IP。意味着在这一步,智能DNS(ns-open*.qq.com)根据情况选择了不同的CDN节点。