TOC

DNS 查询流程

解析过程就是一个 根服务器 -> TLD 服务器 -> 权威服务器 多层 Referral(转介)的过程,每一层只对自己范围内的事情提供答案,范围之外就告诉你下一步找谁。

比如本站域名 www.markjour.com 是这样解析的:
PS:完整域名(FQDN)实际上以根域 . 结尾,只是平时通常省略。

当浏览器访问 https://www.markjour.com 时,实质是要获取 www.markjour.com 的 A/AAAA 记录,也就是真实 IP。
DNS 查询过程大致如下:

  1. 查询本地 DNS 缓存,有缓存就直接返回,否则就继续下一步。
  2. 操作系统根据 DNS 配置发起请求

DNS 配置一般来自 DHCP,部分时候是手动配置的。
可能是电信运营商管理的 ISP DNS,也可能是企业内部 DNS,也可能是一些 Public DNS,比如:谷歌 DNS 8.8.8.8 / Cloudflare DNS 1.1.1.1 / 阿里 DNS 223.5.5.5
在专业术语中,叫做 Recursive Server

  1. 如果 DNS 服务器有缓存就直接返回,否则就继续下一步。
  2. 查询 Root Server 获取 TLD Server (.com)
  3. 查询 TLD Server 获取 markjour.com 权威 DNS Server
    权威 DNS 负责自己权限范围内所有域名的解释权
  4. 查询权威 DNS Server 获取 A/AAAA 记录

实验

-> % dig +trace www.markjour.com

// 这一部分就是获取到的 Root Server 信息:
; <<>> DiG 9.20.18-1ubuntu2.1-Ubuntu <<>> +trace www.markjour.com
;; global options: +cmd
.           17495   IN  NS  a.root-servers.net.
.           17495   IN  NS  b.root-servers.net.
.           17495   IN  NS  c.root-servers.net.
.           17495   IN  NS  d.root-servers.net.
.           17495   IN  NS  e.root-servers.net.
.           17495   IN  NS  f.root-servers.net.
.           17495   IN  NS  g.root-servers.net.
.           17495   IN  NS  h.root-servers.net.
.           17495   IN  NS  i.root-servers.net.
.           17495   IN  NS  j.root-servers.net.
.           17495   IN  NS  k.root-servers.net.
.           17495   IN  NS  l.root-servers.net.
.           17495   IN  NS  m.root-servers.net.
;; Received 228 bytes from 127.0.0.53#53(127.0.0.53) in 7 ms

// 这一部分就是从 g.root-servers.net 这个 Root Server 获取到的 TLD Server 信息:
com.            172800  IN  NS  l.gtld-servers.net.
com.            172800  IN  NS  j.gtld-servers.net.
com.            172800  IN  NS  h.gtld-servers.net.
com.            172800  IN  NS  d.gtld-servers.net.
com.            172800  IN  NS  b.gtld-servers.net.
com.            172800  IN  NS  f.gtld-servers.net.
com.            172800  IN  NS  k.gtld-servers.net.
com.            172800  IN  NS  m.gtld-servers.net.
com.            172800  IN  NS  i.gtld-servers.net.
com.            172800  IN  NS  g.gtld-servers.net.
com.            172800  IN  NS  a.gtld-servers.net.
com.            172800  IN  NS  c.gtld-servers.net.
com.            172800  IN  NS  e.gtld-servers.net.
com.            86400   IN  DS  19718 13 2 8ACBB0CD28F41250A80A491389424D341522D946B0DA0C0291F2D3D7 71D7805A
com.            86400   IN  RRSIG   DS 8 1 86400 20260621210000 20260608200000 54393 . UjqH/UCYHIRrwicZi/pcCK30TVrAgsC+7uulzN017Cx7wYhrIi/FGBOb ITirp5yX7QBpZVhk9cJK8ngs186YXRHAAN6M4MCXVjEpPYiJAiz42i2C c1EyL0hcLh8YO18RDftRRl/mbWlIlbmzIEWPgliL+vJ+F/RPwN+pqXY4 D6+0LCShkYEP4q2Ehg7KYXdAw6R5vZfE8Ft9c5u+mKvfJ3VuPm47Aiui bO0YIVSGHSpLYqR5RlbL+MUXO27XhtEIPpek+39Lb30PvBf1L29XyNM7 8UQwOirF5cf7emdS6/Io3+LYPgOEvK/gYz5yj+I5AgqCS081dDI/GYOp R5IkVA==
;; Received 1176 bytes from 2001:503:ba3e::2:30#53(a.root-servers.net) in 80 ms

// 这一部分就是从 c.gtld-servers.net 这个 TLD Server 获取到的权威 DNS 信息
markjour.com.       172800  IN  NS  dns9.hichina.com.
markjour.com.       172800  IN  NS  dns10.hichina.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 900 IN NSEC3 1 1 0 - CK0Q3UDG8CEKKAE7RUKPGCT1DVSSH8LL NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 900 IN RRSIG NSEC3 13 2 900 20260615002617 20260607231617 27677 com. 0RyZhGOrdThy3iJhbVqUAWQZT/9aqS1DyOoXobpP3hHbsNjfTebNKpbd PL5oulukqLzYS8yKRblopbXgQqn2Yw==
FUOV0O7294OB4JDT3EPLSMFOL9C3C4U0.com. 900 IN NSEC3 1 1 0 - FUOVGFN8SUDNBP247SLT394CISB7QH30 NS DS RRSIG
FUOV0O7294OB4JDT3EPLSMFOL9C3C4U0.com. 900 IN RRSIG NSEC3 13 2 900 20260613004115 20260605233115 27677 com. mg23BCL6+Z0ueDDVefU42wGWlS73Y7q2wdbZj9D334/mLTFtaeLrz7Lx qYiK7/YS6xUKPKu6hpOCr4ckONs4cw==
;; Received 761 bytes from 192.5.6.30#53(a.gtld-servers.net) in 382 ms

// 这一部分就是权威 DNS 返回的 A 记录:
www.markjour.com.   600 IN  A   121.42.82.115
;; Received 61 bytes from 120.76.107.52#53(dns9.hichina.com) in 27 ms
如果你有魔法,你可以看到一个评论框~