DNS解析的介绍
DNS是什么
DNS 即 Domain Name System,字面上理解,其实就是一个域名的名字系统,用来管理域名:ip的对应关系。通俗来讲,就是一个键值对的列表。上面保存着 域名:ip。
举个例子 www.baidu.com 其实是www.baidu.com.最后面的.指的是根服务器root。所以它的结构组成就是:
主机名.二级域名.一级域名.顶级域名
反正就是从后往前一直类推域名的等级
DNS解析的流程
- 本地host文件
- 本地DNS缓存
- DNS服务器缓存
- DNS服务器递归查询
本地host文件
通过修改host文件,可以直接通过域名访问我们想要访问的机器
本地DNS缓存
如果host文件中并没有获取到ip地址,那么DNS就会查询本地的DNS缓存,如果有的话就直接返回对应的IP地址。如果没有那么会继续进行下面的流程
DNS服务器缓存
如果本地DNS缓存没有,那么我们会直接去到DNS缓存服务器重查询。而这个DNS服务器的地址,在我们链接了网络之后,本机电脑就会有该DNS服务器的地址。
然后DNS接收到了查询访问之后,查看自己的缓存中是否有这个域名对应的ip地址。如果没有,那么他会返回一个根服务器的ip地址然后让我们通过这个ip地址去查询
DNS服务器的递归查询
- 首先,我们会询问根域名,获取顶级域名(.com)的NS(name Server)和 A(address)。N是顶级域名的名字,A为该域名的ip
- 获取到了顶级域名的ip后,我们会向顶级域名获取二级域名同样的获取它的NS和A
- 此时我们再向baidu.com请求,www.baidu.com的NS和A
- 最终我们会向www.baidu.com请求,并且获取IP,然后返回给本机,并且本机会把他们缓存起来
补充 如果我们的访问的域名有一个别名,例如www.a.baidu.com。那么在第三步的时候,我们会查询到两个域名的ip分别是www.a.baidu.com 和 www.baidu.com。下面再说一下如果获取到的是前面的域名的情况
- 获取到www.a.baidu.com的ip的时候,我们会重新向.root发起请求
- 然后向.com发起请求,然后获取到baidu.com的ip
- 向a.baidu.com发起请求,然后获取到a.baidu.com的ip
- 最后向www.a.baidu.com请求,获取到ip然后返回给本地
最终,本机会获取到www.baidu.com和www.a.baidu.com的ip地址,并且缓存起来
最后附上一张网上文章看到的图,帮助理解
参考文章
https://juejin.cn/entry/6844903590918619144
https://juejin.cn/post/6844903752890056711
https://juejin.cn/post/684490375289005671