以用户在浏览器输入www.vhdns.cn为例,我们详细说明一下实际域名查询过程:
1. 用户输入www.vhdns.cn,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns);
2. local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;
3. 根服务器返回cn地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复;
4. local dns查询cn。cn返回vhdns.cn地址;
5. local dns查询vhdns.cn,vhdns.cn返回www.vhdns.cn对应记录结果。

理论上讲域名查询有两种方式:
迭代查询 A问B一个问题,B不知道答案说你可以问C,然后A再去问C,C推荐D,然后A继续问D,如此迭代…
递归查询 A问B一个问题,B问C,C问D… 然后D告诉C,C告诉B,B告诉A
上述过程中从resolver到递归DNS再到根的查询过程为递归查询,递归DNS到根、到cn、到vhdns.cn的过程为迭代查询。
注意,递归查询需要从系统层面来看,很难单纯的说一台DNS实现了递归查询。 |