DNS 的原理就是一层层从根域名递归查询,其中让我觉得有疑问的就是 CNAME 。
反复使用命令查询七牛的官网,我知道他们一定会使用 CDN,CDN 也是 CNAME 使用最多的场景。
可以看到路径是这样子的 qiniu.com. => mid-lvs-public.qiniu.com. => jjh-lvs-public.qiniu.com. =>给了一个 A 记录 180.97.147.243 。
最终我们的请求肯定也都是发到 A 记录上,也就是将 qiniu.com 交到 180.97.147.243 ,这个 IP 对应的服务接受到请求才开始往客户端吐数据。
CNAME 提供一个窍门将解析 A 记录的权利交到下一个域名上,具体下一个域名对应的 ip 可能以后会变,但是对于上一个域名所对应的域名不会变,这个点很像 JAVA 中的一个接口,接口的实现可能会变,但是接口名和方法名提前就确定好了。
域名解析过程第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。
第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果返回。
第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域)的主域名服务器的地址。
第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。
第五步:重复第四步,直到找到正确的纪录。
第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。
一、DNS域名解析:( Domain Name System)是“域名系统”的英文缩写, www.qq.com ==>192.168.1.1 域名方便记忆二、CDN内容分发网络:
假设通过CDN加速的域名为 www.a.com ,接入CDN网络,开始使用加速服务后,当终端用户(北京)发起HTTP请求时,处理流程如下:
1.当终端用户(北京)向 www.a.com 下的指定资源发起请求时,首先向LDNS(本地DNS)发起域名解析请求。
2.LDNS检查缓存中是否有 www.a.com 的IP地址记录。如果有,则直接返回给终端用户;如果没有,则向授权DNS查询。
3.当授权DNS解析 www.a.com 时,返回域名CNAME www.a.tbcdn.com 对应IP地址。
4.域名解析请求发送至阿里云DNS调度系统,并为请求分配最佳节点IP地址。
5.LDNS获取DNS返回的解析IP地址。
6.用户获取解析IP地址。
7.用户向获取的IP地址发起对该资源的访问请求。
8.如果该IP地址对应的节点已缓存该资源,则会将数据直接返回给用户,例如,图中步骤7和8,请求结束。
9.如果该IP地址对应的节点未缓存该资源,则节点向源站发起对该资源的请求。
10.获取资源后,结合用户自定义配置的缓存策略,将资源缓存至节点,例如,图中的北京节点,并返回给用户,请求结束。
总结:(1)CDN的加速资源是跟域名绑定的。
(2)通过域名访问资源,首先是通过DNS分发查找离用户最近的CDN节点(边缘服务器)的IP
(3)通过IP访问实际资源时,如果CDN上并没有缓存资源,则会到源站请求资源,并缓存到CDN节点上,这样,用户下一次访问时,该CDN节点就会有对应资源的缓存了。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)