DNS & CDN & HTTPDNS 原理简析

南楼画角 提交于 2019-12-29 23:06:25

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

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结构.PNG

DNS 服务器的功能:

  • 权威 DNS,自身具备解析能力
  • 转发 DNS
  • 缓存 DNS

在由路由器组成的局域网中,本地 DNS 设置为自动获取(路由器),路由器 DNS 设置为(ISP 提供的 DNS),主机通过浏览器访问 http://www.jianshu.com 时 DNS 请求-响应情况:

dns-process.png

上图的文字描述如下:

  1. 192.168.110.252 在浏览器访问 http://www.jianshu.com
  2. 192.168.110.252 检查本地 hosts 文件中是否存在 www.jianshu.com 对应的 IP
  3. 若无,192.168.110.252 继续检查本地 DNS 缓存中是否存在 www.jianshu.com 对应的 IP
  4. 若无, 192.168.110.252 向本地 DNS 服务器发起 DNS 查询请求
  5. 路由器接收到 DNS 查询请求后,检查路由器 DNS 缓存
  6. 若无,路由器以外网地址 202.202.202.202 向本地 DSN 服务器 (ISP DNS)发起 DNS 查询请求
  7. ISP DNS 接收到 DNS 查询请求后,发现自己不是权威 DNS ,且无对应的缓存数据,于是将请求转发给 其他 DNS 服务器 :happy:
  8. 其他 DNS 服务器 接收到请求后,一样发现自己不是权威 DNS,且无对应的缓存数据,于是开始进行 DNS 迭代查询:将请求发送给 根域名服务器
  9. 根域名服务器 接收到请求后,将 顶级域名服务器 (.com) IP 发送给 其他 DNS 服务器
  10. 其他 DNS 服务器 根据 IP 将 DNS 查询请求发送给 顶级域名服务器
  11. 顶级域名服务器 接收到请求后,将 二级域名服务器 (jianshu.com) IP 发送给 其他 DNS 服务器
  12. 其他域名服务器 根据 IP 将 DNS 查询请求发送给 二级域名服务器
  13. 二级域名服务器 接收到请求后,发现自己是权威 DNS 服务器,于是将 www.jianshu.com 映射的 IP 120.132.92.21 发送给 其他域名服务器
  14. 其他域名服务器 接收到解析结果后,将 120.132.92.21 逐层返回传递下去,最终直至 192.168.110.252
  15. 192.168.110.252 接收到 www.jianshu.com 解析结果 120.132.92.21 ,根据 IP 与 www.jianshu.com 建立 TCP 连接,然后发起 HTTP 请求主页内容

0x01 DNS 协议结构

具体详见:结合Wireshark分析DNS 协议

wireshark-dns.PNG

wireshark-cname.PNG

根据上面的 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原理图:

cdn.PNG

通过在权威 DNS 服务器中配置 images.jianshu.com 的 cname 指向(A 记录)为 abc.qiniudns.com

在 CDN DNS 中将 abc.qiniudns.com110.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 解析,从而提供给用户快速,安全稳定,最新的网站访问体验



作者:蕪園樓主香獨秀
链接:https://www.jianshu.com/p/a73e963b63b1
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!