【从浏览器地址栏输入 url 到请求返回的过程】——2.DNS 域名解析

何为DNS?

DNS 即域名系统,全称是 Domain Name System,因特网上作为域名和IP地址互相映射的一个分布式数据库
当我们在浏览器输入一个 URL 地址时,浏览器要向这个 URL 的主机名对应的服务器发送请求,就得知道服务器的 IP,对于浏览器来说,DNS 的作用就是将主机名转换成 IP 地址(正向解析), 或者根据IP地址查询对应的主机域名(反向解析)

浏览器如何通过域名去查询 URL 对应的 IP 呢?(DNS解析的过程)

一般来说会是这样的一个顺序:

1)查找本地硬盘的host文件,如果命中直接使用对应的ip地址

2)如果host文件中找不到,浏览器会发出一个DNS请求到本地DNS服务器。本地DNS服务器一般是指网络接入服务器的提供商(比如电信,移动)

3)DNS请求到达本地DNS服务器之后,本地DNS服务器会首先查询他的缓存记录,如果缓存中有这条记录就直接返回结果,此过程是递归的方式,如果查找失败,本地DNS服务器还要向根DNS服务器进行查询

4)根DNS服务器不会返回具体域名和IP地址的对应关系,而是告诉本地DNS服务器,可以向域服务器上继续查询,并给出域服务器的地址,这是个迭代的过程

5)本地DNS服务器继续向域服务器发起请求,例如请求的对象是.com域服务器。.com域服务器收到请求后,也不会直接返回域名和IP地址的对应关系,而是告诉本地NDS服务器,你的域名的解析服务器的地址

6)最后,本地DNS服务器向域名解析服务器发出请求,才能收到域名和IP地址的对应关系,本地DNS服务器不仅要将IP地址返回给浏览器,还要把这个对应关系保存在缓存中.

例如:主机m.n.com 想要获取a.b.com的IP 地址,图示:
在这里插入图片描述

DNS服务器层级

在这里插入图片描述

  • 根DNS服务器
    首先我们要明确根域名是什么,比如 www.baidu.com,有些同学可能会误以为 com 就是根域名,其实 com 是顶级域名,www.baidu.com 的完整写法是 www.baidu.com.,最后的这个 . 就是根域名。
    根 DNS 服务器的作用是什么呢?就是管理它的下一级,也就是顶级域 DNS 服务器。通过询问根 DNS 服务器,我们可以知道一个主机名对应的顶级域 DNS 服务器的 IP 是多少,从而继续向顶级域 DNS 服务器发起查询请求。

  • 顶级域 DNS 服务器
    除了前面提到的 com 是顶级域名,常见的顶级域名还有 cn、org、edu 等。顶级域 DNS 服务器,也就是 TLD,提供了它的下一级,也就是权威 DNS 服务器的 IP 地址。

  • 权威 DNS 服务器
    权威 DNS 服务器可以返回主机 - IP 的最终映射

DNS 劫持

现象: 反问a网站DNS应该返回IP地址为1.2.3.4,但却返回了5.6.7.8,浏览器呈现了b页面。
在这里插入图片描述

DNS-Prefetch是什么,有什么用?

DNS解析速度是造成页面延迟加载的最大的原因。
DNS Prefetch,即DNS预解析技术,是前端优化的一部分。一般来说,在前端优化中与 DNS 有关的有两点: 一个是减少DNS的请求次数,另一个就是进行DNS预获取 。
DNS Prefetch 是根据浏览器定义的规则,提前解析之后可能会用到的域名,使解析结果缓存到系统缓存中,缩短DNS解析时间,来提高网站的访问速度,减少用户等待时间,提高用户体验
现代浏览器在 DNS Prefetch 上做了两项工作:

  • html 源码下载完成后,会解析页面的包含链接的标签,提前查询对应的域名

  • 对于访问过的页面,浏览器会记录一份域名列表,当再次打开时,会在 html 下载的同时去解析 DNS

DNS-Prefetch的分类

  • 隐式解析:默认情况下浏览器会对页面中和当前域名(正在浏览网页的域名)不在同一个域的域名进行预获取,并且缓存结果,这就是隐式的DNS Prefetch。

  • 显式解析:想对页面中没有出现的域进行预获取,那么就要使用显示的DNS Prefetch了,也就是使用link标签

  • <link rel="dns-prefetch" href="//baidu.com" >这个标签回让浏览器进行“baidu.com”的解析

  • 希望在HTTPS页面开启隐式的DNS Prefetch【自动解析】功能时,添加如下标记
    <meta http-equiv="x-dns-prefetch-control" content="on">

  • 希望在HTTPS页面关闭隐式的DNS Prefetch【自动解析】功能时,添加如下标记
    <meta http-equiv="x-dns-prefetch-control" content="off">

其他

  • chrome使用8个线程专门做DNS Prefetching,而且chrome本身不做dns记录的cache,是直接从操作系统读dns。所以直接修改系统的dns记录或者host是可以直接影响chrome
  • 浏览器会对a标签的href自动启用DNS Prefetching,所以a标签里包含的域名不需要在head中手动设置link。但是在HTTPS下面不起作用,需要meta来强制开启功能。这个限制的原因是防止窃听者根据DNS Prefetching推断显示在HTTPS页面中超链接的主机名。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值