DNS解析流程

DNS是把域名解析成IP地址的过程,是非常重要的一个知识点,当输入URL时,第一步就是通过DNS将URL转换成IP,浏览器的过程如下:

1, 首先,浏览器会从自身的DNS缓存中去查找(chrome://net-internals/#dns),如果没有则进行下一步

2, 然后,浏览器会先从操作系统里的DNS缓存中找,windows系统中,命令行 ipconfig/displaydns 查看,linux上的NSCD缓存服务;;;如果没有则进行下一步

3, 从计算机host文件里找,这个我们经常配置吧;;;如果没有则进行下一步

4, 请求本地域名服务器(可以认为是你的网络接入服务器商提供,比如中国电信,中国移动,阿里云等域名供应商),如果该服务器有缓存,则直接返回,若没有,则下一步。。。一般80%到这里就可以了(比如你申请一个域名,去阿里云,那么你肯定会写上域名所指向的IP啊)。

5, 若上一步都没命中,那么就需要向根域名服务器迭代请求了,见下面:

根域名服务器和顶级域名服务器很少,全世界大概只有是十几台

正常域名例如test.baidu.com

  1. 在顶级服务器中查找,顶级服务器返回com顶级域名服务器的ip地址
  2. 向com顶级域名服务器请求,服务器返回baidu所在的ip地址
  3. 向baidu域名服务器请求,他返回真正的ip地址给浏览器

迭代查询的好处是分层架构,方便管理

image-20220305184725430

前端DNS优化

1.减少dns查询的次数:减少链接不同的domain的请求的数量

2.dns预解析:当加载一个html时,会自动解析其中a标签所包含的链接,在真的点击时就不需要进行dns解析了

注意,在HTTPS页面中,不会自动预解析,所以需要手动添加

<link rel="dns-prefetch" href="//img.alicdn.com">

上面是添加单条的解析,也可以开启自动对所有链接的解析

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

一般在站点的入口进行手动解析即可,大部分的域名都会在首页进行体现

CDN

CDN的全称是 Content Delivery Network ,即内容分发网络。其目的是通过在现有的Internet流程中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘” ,使用户可以就近取得所需的内容,解决 Internet 网络拥塞状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因,解决用户访问网站的响应速度慢的根本原因。

区分两个概念

A记录

Address记录,是域名和Ip之间的指向关系

  • 域名 www.xx.com → 111.111.111.111
  • 主机名 DD → 222.222.222.222

CNAME

CNAME记录可以看做别名记录

比如A记录为:

www.credit.com → 111.111.111.111

那么可能有多个CNAME记录

www.100fen.com → www.credit.com

www.baifen.com → www.credit.com

CNAME就是记录主域名的小名,一个网址可以有多个CNAME

CDN优化的原理

引入了CDN之后,在进行域名解析时,不会一定要获取目标服务器的ip地址进行访问,而是通过一个智能的dns算法,将最合适的缓存服务器ip地址发送给浏览器,判断的依据包括:

根据用户IP地址,判断哪一台服务器距离用户最近;

根据用户所请求的URL中携带的内容名称,判断哪一台服务器上有用户所需内容;

查询各个服务器的负载情况,判断哪一台服务器的负载较小。

总之,引入了cdn之后,访问服务的内容不一定要访问原服务器,而是可以通过CDN的负载均衡设备,找到目前最合适的服务器提供服务,提高了访问的性能