DNS解析与CDN原理

简介: 在互联网冲浪中,我们已经习惯了输入域名连接网站。也许你有了解过网络世界大家的「坐标」都是 IP 地址,但是 DNS 解析怎么找到 IP 地址?更有时,同一个域名申请还会返回不同的地址,这所谓 CDN 是如何实现的?

在互联网冲浪中,我们已经习惯了输入域名连接网站。也许你有了解过网络世界大家的「坐标」都是 IP 地址,但是 DNS 解析怎么找到 IP 地址?更有时,同一个域名申请还会返回不同的地址,这所谓 CDN 是如何实现的?

3e74784655b450b46c253bd36521b9d7_588616d362640ec582abbba6950904e5.png


DNS 解析流程


 把域名转换成 IP 地址,就是 DNS 服务器天天干的事情。DNS 全称为 Domain Name System(域名系统),当我们输入一个域名(如 chralpha.com),DNS 查询流程大概是:


浏览器先查询浏览器缓存,发现并没有找到 chralpha.com 的解析记录


浏览器向系统发起请求查询解析结果,通常系统也有一层缓存,但仍然没有找到 chralpha.com 的地址


系统向上游 DNS 服务器发起请求,系统中可以自行配置 DNS 服务器,假设我使用的是 1.0.0.1,那么操作系统就会向 1.0.0.1 发送查询请求


不论是再向上级查询还是缓存生效,1.0.0.1 最终都会返回一个对应的 IP 地址,之后浏览器就可以拿着这个 IP 地址发起请求了


 至于 1.0.0.1 如何找到 chralpha.com 的 IP 地址呢?如果有缓存,那么直接返回即可。否则将一层层向上查询,直到根域名服务器。全球有 13 台根域名服务器,同时还有几百台备用服务器。根域名服务器会先根据最后的顶级域名,所有域名都必须以顶级域名结尾(如 com, org 等)。在对应顶级域名位置查询二级域名,也就是 chralpha。在你注册域名的时候,域名注册商就会给你开通一个地址,里面存放了域名的 NS(Name Server) 信息,用于了解该去哪里查询域名的 DNS 记录。我将域名的 NS 记录修改到 Cloudflare,自然该处保存着 Cloudflare 的地址。此时向该地址请求便能很快找到对应解析记录。


 我们刚刚默认系统使用 1.0.0.1 作为 DNS 服务器,事实上这是根据系统设置决定的。你可以自由选择公网或者运营商提供的 DNS 服务器。

f2e7e4fe06b4a4eb2bc2cf3590c46394_5169c375199eef7963abe8ec374baaca.png



 以上就是一次 DNS 解析的完整流程。看似很长,但实则由于缓存机制的存在,通常这个过程是比较无感的,悄无声息间便完成了。


 当然,如果你向 chralpha.com 发起请求,得到的并非 200 正常返回值,而是 301 跳转。因为我将 chralpha.com 重定向至 blog.ichr.me,之后浏览器又会向 blog.ichr.me 发起查询。


CDN 加速原理


 从上面的流程来看,一个域名通常对应着一个记录。但是想必你也听说过 CDN 加速。


CDN (Content Delivery Network),内容分发网络。在现有的网络中再添加一层缓存层,并将网站内容分发到多个边缘节点上。受到请求只从距离用户最近的节点调取。


 有点类似「空间换时间」的做法。以此可以加快访问速度,降低骨干网压力。


 但是同时,我们发现即便是同一个域名,不同位置的用户查询需要返回不同位置对应最近的 CDN 节点。所以在 DNS 解析过程中需要一定特殊手段实现。


访问流程

 我们假设 chralpha.com 应用了 CDN 服务,这时如果在浏览器中敲入此域名,和上面 DNS 解析流程一样,浏览器会得到一个记录。但注意这里不再是源的记录,而是 CDN 服务器的记录。通常通过 CNAME 指向 CDN 专用的 DNS 服务器。这个专用 DNS 服务器不只是在缓存索引或者向上级查询这么简单,它会利用请求的 meta 信息,根据发起请求 IP 端判断哪一个边缘节点路由更近,便返回该节点 IP 地址。

