DNS:域名系统,互联网上作为域名和ip地址相互映射的分布式数据库
DNS域名解析:通过域名最终得到该域名对应的ip地址(主机地址)的过程叫做域名解析
基本概念
1、根域
www.baidu.com. 最后的一个点,根域服务器具有13个ip地址,借助任播技术在全球范围内设立这些ip的镜像站点
2、域的划分
根域下来为顶级域或者一级域,根据.com,.net行业性质划分或者根据.cn,.jp国家划分
每个域都会有域名服务器
baidu.com即为一个顶级域名,www.baidu.com为baidu.com域里一个叫做www的主机。
一级域之后还有二级域,三级域。比如a.www.baidu.com,在这个网址中,www.baidu.com变成了一个二级域而不是一台主机,主机名时a。
3、域名服务器
能够提供域名解析的服务器
域名解析过程:
1、一台计算机通过ISP接入互联网,ISP会分配给计算机一个DNS服务器(非权威服务器,相当于代理的dns服务器,用来迭代权威服务器返回的应答,把最终查到的ip返回)
2、在浏览器中输入域名,搜索浏览器缓存,查看本地hosts文件是否有这个域名的对应规则,没有则发起域名解析。
3、首先发起DNS请求到本地DNS服务器,本地DNS服务器查找缓存记录,若有直接返回,此时拿到的ip地址会被标记为非权威服务器的应答。
4、若没有则从BIND配置文件hosts中读取根域的地址,向其中一台发送请求(UDP协议)。
5、根域服务器收到请求后,就知道它是哪个顶级域名下(如com.),就会发送对应域下的NS记录给本地DNS服务器。(13台主机名和ip)
6、本地DNS服务器向其中一台发起请求,根域服务器返回一级域的NS,返回给本地DNS服务器
7、本地DNS服务器再向对应的域名的解析服务器发出请求,如果没有二、三级域,就会收到一个域名和ip的对应关系。
8、若还有二、三级域则依次向下查找,直到查到主机(www),返回ip给本地DNS服务器。
9、本地DNS服务器将ip地址返回给客户端,并保存在高速缓存中,以备下次别的用户查询时,可以直接返回结果,加快网络访问。
优化DNS解析:
减少DNS解析时间和次数是个很好的优化方式
DNS Prefetching是具有此属性的域名不需要用户点击链接就在后台解析,而域名解析和内容载入是串行的网络操作,所以这个方式能减少用户的等待时间,提升用户体验
1、前端dns预解析
方法:
使用meta信息告诉浏览器当前页面要做DNS预解析:<meta http-equiv="x-dns-prefetch-control" content="on" >
在页面header中使用link标签来强制对DNS预解析: <link rel="dns-prefetch" href="http://bdimg.share.baidu.com" />
多页面重复DNS预解析会增加重复DNS查询次数
2、域名解析的TTL时间设置长一点,但可能导致精度不准
3、DNS域名解析拆分为多个域名增加并行下载量
将js,css,image分放在不同域名下,浏览器可以同时向这些域名发送DNS域名解析请求,一定程度上减少DNS时间
实际应用中使用全站CDN或静态文件CDN,即可以实现上诉效果
4、选择可靠的DNS服务,假如网站拆了多个二级域名,可以使用CNAME(别名),设置好TTL(time-to-live)时间。以保证第一次访问可以从运营商的DNS缓存中拿到