什么是DNS域名解析
DNS(Domain Name System),是互联网非常重要的一项服务,利用域名和IP地址相互映射的一个分布式数据库,为几乎所有联网设备提供域名解析服务
域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。域名的解析工作由DNS服务器完成。
域名是为了方便人们记忆网络地址,但计算机始终是用IP地址互相访问,所以我们在浏览器输入网站域名时,会有一段域名转换为IP地址的过程
域名解析过程
浏览器地址栏输入域名,点击回车之后,域名解析就按照以下步骤展开:
-
查询浏览器自身DNS缓存,以Chrome浏览器为例,会首先搜索浏览器自身的DNS缓存,缓存时间只有一分钟,最多只能容纳1000条缓存),如果缓存没有过期,则域名解析到此结束;
Chrome自身缓存可以使用
chrome://net-internals/#dns查看 -
查询系统本身的DNS缓存,这个过程由Chrome浏览器去完成,如果查询到则域名解析到此结束,如果没有已解析过的结果,则去本地hosts文件查找,hosts文件静态保存网址域名与其对应的IP映射关系,如果web app的宿主机地址发生改变,对应的hosts文件也要改写;
同时hosts文件也有被恶意篡改的风险;
Windows下可以用命令 ipconfig /displaydns 查看操作系统域名解析缓存;
-
查询本地配置首选DNS服务器,如果在hosts文件中也没有找到对应的条目,浏览器就会发起一个DNS的系统调用,就会向本地配置的首选DNS服务器(一般是电信运营商提供的,分布非常之多,并且性能都很好,会缓存域名解析结果,大约80%的域名解析在这里完成)发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求,即运营商的DNS服务器需要完成后续步骤,必须得提供该域名的IP地址),运营商的DNS服务器首先查找自身的缓存,找到对应的条目,条目过期时间TTL一般由网站DNS提供,如果没有过期,则解析成功。
-
迭代查询各级域名服务器,如果没有找到对应的条目或已过期,运营商的DNS服务器代替浏览器发起迭代DNS解析请求:
- 运营商的DNS服务器首先是会找根域DNS服务器(IPv4全球共13台,IPv6全球共25台),找到根域的IP地址,就会向其发起请求,假设查询域名 www.baidu.com 的IP地址,根域发现这是一个顶级域com域的域名,因此返回com域DNS服务器的IP地址;
- 运营商的DNS服务器得到com域的IP地址,又向com域的IP地址发起了请求,com域这台服务器返回baidu.com这个域的IP地址;
- 运营商的DNS又向baidu.com这个域名的IP地址(这个一般就是由域名注册商提供的,像万网,新网等)发起请求,baidu.com域DNS服务器正常情况下就能找到 www.baidu.com 的IP地址此时就把找到的结果发送给运营商的DNS服务器;
- 这个时候运营商的DNS服务器就拿到了 www.baidu.com 这个域名对应的IP地址,并返回给Windows系统内核,内核又把结果返回给浏览器,终于浏览器拿到了 www.baidu.com 对应的IP地址,该进行一步的动作了。