54f8d145679fcdd951dea8c8e827d9d1_87acd343c115c5a5781659cf334182d7.png

这只是一个 function 的事情,DNS 查询带来的性能损耗几乎可以忽略不计,但是带来的速度提升却是实实在在的。而且带来的好处还有隐藏源站地址,避免被攻击。

function search(request) {    if (请求对象为 "chralpha.com") {        if (请求发起地址在中国) {            返回位于中国的边缘服务器地址        } else if (请求发起地在北美) {            返回位于北美的边缘服务器地址        }        ...    }}

 这段伪代码实现非常粗糙,但原理大致如此。通常 CDN 专用 DNS 服务器可以配置某些高精度 IP 地址库达到更精确的判断效果。


分发方式

 一般 CDN 有两种分发手段:Push CDN 和 Pull CDN。

 Push CDN 是一种主动分发技术,通常由网站管理员主导。由源节点主动通过 HTTP/FTP 等协议主动分发到边缘节点缓存,如在每次更新的时候将内容预分发到 CDN 节点上。这样无论何时用户向 CDN 节点发起请求时总有最新的缓存可供使用,打开速度也会更快一点。但缺点是不能更好地按需配置,分发所有内容通常会带上一些调用不频繁的资源,降低存储效率,成本也更高。现在 Push CDN 一般可以根据用户访问统计调整分发策略,决定分发那些内容。不过这样一来未分发的资源调用速度会有所下降,各有取舍吧。


 Pull CDN 则更像被动分发技术,使用体验视用户访问情况而定。Pull CDN 默认情况下先什么都不动,受到请求时匹配缓存,如果本地有缓存且还没有过期,便直接返回缓存;否则就向源站请求,并将从源站得到的资源缓存下来,设置缓存有效期。Pull CDN 通常配置简单,而且可以根据访问情况灵活调配。但是由于是根据请求缓存,第一次访问或者缓存过期后向源站发起请求速度还是会下降,对于一些流量不大的站点效果远不如 Push CDN。同时还有一定的滞后性,在网站内容更改过后 CDN 节点缓存仍未过期,导致边缘服务器直接返回缓存从而无法及时得到最新内容。这就需要平衡缓存过期时间:过长导致内容时效性影响,过短导致速度体验下降。


 由分发方式可知,CDN 需要更多的服务器资源,所以市面上的私人对象存储服务绝大多数都是收费的。有的是按流量计费,有的需要购买流量包等。不过付出一定金额带来的体验上升还是比较可观的,且自己可以更好控制内容分发效果。


 与此同时也有许多公共免费 CDN 服务,如 jsDelivr, UNPKG 等等。它们通过调取公共库(如 GitHub、npm 等)的资源并缓存到自己的 CDN 节点上。但是由于「公共」的特殊性,这类 CDN 通常只能使用 Pull CDN。


例如通过 jsDelivr 调用 GitHub 仓库资源,这次 jsDelivr 的 CDN 域名(cdn.jsdelivr.net)会帮我利用专用 DNS 服务器返回距离我最近的 CDN 节点。这时向该节点发出请求。当该节点发现本地无法匹配资源,便会向 GitHub 源位置发起请求,并将得到的资源本地缓存好,设置过期时限。如果有和我挨得比较近的小伙伴也访问这个仓库,那么就会直接从该 CDN 节点返回资源,不用重新回到 GitHub 索取,从而加快访问速度。


 但是从 jsDelivr 每日流量来看,除非热门项目,其他资源的命中率是比较低的。而使用 jsDelivr 更多是为了稳定而已。因为 jsDelivr 有网宿备案和国内节点,相比直接访问国内时常抽风的 GitHub,通过 jsDelivr 请求 GitHub 资源或许会更加稳定。


 DNS 得以让我们无需再记住毫无规律却随时可能变更的 IP 地址,而 CDN 提升我们上网体验且降低骨干网压力。希望你看完本文后可以了解 DNS/CDN 概念,或对日后应用有所帮助。感谢阅读!

