百度公共DNS之域名查询过程
以用户在浏览器输入www.iisp.com为例,我们详细说明一下实际域名查询过程:
1. 用户输入www.iisp.com,浏览器调用操作系统resolver发起域名查询,此处不考虑浏览器的域名缓存;resolver封装一个dns请求报文,并将其发给运营商分配的local dns地址(或者用户自己配置的公共dns);
2. local dns查询缓存,如果命中则返回响应结果;否则向根服务器发起查询;
3. 根服务器返回com地址。每一层级的DNS服务器都有缓存,实际都是先查缓存,没有缓存才返回下级域,此处不再重复;
4. local dns查询com。com返回iisp.com地址;
5. local dns查询baidu.com,baidu.com返回www.baidu.com对应记录结果。
理论上讲域名查询有两种方式:
迭代查询 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到根、到com、到baidu.com的过程为迭代查询。
注意,递归查询需要从系统层面来看,很难单纯的说一台DNS实现了递归查询。