网络 DNS 原理

157 阅读3分钟
  • DNS(Domain Name Server)用来返回某个域名对应主机的ip的服务器

    • 根DNS (.)

      • 只负责提供各类顶级DNS服务器ip地址. 是域名解析的入口.
    • 顶级DNS (TLD, Top Level Domain)

      • 负责提供二级域名的DNS服务器IP地址.

      • 每一个顶级域名都有对应的DNS的服务器,

        • 它们通常由专门的机构公司来维护. 比如.comVerisign Global Registry Services公司维护,.eduEducause公司维护.
        • 它们各自提供自家域名下的子域名(二级域名)的名称服务. 通常我们所说的"购买域名"就是向这些公司的数据库注册一条记录.
    • 权威DNS

      • 负责提供三级域名对应的主机IP地址。由域名购买者提供,大多数域名注册公司同时提供了权威DNS托管服务。
  • 获取域名对应的服务器ip的过程:

    • 1)浏览器缓存

    •   当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);

    • 2)系统Hosts

    •   当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件是否有该域名对应IP;

    • 3)本地域名服务器

    •   当在用户客服端查找不到域名对应IP地址,则将进入本地DNS缓存中进行查询。通常这个本地域名DNS会配置成运营商(ISP)指定的DNS,但也不是必须的。

    • 4)迭代查询

    •   当以上均未完成,则会由本地DNS开始进行迭代查询:

    • 5)保存结果至缓存

      •   本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接
    • 向根域名服务器查询,得到顶级域名服务器的IP地址
    • 向顶级域名服务器查询,得到权威域名服务器的IP地址
    • 向权威域名服务器查询,最终得到域名的ip
    • DNS预解析

    • DNS Prefetching 是让具有此属性的域名在加载网页时(不需要用户点击链接)就在后台解析

      • 域名解析和内容载入是串行的网络操作,所以这个方式能减少用户的等待时间,提升用户体验
    • 默认情况下浏览器会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,并且缓存结果,这就是隐式的 DNS Prefetch。如果想对页面中没有出现的域进行预获取,那么就要使用显示的 DNS Prefetch 了

      1. 用meta信息来告知浏览器, 当前页面要做DNS预解析:
      1. 在页面header中使用link标签来强制对DNS预解析:

      • 注:dns-prefetch需慎用,多页面重复DNS预解析会增加重复DNS查询次数。
      • PS:DNS预解析主要是用于网站前端页面优化,在SEO中的作用还未作验证,但作为增强用户体验的一部分rel="dns-prefetch"或许值得大家慢慢发现。