DNS 解析流程

CDN测评 0 200

昨天聊了 DNS 的基本概念,我们再来聊一聊 DNS 的解析流程。当我们通过浏览器或者应用程序访问互联网时,都会先执行一遍 DNS 解析流程。标准 glibc 提供了 libresolv.so.2 动态库,我们的应用程序就是用它进行域名解析(也叫 resolving)的, 它还提供了一个配置文件/etc/nsswitch.conf来控制 resolving 行为,配置文件中最关键的是这行:

image.png

它决定了 resolving 的顺序,默认是先查找 hosts 文件,如果没有匹配到,再进行 DNS 解析。默认的解析流程如下图:

上图主要描述了 client 端的解析流程,我们可以看到最主要的是第四步请求本地 DNS 服务器去执行 resolving,它会根据本地 DNS 服务器配置,发送解析请求到递归解析服务器(稍后介绍什么是递归解析服务器), 本地 DNS 服务器在 /etc/resolv.conf 中配置。下面我们再来看看服务端的 resolving 流程:

我们分析一下解析流程:

  1. 客户端向本地DNS服务器(递归解析服务器) 发出解析tool.chinaz.com域名的请求

  2. 本地dns服务器查看缓存,是否有缓存过tool.chinaz.com域名,如果有直接返回给客户端;

    如果没有执行下一步

  3. 本地dns服务器向根域名服务器发送请求,查询com顶级域的nameserver 地址

  4. 拿到com域名的IP后,再向com nameserver发送请求,获取chinaz域名的nameserver地址

  5. 继续请求 chinaz 的nameserver,获取 tool 域名的地址,最终得到了tool.chinaz.com 的 IP,本地 dns 服务器把这个结果缓存起来,以供下次查询快速返回

  6. 本地dns服务器把把结果返回给客户端

递归解析服务器 vs 权威域名服务器

我们在解析流程中发现两类 DNS 服务器,客户端直接访问的是 递归解析服务器, 它在整个解析过程中也最忙。它的查询步骤是递归的,从根域名服务器开始,一直询问到目标域名。

递归解析服务器通过请求一级一级的权威域名服务器,获得下一目标的地址,直到找到目标域名的权威域名服务器

简单来说:递归解析服务器是负责解析域名的,权威域名服务器是负责存储域名记录的

递归解析服务器一般由 ISP 提供,除此之外也有一些比较出名的公共递归解析服务器, 如谷歌的 8.8.8.8,联通的 114,BAT 也都有推出公共递归解析服务器,但性能最好的应该还是你的ISP提供的,只是可能会有 DNS劫持的问题

缓存

由于整个解析过程非常复杂,所以 DNS 通过缓存技术来实现服务的鲁棒性。当递归nameserver 解析过 tool.chianaz.com 域名后,再次收到 tool.chinaz.com 查询时,它不会再走一遍递归解析流程,而是把上一次解析结果的缓存直接返回。并且它是分级缓存的,也就是说,当下次收到的是 www.chinaz.com 的查询时, 由于这台递归解析服务器已经知道 chinaz.com 的权威 nameserver,所以它只需要再向 chinaz.com nameserver 发送一个查询 www 的请求就可以了。

根域名服务器递归解析服务器是怎么知道根域名服务器的地址的呢?根域名服务器的地址是固定的,目前全球有13个根域名解析服务器,这13条记录持久化在递归解析服务器中:

为什么只有 13 个根域名服务器呢,不是应该越多越好来做负载均衡吗?之前说过 DNS 协议使用了 UDP 查询, 由于 UDP 查询中能保证性能的最大长度是 512 字节,要让所有根域名服务器数据能包含在512字节的UDP包中, 根服务器只能限制在13个, 而且每个服务器要使用字母表中单字母名

智能解析

智能解析,就是当一个域名对应多个 IP 时,当你查询这个域名的 IP,会返回离你最近的 IP。

由于国内不同运营商之间的带宽很低,所以电信用户访问联通的IP就是一个灾难,而智能 DNS 解析就能解决这个问题。

智能解析依赖 EDNS 协议,这是 google 起草的 DNS 扩展协议, 修改比较简单,就是在 DNS 包里面添加 origin client IP, 这样 nameserver 就能根据 client IP 返回距离 client 比较近的 server IP 了

国内最新支持 EDNS 的就是 DNSPod 了,DNSPod 是国内比较流行的域名解析厂商,很多公司会把域名利用DNSPod 加速, 它已经被鹅厂收购


域名注册商

一般我们要注册域名,都要需要找域名注册商,比如说我想注册 hello.com,那么我需要找com域名注册商注册hello域名。com的域名注册商不止一家, 这些域名注册商也是从ICANN 拿到的注册权, 参见如何申请成为.com域名注册商

那么,域名注册商 和 权威域名解析服务器 有什么关系呢?

域名注册商都会自建权威域名解析服务器,比如你在狗爹上申请一个.com下的二级域名,你并不需要搭建nameserver, 直接在godaddy控制中心里管理你的域名指向就可以了, 原因就是你新域名的权威域名服务器默认由域名注册商提供。当然你也可以更换,比如从godaddy申请的境外域名,把权威域名服务器改成DNSPod,一方面加快国内解析速度,另一方面还能享受DNSPod 提供的智能解析功能


用 bind 搭建域名解析服务器

由于网上介绍bind搭建的文章实在太多了,我就不再赘述了, 喜欢动手的朋友可以网上搜一搜搭建教程,一步步搭建一个本地的nameserver 玩一玩。
那今天就先到这里拉   需要购买CDN解决移动屏蔽可以联系我哦5765953

也许您对下面的内容还感兴趣:

留言0

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。