在DNS解析的过程中,有两种应答类型经常被人提到,一个是权威应答,一个是非权威应答。很多人看到这两个词都会有点懵,不知道它们到底差在哪里。接下来,国科云就针对这个问题做下简单介绍。
一、什么是权威应答?
权威应答,简单说就是直接从域名的权威服务器那里拿到的回答。
每个域名都有自己指定的权威DNS服务器。这些服务器就像是这个域名的户籍管理员,最清楚这个域名对应的IP地址是什么。当你的电脑或其他DNS服务器向这些权威服务器发起查询时,对方给出的回应就是权威应答。
权威应答有一个特点,就是它带着权威标志。这个标志告诉查询方:这个回答是我们这个域名的正经管理员给出的,信息是准确的,不是从别处抄来的。
比如,你要查example.com的IP地址。如果查询请求最终跑到了example.com的权威DNS服务器上,这台服务器直接告诉你IP地址是什么,那这个结果就是权威应答。因为回答的来源就是最原始的出处。
权威应答的信息中除了你要查询的域名和对应的IP地址外,还会附带一些辅助信息,比如这个域名的其他权威服务器地址,或者一些缓存相关的参数。这些信息帮助用户或服务器更好地处理后续的查询工作。
二、什么是非权威应答?
明白了什么是权威应答,就清楚什么是非权威应答了,简单来说非权威应答不是从域名的权威服务器直接拿到的,而是从各级的缓存里翻出来的。
网络上有很多DNS缓存服务器,比如ISP提供的DNS,或者公共DNS像114DNS、Google的8.8.8.8。这些服务器为了加快查询速度,会把之前查过的结果暂存下来。除了DNS服务器外,客户端浏览器、操作系统、路由器等地方也会有缓存结果。当有人再请求同样的域名时,系统就不会再去请求权威域名服务器,而是直接从各级缓存中拿出结果返回给查询者,这就大大节省了查询时间。
这个缓存返回的结果,就是非权威应答。因为它不是从真正的户籍管理员那里拿到的,只是从前面的查询记录里复制了一份。
非权威应答的好处是快。你不用进行全球迭代查询,绕远路去找权威服务器,身边的客户端浏览器、本地DNS服务器就能告诉你答案。
但非权威应答也有一个情况需要注意,就是它可能不是最新的数据。DNS记录有生存时间(TTL,Time to Live),这个值规定了缓存可以保留多久。如果TTL到了,缓存就过期了,缓存服务器会丢弃这条记录,下次查询时重新去问权威服务器。不过在TTL没到之前,缓存里的数据始终是旧记录。如果域名的管理员在这期间改了IP地址,缓存服务器返回的依然是老地址,用户就可能访问不了最新的服务。
三、权威应答和非权威应答的几个关键区别
信息来源不同:权威应答来自域名授权的官方权威服务器,是原始数据。非权威应答来自各级DNS缓存,是复制过来的二手数据。
权威标志不同:权威应答的响应包里AA标志是1,表示这是一条权威回答。非权威应答的AA标志是0,表示这不是权威回答。这个区别可以通过抓包工具看到。
数据实时度不同:权威应答给出的是域名当前的真实状态,非权威应答给出的可能是上一次查询时的状态,会有一定的滞后性,滞后的时间取决于TTL的设置。
查询路径不同:权威应答的查询路径更远,需要从客户端递归或迭代地一路问到权威服务器。非权威应答的查询路径很短,各级缓存可以直接返回,不需要继续往上查。
消耗资源不同:权威应答因为要一路问到源头,占用的时间和网络资源都更多。非权威应答从缓存拿数据,消耗少,响应时间也要短得多。
稳定性的差异:权威服务器可能因为故障或配置问题暂时无法请求,这时候就可能拿不到权威应答。但非权威应答存在于各级的缓存中,就算权威服务器不能用了,用户仍然能拿到结果。所以从可用性上讲,非权威应答稳定性反而更强一些,但这个稳的代价是数据可能不是最新的甚至是错误的。
四、实际使用中怎么区分这两种应答
普通用户上网的时候,其实感觉不到这两种应答的区别。浏览器只关心能不能拿到IP地址,不关心这个地址是权威来的还是缓存来的。但对网络管理员或者做运维工作的人来说,区分这两者就很重要了。
如果你刚改了一个域名的解析记录,但访问的时候发现没生效,这时候就要看看是权威应答还是非权威应答的问题。用dig命令查询,加上+norecurse参数,可以看到权威服务器的直接回答。如果加了+recurse参数,走的是递归查询,中间任何缓存都可能影响结果。用dig查的时候,响应里authoritative section会显示是不是权威应答。
还有一个常见的场景。你在排查故障,怀疑某个域名的解析有误。这时候应该尽量去查权威应答,跳过缓存,得到最真实的数据。如果只查缓存,拿到的是老数据,会干扰判断。
大型网站和CDN服务商对这两种应答的管理很细致。他们会把权威服务器的TTL设得比较短,比如几分钟,方便快速切换流量。同时把缓存层的策略做得比较激进,让大部分查询都能命中缓存,减轻权威服务器的压力。这样既保证了数据更新的及时性,又保证了查询的高效。
五、一些容易被忽略的细节
- 权威应答不一定是来自域名的顶级权威服务器。有时候中间经过了转发或者镜像,但只要能确认数据来源于权威区文件,并且AA标志被正确设置,就可以认为是权威应答。
- 非权威应答也不一定都是错的。大部分情况下,缓存里的数据跟权威数据是一致的,只要TTL还没过期,返回的结果就是准确的。只有管理员在TTL有效期内修改了记录,才会出现不一致的情况。
- 有些DNS服务器在返回缓存结果的时候,会附带一个权威服务器的信息片段,让应答看起来有点像权威应答。这时候要看AA标志来判断,不要只看内容。
- DNS的查询模式有两种,递归查询和迭代查询。递归查询由服务器替客户端完成整个查找过程,最终把结果返回给客户端。迭代查询是服务器告诉客户端下一站去哪问,客户端自己一路问下去。这两种查询模式下,都有可能拿到权威应答或非权威应答。关键是看应答的来源是不是权威服务器,跟查询模式关系不大。
- 对普通用户来说,不需要太纠结这两种应答的区别。上网正常就行。对做网络相关工作的人来说,弄清楚它们的差异,可以少走很多弯路。排查问题的时候,知道该查哪一层的答案,效率会高很多。
总的来说,权威应答和非权威应答在信息来源、权威性、时效性和查询开销上都有明确的差别。权威应答准确但查询成本高,非权威应答快速但可能滞后。两者相互配合,才能保障整个DNS体系的高效正常运转。理解这个区别,就能对DNS的工作机制有更清楚的认识。
推荐阅读:



