谈到 DNS, 映入脑海的可能就是 IP 映射、负载均衡、域名劫持、就近接入这些概念,但是作为整个 Internet 使用最为广泛的基础设施之一,他的工作原理是怎样的、里面有哪些黑科技、就近接入如何实现,相信大多数人并不十分清楚,本文就来做一一介绍。此外,本文引用了很多 RFC, 官方或非官方文档,想要深入了解的同学可以细读文中的引用出处。
目录
DNS Basic
Hierarchy of DNS servers
DNS server 一共有 4 类:
- Root DNS servers. 根服务器,记录了顶级域名服务器(Top-level domain (TLD) servers)的 IP, 全球只有 13 个逻辑节点,也就是 13 个 IP(当然,实际物理接入点有几百个)。(Root name server - Wikipedia)
- Top-level domain (TLD) servers. 顶级域名服务器,如 .com, .net, .org, .edu, 记录了 Authoritative DNS servers 的 IP.
- Authoritative DNS servers. 权威域名服务器,由 ISP 提供或机构组织自己提供(如腾讯的 ns1.qq.com, ns2.qq.com, ns3.qq.com, ns4.qq.com),记录了目标域名的 IP(A record)或别名(CNAME record)或委托的其它 Authoritative DNS servers 的 IP(NS record)等。
- Recursive DNS servers. 与客户端直接打交道的 DNS server, 通常情况下,客户端的解析请求都由它响应,大多数情况下指 local DNS server, 除此以外,还有 public DNS server.
如下图(图1):
Root DNS servers, Top-level domain (TLD) servers, Authoritative DNS servers 分别对应图中的第一、二、三层。
Recursive DNS servers 有点特殊,其作用有点类似于代理服务器,代理客户端去请求图中的 DNS server.
域名解析过程
主机 cis.poly.edu 需要解析主机 gaia.cs.umass.edu 的地址,主机 gaia.cs.umass.edu 的 authoritative DNS server 为 dns.umass.edu, 主机 cis.poly.edu 的 local DNS server 为 dns.poly.edu. 其中一种解析过程如下图(图2)所示:
- 主机 cis.poly.edu 向 local DNS server dns.poly.edu 发送目的域名为 gaia.cs.umass.edu 请求
- local DNS server dns.poly.edu 向 root DNS server 发送目的域名为 gaia.cs.umass.edu 请求
- root DNS server 匹配到目的域名 gaia.cs.umass.edu 的后缀为 .edu, 于是返回 .edu 的 TLD DNS server 的 IP
- local DNS server dns.poly.edu 向 .edu 的 TLD DNS server 发送目的域名为 gaia.cs.umass.edu 请求
- .edu 的 TLD server 匹配到 gaia.cs.umass.edu 的后缀为 umass.edu, 查找数据库找到 umass.edu 对应的 authoritative DNS server 为 dns.umass.edu, 于是返回 dns.umass.edu 的 IP
- local DNS server dns.poly.edu 向 dns.umass.edu 发送目的域名为 gaia.cs.umass.edu 请求
- dns.umass.edu 从数据库找找到 gaia.cs.umass.edu 的 IP 将其返回
- local DNS server dns.poly.edu 返回 gaia.cs.umass.edu 的 IP 给 cis.poly.edu
Note: 上述过程没有考虑 DNS cache 的情况。
迭代式查询与递归式查询
上例中 local DNS server 到其他 DNS server 的查询属于迭代式查询, 上例还有另外一种递归式查询方式,如下图(图3)所示:
在实际应用中,图 2 中的查询方式用的比较多,即客户端到 local DNS server 采用递归式查询,剩余部分采用迭代式查询。递归式查询容易使 DNS server 遭到攻击,大多数 DNS server(非 local DNS server 或 public DNS server) 会禁用递归式查询。(What risks are associated with recursive DNS queries?)
此外,DNS server 可以根据 local DNS server 的 IP 来查找 geo-location database, 从而返回地理位置最近的(geographically closest)的 IP (Geolocation Routing - Amazon Route 53), 由于递归式查询中与 authoritative DNS server 交互的是 TLD DNS server, 因此 authoritative DNS server 无法获取 local DNS server 的 IP