什么是 DNS
DNS 域名系统是一种适用于 TCP/IP 的分布式数据库, 提供的功能包括:
主机名字和 IP 地址之间的转化 有关电子邮件的选路信息
另外 DNS 还规定了 DNS 服务器之间交换信息的报文格式, 这个报文在应用层, 基于 UDP 或者 TCP
DNS 查询
如果计算机内置 DNS 无法解析域名, 则会询问上级 DNS 服务器, 逐级向上传递信息, 直到到达顶级服务器 -- 根服务器, 它直到向哪个服务器请求解析, 得到 IP 地址后, 原路返回请求计算机.
DNS 的存储结构
DNS 查询得到 IP
如果输入的是域名, 需要进行 dns 解析成 IP, 大致流程:<喎"/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPrLp0a93d3cuMTYzLmNvbbXERE5Tx+vH87W9tO+xvrXYRE5Tt/7O8cb31q6686Ossb612EROU7f+zvHG97vhytfPyLLp0a/L/LXEu7q05rzHwryjrMjnufu7urTm1tDT0LTLzPW8x8K8o6y+zb/J0tTWsb3Tt7W72L3hufuho8jnufvDu9PQo6yxvrXYRE5Tt/7O8cb3u7nSqs/yRE5TuPm3/s7xxve9+NDQsunRr6GjPC9wPg0KPHA+uPlETlO3/s7xxvfDu9PQvMfCvL7fzOW1xNPyw/u6zUlQtdjWt7XEttTTprnYz7WjrLb4yse45svfsb612EROU7f+zvHG96OsxOO/ydLUtb3T8rf+zvHG98nPyKW8zND4sunRr6OssqK4+LP20/K3/s7xxve1xLXY1rehozwvcD4NCjxwPrG+tdhETlO3/s7xxve8zND4z/LT8rf+zvHG97eis/bH68fzo6zU2tXiuPbA/dfT1tCjrMfrx/O1xLbUz/PKxy5jb23T8rf+zvHG96GjLmNvbdPyt/7O8cb3ytW1vcfrx/PWrrrzo6zSsrK7u+HWsb3Tt7W72NPyw/u6zUlQtdjWt7XEttTTprnYz7WjrLb4yse45svfsb612EROU7f+zvHG96OsxOPT8sP7tcS94s72t/7O8cb3o6i8tMeww+bLtbW9tcTIqM/e0/LD+7f+zvHG96OptcS12Na3oaM8L3A+DQo8cD7X7rrzo6yxvrXYRE5Tt/7O8cb3z/LT8sP7tcS94s72t/7O8cb3t6Kz9sfrx/OjrNXiyrG+zcTcytW1vdK7uPbT8sP7us1JULXY1re21NOmudjPtaOssb612EROU7f+zvHG97K7vfbSqrDRSVC12Na3t7W72Lj408O7p7XnxNSjrLu50qqw0dXiuPa21NOmudjPtbGjtObU2ru6tObW0KOs0tSxuM/CtM6x8LXE08O7p7Lp0a/KsaOsv8nS1NaxvdO3tbvYveG5+6OsvNO/7M34wue3w87KoaM8L3A+DQo8cD48aW1nIGFsdD0="这里写图片描述" src="/uploadfile/Collfiles/20180802/20180802093547472.jpg" title="\" />
高速缓存
为了提高 DNS 查询效率, 减轻服务器负荷, 在域名服务器和本机上都广泛的使用了高速缓存. 高速缓存用来存放最近查询过的域名以及从何处获得域名映射的的记录.
* 在不久前已经查询或 www.163.com, 那么本地域名服务器就可以直接把自己在告诉缓存中的结果取出来返回客户本机.
如果本地域名服务器缓存没有对用 IP 地址, 而缓存了顶级域名服务器地址, 就可以跳过根域名服务器直接向顶级域名服务器发出请求, 减少报文数量和根域名服务器的符合.
每项都有一个缓存时间. 权限域名服务器回答一个查询是, 在响应中都指明绑定有效存在的时间值. 增加此时间可减少网络开销, 而减少此时间可提高域名转化的准确性.
处理本地域名服务器, 本机也有缓存. 它在启动时从本地域名服务器下载名字和地址的全部数据库, 维护存放自己最近使用的域名的高速缓存. 查询域名时, 在本机 host 文件和缓存中找不到时就会请求本地域名服务器.
dns-prefetch
需要知道 dns 解析是很耗时的, 因此如果解析域名过多, 会让首屏加载变得过慢, 可以考虑 dns-prefetch 优化.
DNS Prefetch, 即 DNS 预获取, 是前端优化的一部分. 一般来说, 在前端优化中与 DNS 有关的有两点: 一个是减少 DNS 的请求次数, 另一个就是进行 DNS 预获取 .
DNS 作为互联网的基础协议, 其解析的速度似乎很容易被网站优化人员忽视. 现在大多数新浏览器已经针对 DNS 解析进行了优化, 典型的一次 DNS 解析需要耗费 20-120 毫秒, 减少 DNS 解析时间和次数是个很好的优化方式. DNS Prefetching 是让具有此属性的域名不需要用户点击链接就在后台解析, 而域名解析和内容载入是串行的网络操作, 所以这个方式能 减少用户的等待时间, 提升用户体验 .
默认情况下浏览器会对页面中和当前域名 (正在浏览网页的域名) 不在同一个域的域名进行预获取, 并且缓存结果, 这就是隐式的 DNS Prefetch. 如果想对页面中没有出现的域进行预获取, 那么就要使用显示的 DNS Prefetch 了.
目前大多数浏览器已经支持此属性, 支持版本如下:
- - Safari: 5+
- - Chrome: All
- - Firefox: 3.5+
- - Opera: Unknown
- - IE: 9+ (called "Pre-resolution" on blogs.msdn.com)
其中 Chrome 和 Firefox 3.5+ 内置了 DNS Prefetching 技术并对 DNS 预解析做了相应优化设置. 所以 即使不设置此属性, Chrome 和 Firefox 3.5+ 也能自动在后台进行预解析 .
目前很多大型站点也应用了这一优化, 例如:
DNS Prefetch 应该尽量的放在网页的前面, 推荐放在 后面. 具体使用方法如下:
需要注意的是, 虽然使用 DNS Prefetch 能够加快页面的解析速度, 但是也不能滥用, 因为有开发者指出 禁用 DNS 预读取能节省每月 100 亿的 DNS 查询 .
来源: https://www.2cto.com/kf/201808/766207.html