DNS工作原理
# 前言
博客一直在用Cloudflare CDN,在国内访问速度很慢,最近给博客套了个百度云加速CDN,在这个过程中学到了一点东西,特此记录一下。
# DNS
DNS是域名系统(Domain Name System)的缩写,最常见的用途是将域名映射为ip地址。
# 获取IP地址的过程
现在假设用户要访问blog.chgtaxihe.top
,此时解析请求会被发送到递归解析器中,并最终返回结果。
在解析过程中,递归解析器将执行以下操作(可通过dig +trace blog.chgtaxihe.top
查看)
- 解析器向DNS根域名服务器“.”查询
- 根域名服务器根据其记录的顶级域(TLD)DNS服务器作出响应。
- 然后,解析器向TLD域名服务器".top"发送请求
- 随后,TLD域名服务器告知解析器域名对应的域名服务器NS(
chgtaxihe.top
的域名服务器是elma.ns.cloudflare.com
) - 解析器向该NS发送请求
- 通常来说,NS会直接将对应的IP地址返回给解析器,但由于
blog.chgtaxihe.top
设置了NS记录(即该域名的解析委派给了其他服务器),因此elma.ns.cloudflare.com
将返回blog.chgtaxihe.top
对应的域名服务器ns1.alidns.com
- 解析器向
ns1.alidns.com
发送请求 ns1.alidns.com
中保存有blog.chgtaxihe.top
的CNAME记录,直接返回给解析器- 解析器继续解析该CNAME记录
# DNS查询的2种方式
- 递归查询:客户端要求服务器将记录返回客户端
- 迭代查询:客户端允许服务器返回能够给出的最佳应答。如果无对应记录,将返回对较低级别域名空间的DNS服务器引用,随后客户端继续向该引用查询
# DNS记录
常见的DNS记录如下
- A:地址记录,可将域名关联到对应的IP地址(IPv4)
- AAAA:IPv6地址记录,类似于A记录
- CNAME:规范名称记录,将一个别名关联到另一个域名,但不提供IP地址
- NS:域名服务器记录,用于确定那些服务器负责解析
# 如何让Cloudflare与百度云加速共存
由于某些特殊原因,如果在Cloudflare添加CNAME指向百度云加速服务器,会出现域名无法解析的情况:可以查询到CNAME记录,但无法获取IP地址。
通过dig
命令可以看到,当查询www.example.com
(被加速的域名)时,cloudflare返回了一条指向example.com
的NS记录,但由于该地址没有部署dns服务器,因此当我们nslookup
该地址时,会得到一条服务器超时的响应。
这也给我们提供了思路:Cloudflare
其他NS
(如阿里、腾讯) 百度云加速
上次更新: 2021/02/27, 23:03:51