多年前,腾讯管家曾是我对 DNS 的启蒙老师,他提供 “可以上QQ,但是无法浏览网页” 这种情况的一键修复功能,但 DNS 的问题应该可以聊很多吧,本篇介绍 DNS 内容基础。

什么是DNS

域名称系统(Domain Name System ),是 IP 地址和域名映射关系的分布式数据库。DNS 同时使用的 TCP 和 UDP 的 53 端口。基于两种协议的特性,TCP 的 53 端口用于区域文件的数据传输,UDP 的 53 端口用于监听查询请求。

常用命令

1
2
3
4
5
# dig -t 记录类型 要解析的域名 @DNS服务器
# dig -t axfr 要解析的域名 @DNS服务器
# dig +trace 要解析的域名 @DNS服务器
# host -t 类型 要解析的域名 DNS服务器
# nslookup

主从 DNS 服务器

基于可靠性和持续性的考虑,DNS 支持主从模式部署。在购买域名 example.com 之后,第一步要做的就是对域名进行解析,我们可以选择自建 DNS 服务或者托管到提供 DNS 服务的第三方网站。然后负责解析 example.com 的这一台DNS 服务器 IP 需要注册到上一级服务器,整个 DNS 服务才算部署完成,暂且称这一台 DNS 服务为主服务器。另外的一台从 DNS 服务器会同步主 DNS 服务器上的数据,因此它具有和主 DNS 服务器一样的解析数据库。由于区域传送(zone transfer)是单向的,要么从 DNS 服务器定期向主 DNS 服务器进行询问和同步数据,要么主 DNS 服务器发生更新之后,通知从 DNS 服务器执行同步操作,所以解析的数据只能在主 DNS 服务器上修改,这也是为什么域名解析配置完成之后需要一段时间才能全球同步并生效。

  • DNS 有一个起始授权记录(Start of Authority),负责标记区域内的主 DNS 服务器信息,一个区域只能有一个主 DNS 服务器。
  • DNS 服务器支持一主多从的工作模式;
  • 从 DNS 服务器可以在上一级的从 DNS 服务器拉取区域传送的数据,称为多级从服务器。
  • 第一次进行区域传送,一般都是包含完整的区域信息,称作完全区域传送(axfr)
  • 非第一次的进行区域传送,通常采用增量的方式,称作增量区域传送 (ixfr)
  • 主 DNS 服务器长时间内不响应询问请求,从 DNS 服务器不会自动接替工作。

缓存 DNS 和转发 DNS

无论是负责转发 DNS 还是负责缓存 DNS,意义都在于减轻网络压力,提高工作效率。客户端接收到查询请求之后,那么就会有:

  1. 查询本地 hosts 文件,如果没有匹配项,进入下一步。
  2. 查询本地 DNS 缓存,如果没有匹配项,进入下一步。
  3. 向指定 DNS 服务器查询:
    • 查询 DNS 服务器的缓存,如果没有匹配项,进入下一步。
    • 查询 DNS 服务器的数据库,如果没有匹配项,进入下一步。
    • DNS 服务器向根域发请求,执行迭代查询。

我们都知道,缓存查询的速度肯定比数据库的查询速度快。缓存 DNS 服务器会接受本地客户端发起的请求,然后直接向根域进行迭代查询,查询结果缓存到自身的服务器上,进而提高下一次查询的效率,也减少 DNS 的工作压力。在使用缓存作为应答的时候,因为存在与实际情况的时间误差,所以这种应答称之为非权威应答(Non-authoritative answer),缓存的存活时间称作(Time To Live)。

转发 DNS 只负责收到的解析请求进行转发处理,转发的目的地址会基于策略做判断,因此转发 DNS 服务器上不具备缓存数据。

递归查询与迭代查询

互联网上大多数情况下的查找方式都是迭代的,但是 DNS 使用的是先递归,后迭代的方式。

递归查询:A –> B –> C –> D

上面” 缓存 DNS 和转发 DNS “ 小节提到的三点都是属于递归查询。

Alice 问 Bob 是否知道 example.com 的 IP,Bob 不知道,但 Bob 知道 Charlie 知道。

于是 Bob 问 Charlie,Charlie 也不知道,但 Charlie 知道 Dave 知道,如此类推,最后的结果逐级返回。

迭代查询: A –> B, A –> C, A –> D

迭代查询都是从根域开始,然后到顶级域(Top Level Domain,TLD),然后到次级域(Second Level Domain ,SLD),如此执行下去。

Alice 问 Bob 是否知道 example.com 的 IP,Bob 不知道,但 Bob 知道 Charlie 知道,并且把 Charlie 知道的事情告诉了 Alice。

Alice 问 Charlie 是否知道 example.com 的 IP,Charlie 不知道,但 Charlie 知道 Dave 知道,并且把 Dave 知道的事情告诉了 Alice,如此类推,下图表示迭代查询的过程。

任播技术

任播(anycast)是路由形式的一种,类似的还有单播(unicast)、多播(multicast)和广播(broadcast),而路由就是就是通过互联的网络信息从源地址传输到目的地址的活动。任播技术已经应用于 BGP 路由协议和 DNS 镜像部署等各种领域,截至 2016 年 12 月 5 日,13 台根服务器通过任播技术在全球部署服务节点已达 641 个。另外,广播通讯是无法穿越三层交换机或路由器的。

Alice 问坐在前面的 Bob 放学之后开黑吗?(单播)

班主任 Charlie 在讲台上说你们班是我教过最差的学生!(广播)

班主任 Charlie 跟班长说让没有交作业的同学来一趟办公室!(多播)

年级主任在课室门口问,外面的走廊那么脏谁来扫一扫?只有第一排的 Bob 站起来 (任播)

在单播中,在网络位址和网络节点之间存在一一对应的关系。

在广播和多播中,在网络位址和网络节点之间存在一对多的关系:每一个目的位址对应一群接收可以复制资讯的节点。

在任播中,在网络位址和网络节点之间存在一对多的关系:每一个位址对应一群接收节点,但在任何给定时间,只有其中之一可以接收到传送端来的资讯

我国根服务器发展

目前我国至少具有4 个根服务器和 9 个镜像节点 :

  • 2003年,ISC 和中国电信共同建立 F 根镜像,是第一引进的根服务器镜像。
  • 2005年,I 根的管理机构 Autonomica 在中国互联网络信息中心(CNNIC)设立了中国第二个根镜像。
  • 2006 年,中国网通与美国 VeriSign 公司合作,正式开通 J 根的中国镜像服务器。
  • 2011 年, CNNIC 在北京新增一个 F 根镜像。
  • 2012年, CNNIC 又部署一个 L 根镜像。
  • 2014年,世纪互联、北龙中网和天地互连 3 家公司分别与 ICANN 合作,在中国新增 3 台 L 根域名服务器镜像节点 。
  • 阿里云与 VeriSign 合作在杭州建设 了一个 J 根镜像。

参考资料

DNS 概念解释—阮一峰

anycast 概念解释—cloudflare

阿里公共 DNS 技术架构简介

根区文件 DNS root zone

《DNS 根服务体系的发展研究》