DomainNameService域名服务,提供域名到IP地址的双向映射,是维持互联网可用性和可靠性的关键基础设施。互联网的可用性除了网络可达之外还应包括用户能够正常访问他需要访问的公开合法信息,DNS服务为便捷的信息查询提供了核心技术支持;而互联网的可靠性除了网络服务的在线状态之外还应包括用户能够准确访问他需要访问的公开合法信息,即域名解析数据不应受到中间人或第三方的恶意修改。本文将主要介绍DNS相关基础知识,包括域和委派授权,以及DNS查询流程。
0x1 域和委派授权
DNS采用树状层次化结构进行组织和管理,由ICANN进行规划和委派授权,我国的域名管理机构CNNIC是经由IANA授权的国家级域名管理机构,其他国内域名服务商都需要CNNIC授权才能提供权威解析服务。域名空间结构如下图所示:
树根的点号.称为根域;一级分支称为TLD顶级域名,分为两类,一类是.com、.net、.org及新生代的.xyz、.cc等通用域名,一类是.uk、.us、.cn、.jp等表明受管国家的域名;二级分支称为SLD二级域名,例如homelab.pub、bing.com等;三级分支称为三级域名,例如www.homelab.pub、cn.bing.com等,以此类推。通常域名的级别不会超过四级,太长或复杂度太高的域名设计违背了DNS系统的设计初衷,因此又出现了新的短域名方案,如z.cn等。目前互联网上共有13台根域服务器,域名为a~m.root-servers.net,分布在美国(10台)、英国(1)、瑞典(1)和日本(1)。
域名的管理由授权委派机制实现,从根域开始各层级之间通过授权委派实现对子域域名的注册管理和地址解析,例如.com由根域授权给多个大型运营商或国家级管理机构进行管理,因此我们可以在us、uk或国内注册.com域名,但.cn仅授权给了CNNIC,因此是不可能在us或者uk的域名服务机构注册一个.cn域名的。二级及以下层级域名的授权委派由二级域名所有组织自行定义和管理,也就是说homelab.pub要在互联网上使用必须向CNNIC或其他同样获得.pub域名管理授权的服务机构缴费注册,但bj.homelab.pub则不在需要向这些结构注册,由企业内部管理员自行决定即可。授权委派机制会在后续内容介绍,此处大致理解就可以。
0x2 DNS查询
DNS服务的作用就是响应来自互联网的域名或IP解析请求,通常DNS请求可以分为三类:递归查询(RecursiveQuery)、迭代查询(IterativeQuery)和反向查询(InverseQuery),其中反向查询目前已基本被淘汰因此不做介绍。这里需要说明的是反向查询(Inverse)和反向地址解析不是一个概念,反向地址解析是采用in-addr.arpa这个特殊的域通过递归查询和迭代查询相结合的方式完成了从IP地址向域名的解析。
递归查询(Recursive Query)
在递归查询中DNS解析器将代表客户端以递归方式向其他DNS服务器发出完整查询请求直到得到查询结果。在得到查询结果的过程中途经的所有服务器都会保存本次查询的缓存信息,因此会占用途径服务器部分内存资源,这在互联网中并不是最优方案。递归查询详细流程示意如下:
在浏览器地址栏输入www.aliyun.com,DNS解析流程如下:
1、查询本地 DNS Cache ,有 www.aliyun.com 记录缓存则将结果反馈给浏览器,本次查询结束,否则继续;
2、向本地配置的 DNS Server 进行查询,如 4.4.4.4 ,若 4.4.4.4 有相关记录缓存则将结果反馈给浏览器,本次查询记录,否则继续;
3、因 DNS Server 4.4.4.4 没有相关域名记录缓存,因此向根域服务器进行查询;
4、根域服务器角色决定其不会缓存此类记录,故代替 4.4.4.4 向 .com TLD DNS 查询;
5、因 .com TLD 也不会缓存此类记录,因此 .com TLD 代替根域服务器向 aliyun.com 授权 DNS 服务器进行查询;
6、aliyun.com 授权 DNS 服务器将 www.aliyun.com 的解析结果返回给 .com TLD;
7、.com TLD 将 www.aliyun.com 的解析结果返回给根域服务器 ;
8、根域服务器将 www.aliyun.com 的解析结果返回给主机配置的 DNS 服务器,即 4.4.4.4;
9、4.4.4.4将www.aliyun.com的解析结果返回给主机浏览器,本次查询结束。
迭代查询(IterativeQuery)
在迭代查询中是按照域名从右到左的顺序逐域查询,即按照DNS的树状结构从根逐渐向下级分支进行查询,直到找到授权服务器得到查询结果。迭代查询详细流程示意如下:
在浏览器地址栏输入www.aliyun.com,DNS解析流程如下:
1、查询本地 DNS Cache ,有 www.aliyun.com 记录缓存则将结果反馈给浏览器,本次查询结束,否则继续;
2、向本地配置的 DNS Server 进行查询,如 4.4.4.4 ,若 4.4.4.4 有相关记录缓存则将结果反馈给浏览器,本次查询记录,否则继续;
3、因 DNS Server 4.4.4.4 没有相关域名记录缓存,因此向根域服务器进行查询;
4、根域返回 .com TLD 服务器的地址;
5、4.4.4.4 向 .com TLD 服务器查询 www.aliyun.com ;
6、.com TLD 服务器返回 aliyun.com 授权服务器地址;
7、4.4.4.4 项 aliyun.com 授权服务器查询 www.aliyun.com;
8、aliyun.com 授权服务器将 www.aliyun.com 解析结果返回给 4.4.4.4;
9、4.4.4.4 将 www.aliyun.com 的解析结果返回给主机浏览器,本次查询结束。
小结:
以上两种查询类型只是理论流程说明,在实际应用中是结合使用的,在客户端和本地配置的DNS服务器(如上文的4.4.4.4)之间采用递归查询,而本地DNS服务器向其他DNS服务器查询则使用迭代查询,即使本地DNS服务器向其他服务器做递归查询,也只会返回迭代结果。因为迭代查询在DNS树状结构的分布式数据库中查询速度更快,DNS服务器之间的交互更少,因此在根域和顶级域服务器都仅提供迭代查询。