[DNS] 4. DNS的递归与迭代
玩软路由不折腾DNS是没有灵魂的。
———我说的
想要将一份DNS记录播撒到全世界还是有些难度的,虽然域名解析的在表面上只是回答某一域名的IP,但是在内部却有一套截然不同的运行逻辑。在表面上,直接提供指定域名的IP被称为递归解析,而按照域名的层级在多台服务器间获取结果的过程则称为迭代解析。
DNS的递归解析
在各个操作系统中,填写DNS服务器的地方实际上就是用来填写递归解析服务器的,也就是说常见的 8.8.8.8 ,1.1.1.1 ,114.114.114.114 等DNS服务器都是递归解析服务器,在DNS体系里也被称为本地DNS服务器。DNS的大部分任务都由递归解析服务器承担。
可以理解为 递:递给一个域名。归:归还一个或多个IP。
DNS的迭代解析
迭代解析由递归服务器完成(需要先进行迭代解析获取ip后才能将结果发送给客户端),域名使用 “ . ” 分割不同的区域,迭代解析就是按照区域来进行解析的。
以 使用 8.8.8.8 解析 teapotium.com 为例(以下步骤均为 8.8.8.8 的工作内容):
想要获取 teapotium.com 的结果就需要先找到 .com ,因为 teapotium 处于 com 下。
那又如何找到 .com 呢?所有的顶级域名都处于根域名服务器下,想要找到 .com 就需要先去问根域名服务器。
那根域名服务器的地址呢?不用担心,每一个递归服务器都保存了根域名服务器的信息,就像电脑里的hosts文件那样。
查询 teapotium.com 的第一步就是向根域名服务器查询,而根服务器会发现这个域名的末尾是 .com ,根服务器就告诉 8.8.8.8 .com 服务器的地址。
这里的 .com 部分叫做顶级域名,管理所有以 .com 结尾域名的服务器叫做顶级域名服务器(TLD),同理其他的顶级域名(如 .org ,.net 等等)都有自己的顶级域名服务器。
这里将 .com 的顶级域名服务器简称为 “.com 服务器” 。
当拿到 .com 服务器的地址后,8.8.8.8 又向 .com 服务器查询 teapotium.com 的地址,而管理 .com 的服务器就会告诉 8.8.8.8 谁是 teapotium.com 的权威域名服务器。
得到权威域名服务器的地址后,8.8.8.8 又向这个权威域名服务器查询 teapotium.com ,而这次将会得到域名真正的IP。
权威域名服务器就是真正地在管理某一个域名的服务器,更新域名记录都是在这台服务器中进行的。
对于域名来说,权威域名服务器就是它的家,因为这个 “家” 在管理这个域名可以给出一个权威的结果,所以称这个 “家” 为权威域名服务器。
将域名迁移到Cloudflare时其中的名称服务器就是指权威域名服务器,本质上是修改NS记录。
而开启Cloudflare的 “小云朵” 就是利用权威域名服务器的身份调整解析结果的IP,为客户端提供动态的CDN接入点。
迭代解析总结
总结一下就是:
- 先去根域名服务器查找域名对应的顶级域名服务器
- 向顶级域名服务器查找对应的权威域名服务器
- 最后向权威域名服务器查询得到域名的IP
负责迭代解析的服务器是可以自建的,并不局限于互联网上的公共DNS服务器。
可以利用 dig 命令查看某一个域名的迭代解析流程。
根域名服务器的误区
一个常见的说法是根域名服务器只有13个,实际上这是错误的。这13个服务器均使用任播技术实现了在全球的分布式部署,截直到本文撰写时全球一共有1865台根服务器在为互联网提供服务(来源为root-servers.org)。
根域名服务器限制为13个是因为UDP的数据包有效大小不能超过512字节,就是说这512字节差不多只能写下13个服务器的地址。
任播(Anycast),简单来说就是多台服务器使用相同的IP地址,路由器会将客户端的请求分配到最近的服务器处理。
另外,在互联网上经常将根域名服务器简称为根服务器,给人一种互联网基石的感觉,经常让人浮想联翩,比如根服务器的性能如何强大,安保如何森严等等,然而实际上的根服务器要朴素很多。除了前面提到的遍布全球以外,根服务器的记录还是公开的,可以去IANA的网站上下载Root Zone File,这个文件只有2MB多一点,根服务器也只是按照这个文件应答而已,并没有太多黑科技的地方。如果你想,你可以下载这个文件自己做根服务器(就是没有人访问而已)。只要拥有这个文件并且大家认可,那么你就是一台根域名服务器了,这代表根域名服务器不分主从,只有是与不是之分。