递归DNS到底是怎么递归的?原理是什么
要理解递归DNS,首先得搞清楚DNS这个“系统”里都有谁。想象一下,你要找一个住在北京的人,但你只知道他的名字,不知道具体地址。你会怎么做?你可能会先问居委会,居委会不知道,就帮你问街道办,街道办不知道,再帮你问区里,区里再问市里……一层层往上问,直到找到答案。
DNS系统就是这个逻辑。它由四个角色组成:
1. 递归解析器——这就是我们说的“递归DNS”。它是你的代理人,替你跑腿。你把域名丢给它,它负责帮你问到底,然后把最终答案交给你。绝大多数普通用户用的DNS,都是递归DNS。你手机里设置的114.114.114.114、8.8.8.8,都是递归DNS。
2. 根域名服务器——DNS世界的“总台”。它不知道任何具体域名的IP,但它知道所有顶级域(如.com、.cn)的权威DNS在哪里。
3. 顶级域域名服务器——负责某个后缀的“分局”。比如.com的TLD服务器,它知道所有.com域名的权威DNS在哪里。
4. 权威域名服务器——最终回答问题的“当事人”。它是域名的真正主人,只有它能告诉你baidu.com的IP地址到底是什么。
这四个角色层层递进,形成了一个从“总台”到“当事人”的查询链条。而递归DNS,就是替你走完整个链条的那个人。
递归到底是怎么“递归”的?一个完整的寻址之旅
咱们跟着递归DNS走一遍完整的查询流程,你就明白“递归”是什么意思了。
假设你第一次访问www.baidu.com,本地缓存里什么都没有。你电脑向递归DNS(比如114.114.114.114)发了一个请求:“www.baidu.com的IP是多少?”
递归DNS接到任务后,开始了它的“跑腿”之旅:
第一站:根域名服务器
递归DNS问根:“www.baidu.com在哪里?”根服务器说:“我不知道,但.com归那个TLD服务器管,这是它的地址。”
第二站:顶级域服务器
递归DNS找到.com的TLD服务器,问:“baidu.com在哪里?”TLD服务器说:“baidu.com的权威DNS是ns.baidu.com,这是它的IP。”
第三站:权威域名服务器
递归DNS找到ns.baidu.com,问:“www.baidu.com的IP是多少?”权威DNS查了一下自己的记录,说:“www.baidu.com的IP是110.242.68.66。”
第四站:回家
递归DNS拿到了答案,把它返回给你的电脑。同时,它把这条记录缓存下来,下次有人再问www.baidu.com,它就不用再跑一趟了。
整个过程,递归DNS问了三个不同的服务器,最后把答案带回来交给你。这就是“递归”——它替你完成了从根到权威的全部查询过程,你只需要问一次,它给你最终答案。
与之相对的是“迭代查询”。在迭代模式下,根服务器不会帮你问TLD,而是告诉你“去问TLD”,然后你自己再去问TLD,TLD再告诉你“去问权威”,你自己再去问权威。整个过程你自己跑腿,问好几次才能拿到答案。递归DNS之所以叫“递归”,就是因为它把这一连串的“迭代”给封装起来了,对外只提供一个“一次请求、一次响应”的接口。
递归DNS的“秘密武器”:缓存是它的命根子
如果没有缓存,递归DNS每接到一个请求,都要从头跑一遍:根→TLD→权威。全球几十亿网民,每天几千亿次查询,根本扛不住。
缓存就是递归DNS的命根子。
缓存在哪几层?
递归DNS本身有内存缓存。你查完www.baidu.com后,它会把这个结果存一段时间(由权威DNS指定的TTL值决定,通常是几分钟到几小时)。
你的操作系统也有缓存。递归DNS返回答案后,操作系统会再缓存一份。
浏览器也有自己的DNS缓存。Chrome里输个chrome://net-internals/#dns就能看到。
这三层缓存构成了一个“缓存金字塔”。越往上(离用户越近),容量越小,速度越快;越往下,容量越大,但相对慢一些。浏览器缓存命中,最快;操作系统缓存命中,次之;递归DNS缓存命中,再次之;都没命中,才走完整查询。
TTL是个双刃剑
TTL是权威DNS告诉递归DNS的:“这个结果你可以缓存多少秒。”
TTL太短,比如60秒,递归DNS频繁过期,每次都要重新查询,权威DNS压力大,用户等待时间长。
TTL太长,比如24小时,万一你换了服务器IP,用户要等一天才能访问到新IP。
有经验的运维会在两者之间找平衡。核心域名(比如主站)TTL设置短一点(300-600秒),方便快速切换;静态资源域名(比如CDN)TTL设置长一点(3600秒以上),减轻权威DNS压力。
递归DNS的“高阶玩法”:它能做的事情远不止解析
很多人以为递归DNS就是个“域名翻译器”,其实远不止如此。
1. 智能分流
一些递归DNS可以根据来源IP,返回不同的结果。比如你在北京,它把www.example.com解析到北京机房的IP;你在上海,解析到上海机房的IP。这就是“智能DNS”的基础,很多CDN厂商用的就是这个原理。
2. 恶意域名拦截
企业级递归DNS内置了恶意域名黑名单。用户访问钓鱼网站、矿池域名时,递归DNS直接返回一个警告页面,而不是真正的IP。这种在DNS层面的安全防护,比在终端装杀毒软件更高效,因为它在第一道关卡就把恶意流量拦住了。
3. 内容过滤
家庭路由器上,很多家长控制功能就是靠递归DNS实现的。设置一个过滤型的递归DNS,孩子访问不良网站时,DNS直接返回“无法访问”。
4. 流量调度
大型互联网公司会自建递归DNS集群,专门用来解析自己的域名。这样既能精确控制流量调度(比如根据用户IP返回最近的机房),又能避免依赖第三方递归DNS带来的不稳定因素。
递归DNS的“坑”:你以为它帮你,它可能坑你
递归DNS不是万能的,有些坑你可能从来没注意过。
坑一:缓存污染
前面说了缓存是命根子,但缓存也会出问题。比如一个域名的权威DNS出了故障,返回了错误响应,递归DNS把错误响应缓存了。等权威DNS恢复后,用户还得等TTL过期才能正常访问。这就是“缓存污染”。
坑二:负载均衡失效
很多大型网站用DNS做负载均衡,一个域名对应多个IP,每次解析返回不同的IP。但如果递归DNS的缓存太“激进”,把某个IP缓存了很长时间,负载均衡就失效了,所有流量都打到一个服务器上。
坑三:TTL不尊重
有些递归DNS不遵守权威DNS返回的TTL,强行用自己的策略覆盖。本来权威说“缓存300秒”,递归说“我给你缓存3600秒”。好处是解析快了,坏处是域名改了IP,用户一小时后才生效。
坑四:EDNS Client Subnet的隐私风险
为了改善CDN调度,一些递归DNS会在请求里带上用户的IP段(EDNS Client Subnet),让权威DNS知道用户的大概位置,从而返回最近的IP。但这也意味着权威DNS能看到用户的地理位置信息,隐私又少了一层。
递归DNS的原理是什么?其实没那么复杂。它就是一个替用户跑腿的代理人,帮你从根问到TLD,从TLD问到权威,拿到答案后带回来给你,顺便缓存一份,下次再问就不用跑那么远了。但就是这么一个简单的角色,支撑起了整个互联网的“寻址系统”。没有递归DNS,你记不住那一串串IP地址;没有递归DNS,CDN不知道怎么把流量调度到最近的节点;没有递归DNS,企业网络安全的第一道防线就少了一大块。
CN
EN