DNS & CDN & HTTPDNS 原理简析
背景:
域名系统 DNS (Domain Name System ):
作为域名和 IP 地址相互映射的一个分布式数据库,通过 DNS 可以将域名迅速解析为对应的 IP 地址,从而方便我们访问 Internet 上的任意一台主机(或网站)。
CDN(Content Delivery Network):
其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
HTTPDNS
: 使用 HTTP 请求来模拟 DNS 请求
0x00 DNS 原理
DNS 服务器类型:
- 内部 DNS :位于内网中,提供内网 DNS 服务,也具备 Internet DNS 缓存与转发能力
- 外部 DNS:位于 Internet 中,提供 Internet 的 DNS 服务(包括 DNS 缓存与转发)
- 主 DNS:提供 DNS 服务(包括查询,缓存写入)
- 辅 DNS:只提供 DNS 查询服务,与主 DNS 同步数据库
- 唯缓存 DNS:自身不具备 DNS 解析能力,但具有 DNS 缓存数据库
- 转发 DNS:具备转发特性,能将 DNS 请求转发给其他 DNS 服务器
- 权威 DNS: 自身数据库中存在与 DNS 请求相对应的映射
- 非权威 DNS:不存在相对应的映射,而存在对应缓存查询结果
本地 DNS:
即在主机的 DNS 设置值
域名组成:
[ 主机名 ].[ 二级域名 ].[ 顶级域名 ],因此可以根据域名来在树形结构
中找到一条从根到叶的路径,叶节点即是权威 DNS
DNS 服务器的功能:
- 权威 DNS,自身具备解析能力
- 转发 DNS
- 缓存 DNS
在由路由器组成的局域网中,本地 DNS 设置为自动获取(路由器),路由器 DNS 设置为(ISP 提供的 DNS),主机通过浏览器访问 http://www.jianshu.com
时 DNS 请求-响应情况:
上图的文字描述如下:
192.168.110.252
在浏览器访问http://www.jianshu.com
192.168.110.252
检查本地 hosts 文件中是否存在www.jianshu.com
对应的 IP- 若无,
192.168.110.252
继续检查本地 DNS 缓存中是否存在www.jianshu.com
对应的 IP- 若无,
192.168.110.252
向本地 DNS 服务器发起 DNS 查询请求- 路由器接收到 DNS 查询请求后,检查路由器 DNS 缓存
- 若无,路由器以外网地址
202.202.202.202
向本地 DSN 服务器 (ISP DNS)发起 DNS 查询请求- ISP DNS 接收到 DNS 查询请求后,发现自己不是权威 DNS ,且无对应的缓存数据,于是将请求转发给
其他 DNS 服务器
:happy:其他 DNS 服务器
接收到请求后,一样发现自己不是权威 DNS,且无对应的缓存数据,于是开始进行 DNS 迭代查询:将请求发送给根域名服务器
根域名服务器
接收到请求后,将顶级域名服务器
(.com) IP 发送给其他 DNS 服务器
其他 DNS 服务器
根据 IP 将 DNS 查询请求发送给顶级域名服务器
顶级域名服务器
接收到请求后,将二级域名服务器
(jianshu.com) IP 发送给其他 DNS 服务器
其他域名服务器
根据 IP 将 DNS 查询请求发送给二级域名服务器
二级域名服务器
接收到请求后,发现自己是权威 DNS 服务器,于是将www.jianshu.com
映射的 IP120.132.92.21
发送给其他域名服务器
其他域名服务器
接收到解析结果后,将120.132.92.21
逐层返回传递下去,最终直至192.168.110.252
192.168.110.252
接收到www.jianshu.com
解析结果120.132.92.21
,根据 IP 与www.jianshu.com
建立 TCP 连接,然后发起 HTTP 请求主页内容
0x01 DNS 协议结构
具体详见:结合Wireshark分析DNS 协议
根据上面的 wireshark 分析结果可以看出:DNS 服务器返回的不一定是 IP ,在 DNS 请求中域名为别名时,则 DNS 服务器会返回其 A 记录;
如上图中 cdn-qn0.jianshu.io
域名解析返回的是 CNAME 类型结果 cname iduvrz0.qiniudns.com
,这表明 cdn-qn0.jianshu.io
是别名,其 cname 指向(A 记录)是 iduvrz0.qiniudns.com
因为 A 记录与 IP 映射,于是主机又向 DNS 服务器 发起 iduvrz0.qiniudns.com
DNS 请求
0x02 DNS 循环与 CDN
DNS循环: 当权威 DNS 发现一个域名映射多个 IP 时,会使用 IP 轮询的方式来将 IP 平均分配给多个 DNS 请求,从而达到负载均衡的效果
CDN: 由于 DNS 循环时平均分配,不能根据不同服务器的负载情况优化分配,甚至如果有一台服务器宕机了,DNS 不能及时了解到该情况把该服务器的 IP 分配出去,便会造成无法访问;因此,在权威 DNS 和 服务器之间加上一个 CDN 层就显得很必要了;CDN 在具备调度分配服务器能力的基础上,能够同步服务器运行情况,然后根据该情况及时适当调整调度策略,从而使得负载均衡能力大大提高;
CDN功能:
- 调度分配主机;负载均衡,根据 IP,网络流量情况分配最靠近,网络最通畅的 CDN 节点实现加速
- 反向代理
- 静态缓存;缓存静态资源(html,图片,音乐,视频等)
- 防止 DDOS 攻击
CDN原理图:
通过在权威 DNS 服务器中配置 images.jianshu.com
的 cname 指向(A 记录)为 abc.qiniudns.com
在 CDN DNS 中将 abc.qiniudns.com
与 110.110.110.110, 220.220.220.220, 330.330.330.330
三个 IP 映射
就可以实现通过 CDN 给域名images.jianshu.com
加速
更多 CDN 知识参见: CDN 知识
0x03 HTTPDNS
为了防止传统 DNS 解析过程中出现的 DNS 劫持,DNS 缓存版本过旧,因 DNS 服务器转发功能而造成的无法精准定位用户位置的情况,于是通过使用
HTTPDNS 为主,传统DNS为辅
的机制来实现快速,实时,精准的 DNS 解析,从而提供给用户快速,安全稳定,最新的网站访问体验
一篇很好的文章来解释 HTTPDNS : HttpDNS 服务详解