相关文章
|
2月前
|
域名解析 存储 网络协议
域名解析的终极指南:从基础到进阶,彻底搞懂 DNS 记录
域名解析是网站运行的基础,正确配置DNS记录至关重要。本文从基础到进阶全面解析DNS知识,涵盖A、AAAA、CNAME、MX、TXT、CAA等常见记录类型及其应用场景。通过学习,你将了解DNS的工作原理,掌握如何优化域名配置,确保网站与邮件服务高效运行。无论搭建个人博客还是企业官网,本文都能助你轻松搞定域名解析!
515 0
|
27天前
|
域名解析 网络协议 网络安全
SSL证书验证全攻略:DNS/HTTP/手动解析怎么选?
SSL证书在网络安全中至关重要,1Panel提供三种验证方式:DNS验证、HTTP验证和手动解析。DNS验证便捷,适合CDN网站;HTTP验证快速,需服务器在线;手动解析灵活,但操作复杂。根据需求选择合适确认方式,定期检查证书状态。
271 2
|
3月前
|
域名解析 存储 缓存
深入学习 DNS 域名解析
在平时工作中相信大家都离不开 DNS 解析,因为 DNS 解析是互联网访问的第一步,无论是使用笔记本浏览器访问网络还是打开手机APP的时候,访问网络资源的第一步必然要经过DNS解析流程。
|
1月前
|
网络协议 安全 Linux
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
阿里云服务器国际站dns服务器不可用怎么办?dns可以随便改吗?
|
2月前
|
CDN
阿里云CDN怎么收费?看这一篇就够了,CDN不同计费模式收费价格全解析
阿里云CDN收费包含基础费用与增值费用。基础费用提供三种计费模式:按流量、带宽峰值及月结95带宽峰值计费,默认按流量计费,价格因地域和用量阶梯而异。增值费用涵盖静态HTTPS、QUIC请求、WAF防护及实时日志等服务,按需使用并单独计费。此外,可通过购买资源包预付费降低整体成本。更多详情参见阿里云官方文档。
697 8
|
3月前
|
机器学习/深度学习 数据可视化 PyTorch
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
355 7
深入解析图神经网络注意力机制:数学原理与可视化实现
|
3月前
|
机器学习/深度学习 缓存 自然语言处理
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
Tiktokenizer 是一款现代分词工具,旨在高效、智能地将文本转换为机器可处理的离散单元(token)。它不仅超越了传统的空格分割和正则表达式匹配方法,还结合了上下文感知能力,适应复杂语言结构。Tiktokenizer 的核心特性包括自适应 token 分割、高效编码能力和出色的可扩展性,使其适用于从聊天机器人到大规模文本分析等多种应用场景。通过模块化设计,Tiktokenizer 确保了代码的可重用性和维护性,并在分词精度、处理效率和灵活性方面表现出色。此外,它支持多语言处理、表情符号识别和领域特定文本处理,能够应对各种复杂的文本输入需求。
449 6
深入解析Tiktokenizer:大语言模型中核心分词技术的原理与架构
|
3月前
|
传感器 人工智能 监控
反向寻车系统怎么做?基本原理与系统组成解析
本文通过反向寻车系统的核心组成部分与技术分析,阐述反向寻车系统的工作原理,适用于适用于商场停车场、医院停车场及火车站停车场等。如需获取智慧停车场反向寻车技术方案前往文章最下方获取,如有项目合作及技术交流欢迎私信作者。
233 2
|
3月前
|
缓存 边缘计算 安全
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
250 7
|
3月前
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

相关产品

  • 云解析DNS
  • 推荐镜像

    更多
  • DNS