DNS

域名系统(Domain Name System)是互联网使用的命名系统,用来把便于人们使用的机器名字转换为IP地址。

域名服务器

根域名服务器

根域名服务器是最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管哪个本地域名服务器,如果要对互联网上任何一个域名进行解析,只要自己无法解析,就首先要求助根域名服务器。

根域名服务器并不直接把待查询的域名直接转换成IP地址。而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

顶级域名服务器

这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答。(可能是最后的结果,也可能是下一步应当找的域名服务器的IP地址)。

本地域名服务器

当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。

主机向本地域名服务器查询一般都采用递归查询。所谓递归查询就是:如果主机所查询的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份。向其他根域名服务器继续发出查询请求报文。而不是让该主机进行下一步查询。

本地域名服务器向根域名服务器的查询一般时采用迭代查询。迭代查询的特点是:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个域名服务器进行查询。然后让本地域名服务器进行后续查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再去向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所有查询的IP地址,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询。本地域名服务器就这样迭代查询。

浏览器解析DNS的过程

  1. 浏览器首先会搜索自身的DNS缓存,(缓存时间较短,默认只有1min,而且只能存1000条缓存)
  2. 如果浏览器自身缓存没有找到对应的条目,就会搜索操作系统自身的DNS缓存。
  3. 如果在系统的DNS缓存也没有找到,就尝试读取host文件。看看这里面有没有该域名对应的IP地址。
  4. 如果host文件也没有找到对应的条目,浏览器就发起一个DNS调用,请求本地域名服务器来解析这个域名。
  5. 如果本地域名服务器没有命中,就直接向根域名服务器请求解析。
  6. 根域名服务器返回给本地域名服务器一个所查询的顶级域名服务器。
  7. 本地域名服务器再向上一步返回的顶级域名服务器发送请求。
  8. 接收请求的顶级域名服务器查找并返回此域名对应的Name Server域名服务器的地址。这个Name Server通常就是用户注册的域名服务器。
  9. Name Server域名服务器会查询存储的域名和IP的映射关系表。
  10. 返回该域名对应的IP
  11. 把解析结果返回给用户。

CDN解析过程

  1. 用户向本地域名服务器发起查询请求。
  2. 本地域名服务器迭代向根域名服务器查询,逐级迭代。rootDNS–>顶级DNS–>权限DNS
  3. 获得权限DNS之后,本地域名服务器向权限DNS发起域名解析请求。
  4. 权限DNS通常会将域名CNAME到另一个域名,这个域名最终会被指向CDN网络中的智能DNS负载均衡系统。
  5. DNS负载均衡系统通过一些智能算法,将最合适的CDN节点IP返回给本地域名服务器。
  6. 本地域名服务器将获得都IP地址返回给用户。
  7. 用户得到节点都IP地址后,向该节点发起访问请求。
  8. CDN节点返回请求文件,如果该节点中请求的文件不存在,就会再回到源站获取这个文件,然后返回给用户。

  转载请注明: TomoFur DNS

 上一篇
消除浮动 消除浮动
当父盒子没有定义高度,嵌套的盒子浮动之后,下边的元素的位置会发生错误。因此要消除由于浮动而产生的不利影响。 额外标签法在最后一个浮动元素后面添加标签 <div class='content'> <div class='c
2019-06-24
下一篇 
当promise遇到Event Loop 当promise遇到Event Loop
最近一段时间再复习Event loop的时候,遇到promise,以及混合着async/await!!!简直是要了我的小命。正当我一筹莫展之际,有幸读到一篇掘金社区上此类问题的文章:Eventloop不可怕,可怕的是遇上Promise顿时
2019-06-12
  目录