优化实战 第 02 期 - DNS域名解析详细过程以及优化

3,348 阅读3分钟

域名和IP地址

  • 域名

    域名和 IP 地址一样都是用来做网络地址标识的,相对于 IP 来说域名更便于用户记忆

  • IP地址

    互联网协议地址(Internet Protocol Address),是 IP 协议提供的统一地址格式

    计算机之间想要实现相互通信,就必须要有唯一的网络地址标识,即 IP 地址。每台联网计算机都依靠 IP 地址来互相区分、相互联系

  • 域名和IP地址的关系

    在互联网上,域名IP 地址之间是 一对一多对一 的关系,也就是说一个 IP 地址可以对应多个域名,但一个域名只能有一个 IP 地址

  • 总结

    IP 地址是面向网络的,而域名则是面向用户的

    计算机之间网络通信只认 IP 地址,所以域名和 IP 地址之间的转换工作被称之为 域名解析

    域名解析由专门的域名解析服务器来完成,即 DNS 服务器

DNS域名解析过程

  • 过程描述

    当用户通过域名访问一个页面时,浏览器会先检查 DNS 缓存中有没有访问域名对应的解析过的 IP 地址

    如果有,则解析结束,建立 TCP 连接

    如果没有,浏览器会检查操作系统的 hosts 文件,从中寻找对应的 IP 地址

    如果有,则解析结束,建立 TCP 连接

    如果没有,操作系统会向本地域名服务器请求解析(这台服务器一般在所在城市的某个角落,距离比较近且性能相对较好)

    如果有,则解析结束,建立 TCP 连接

    如果没有,见下图所示(文字描述省略)

  • 过程图示

    Name Server 服务器指的是访问的网站域名提供商的服务器

    dns.png

    递归查询 主机向本地域名服务器的查询

    迭代查询 本地域名服务器向根域名服务器的查询

DNS解析优化方案

  • HTTP页面自动解析

    在页面加载的过程当中,浏览器会自动将超链接 href 属性中的域名解析为 IP 地址,但为了确保安全性,HTTPS 页面中已不再允许自动解析

  • HTTPS页面自动解析

    通过HTML标签方式

    <meta http-equiv="x-dns-prefetch-control" content="on">
    

    通过设置响应头的方式

    ctx.set('X-DNS-Prefetch-Control', 'on')
    

    on 表示开启解析,off 表示关闭解析

  • 手动解析

    <link rel="dns-prefetch" href="//file.cdn.com">
    

    开启指定域名的预解析功能,多用于 优化 CDN 资源推荐在项目中使用。最佳使用位置如下

    <meta charset="utf-8">
    <link rel="dns-prefetch" href="//file.cdn.com">
    
  • 优化总结

    DNS 请求消耗的带宽非常小,但延迟有点高,尤其是在手机网络上尤为明显,通过 DNS 预解析可以明显的减少一些延迟

    可以减少用户点击链接时的等待时间,从而提升页面的响应速度

拓展知识