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