1. DNS解析过程
1.1 DNS解析过程示意图
1.2 过程描述
- 检查本地浏览器是否有该域名与IP的映射关系,如果有,直接返回IP地址,如果没有则继续;
- 检查本地系统是否有该映射关系,如果有直接返回,如果没有则继续;
- 到本地域名服务器去查询,如果有直接返回,如果没有则继续;
- 本地域名服务器发送请求到根服务器,根服务器不会返回映射关系,只会告诉本地域名服务器顶级域名服务器的地址(.com服务器);
- 接着本地域名服务器到顶级域名服务器去查询,顶级域名服务器返回二级服务器(.google.com)的地址;
- 然后本地服务器继续向三级服务器发起请求,三级服务器如果返回映射关系,则本地服务器缓存该映射关系,同时返回发给该计算机,该计算机及客户端缓存映射关系;如果没有则报错。
2. 加入CDN之后的过程
2.1 CDN概述
CDN解决的问题是在网络中增加一层CACHE(缓存)层,将源站的资源分发到距离用户最近的网络"边缘"节点上,使用户就近访问内容,提高网站响应速度。当前cdn技术应用比较普遍。一些有实力的大公司,有自己的cdn研发团队,提供cdn技术支持。但是大多数公司都使用一些专门的CDN厂商提供的服务,如腾讯云、阿里云、蓝汛等。
2.2 过程描述
- DNS解析过程如果本地没有缓存,会根据1.2的过程访问到顶级服务器,顶级服务器查询到有做过CDN加速配置,cname到example.cdn.com,并返回负载均衡(GSLB)地址;
- 本地域名服务器向第一层GLSB发起请求,第一层GLSB会根据用户所在运营商,比如移动运营商,cname到yd.example.cdn.com域名地址;
- 本地域名服务器继续向第二层GLSB发起请求,第二层GLSB根据用户所在地理位置分析,返回CDN地址节点ip;
- 本地DNS服务器根据轮询方式从多个ip重选择一个ip进行访问;
3. 本地DNS缓存时间
3.1 系统缓存
3.1.1 windows系统
windows DNS缓存的默认值是 MaxCacheTTL,见这里,它的默认值是86400s,也就是一天。它是TTLu 这篇文章列出了一些浏览器的DNS缓存时间。
3.1.2 macOS系统
macOS 严格遵循DNS协议中的TTL
3.2 浏览器的DNS缓存
3.2.1 Google浏览器
为了加快访问速度,Google Chrome浏览器采用了预提DNS记录,在本地建立DNS缓存的方法,加快网站的连接速度。
chrome://net-internals/#dns 这里可以看各域名的DNS 缓存时间。chrome对每个域名会默认缓存60s。
3.2.2 IE浏览器
IE将DNS缓存30min。见这里
3.2.3 firefox
Firefox有dns缓存功能,但是默认缓存时间只有1分钟,可以通过修改该默认值加快DNS解析速度,方法如下:
打开一个新的窗口,地址栏输 入 about:config,回车,进入设置界面。然后搜索 network.dnsCacheExpiration ,把原来的60改成 6000(表示缓存6000秒),再搜索network.dnsCacheEntries 把默认的20改成1000(表示缓存1000条)。如果没 有上面两个项目,新建它们即可,
新建条目类型为整数型。 当然也可以按照需要设置成其它的值。
3.2.4 safari
约为10s