查询流程
DNS 是一个分布式系统,绝大多数的 DNS-Server 端的数据库不会拥有所有的域名记录,当客户端向一个 DNS-Server 端查询域名但该 DNS-Server 端上却没有该域名的记录时,此时会有两种继续查询的方式:
递归查询
由 DNS-Server 向其他 DNS-Server 进行查询,将最终查询结果返回给 DNS-Client
迭代查询
DNS-Server 告知 DNS-Client 其他 DNS-Server 地址,客户端自行向其他 DNS-Server 进行查询;
关于 CNAME 解析
是否 DNS-Client 会发送两次请求?
domain name system – Do CNAME records result in a second DNS lookup?
根据 DNS 抓包,只产生一次请求,我们猜测 CNAME 解析发生在 DNS-Server(而非 DNS-Client):
# dig k4nz.com @8.8.8.8 ... # tcpdump -n -i any host 8.8.8.8 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes 17:30:37.454799 IP 172.31.252.20.42318 > 8.8.8.8.53: 25416+ [1au] A? k4nz.com. (49) 17:30:37.692619 IP 8.8.8.8.53 > 172.31.252.20.42318: 25416 2/0/1 CNAME k4nz.host.d3rm.org., A 115.159.122.157 (85)