- 论坛徽章:
- 0
|
假如域名example.com
在com.域里面授权给了ns1.a.com 和 ns2.a.com
在example.com里面有多授权到了ns3.a.com和ns4.a.com
ns3.a.com和ns4.a.com应该叫做stealth server.
我的疑问是,在什么情况下,一个公网里面的idc 提供的dns服务器会去ns3.a.com和ns4.a.com查询?
以前我也有个这样的问题,但是都不是理解的很透彻。
因为据说不同的bind版本的查询算法是不一样的。
我又看了一下rfc1034里面提到的查询算法。
简单的抄录一下
==========
1.是否有本地缓存,有就返回本地缓存内的内容(windows做法)
2.寻找一组最好的dns服务器来查询
3.给他们发送请求直到收到一个应答
4.分析请求,根据不同的情况做出判断:
a.如果应答是正确,缓存这个应答,返回结果给查询的客户端
b.如果应答保护一个更好(better)的授权信息,缓存这个授权信息,跳转到第2步
c.如果应答是一个cname,但是不符合查询,把SNAME的内容改为应答里面CNAME的内容,跳转到第一步
d.如果得到一个服务器错,或者奇怪的字符回应,从SLIST里面删除这个dns服务器,跳转到第3步
===============
我的理解。
假如一个刚启动的cache name server. 收到一个www.example.com的请求
因为现在cache name server缓存里面什么记录都没有,所以
第一步,从/etc/resolv.conf 文件里面读入nameserver的地址加到SLIST(一组最好的dns服务器列表)
第二步,给SLIST里面的服务器发送一个www.example.com IN A的查询。
第三步,服务器返回根域名的授权信息和dns服务器地址(为了说明简单,假设/etc/resolv.conf里面的dns不支持递归查询)
第四步,把根域名的dns服务器地址加到SLIST,重新发送www.example.com IN A的请求
第五步,服务器返回com.的dns授权和dns地址
第六步,把 .com域的dns服务器地址加到SLIST, 重新发送www.example.com IN A请求
第七步,服务器返回example.com域的dns授权和dns地址(ns1.a.com;ns2.com)
第八步,把exampl.com的dns服务器地址加到SLIST,发送example.com IN A请求,得到答案.
写到这里,dns查询算法似乎不会去从example.com的dns服务器里面主动查询example.com的授权信息。
但是突然有个想法就是,会不会是因为一个dns应答的附加信息会让stealth server的信息被传递出来。 |
|