DNS的核心系统是一个三层树状、分布式服务,基本对应域名的结构:
- 根域名服务器(Root DNS Server):管理顶级域名服务器,返回com、net、cn等顶级域名服务器的ip地址。
- 顶级域名服务器(Top-level DNS Server):管理各自域名下的权威域名服务器,例如:com顶级服务器可以返回apple.com域名服务器的ip地址。
- 权威域名服务器(Authoritative DNS Server):管理自己域名主机的ip地址apple.com权威域名服务器可以返回www.apple.com的IP地址。
例如:你要访问“www.apple.com”,就要进行下面的三次查询:
- 访问根域名服务器,它会告诉你“com”顶级域名服务器的地址;
- 访问“com”顶级域名服务器,它再告诉你“apple.com”域名服务器的地址;
- 最后访问“apple.com”域名服务器,就得到了“www.apple.com”的地址。
为了缓解DNS系统的压力,使其能够快速获取结果,应用“缓存”解决此问题。
- 运营商可以搭建自己的DNS服务器,作为用的DNS查询的代理,代替用户的核心DNS服务器。这些服务器,可以缓存之前的查询结果,如果已经有了记录,就无需先根服务器发送服务查询,直接返回对应的IP地址。
- 操作系统里做DNS解析结果的缓存。当用户在此输入的时候,直接返回对应IP。
- 操作系统里面还有一个特殊的主机映射host文件(可以在这个文件下将域名的对应ip填到此文件)。linux下在:/etc/hosts。window下在C:\WINDOWS\system32\drivers\etc\hosts。
一个域名解析的流程:先到系统缓存中去寻找对应ip => 如果没找到在到host文件中寻找 => 在到运营商DNS寻找 =>最后到DNS根域下寻找。
域名解析对应ip的实际应用:
- 重定向:因为域名代替了 IP 地址,所以可以让对外服务的域名不变,而主机的 IP 地址任意变动。当主机有情况需要下线、迁移时,可以在host更改 DNS 记录,让域名指向其他的机器。
- 可以用二级域名管理服务端。
- 负载均衡搭建:可以叫一个域名对应多个返回ip。来达到去不同的服务器去发起请求,实现负载均衡。(可以通过随机返回不同ip,也可以通过权重返回不同服务器)
问题:在浏览器地址栏里随便输入一个不存在的域名,比如就叫“www. 不存在.com”,试着解释一下它的 DNS 解析过程。
解答:
- ·检查本地dns缓存是否存在解析"www.不存在.com"域名的ip
- 如果没有找到继续查找本地hosts文件内是否有对应的固定记录
- 如果hosts中还是没有那就根据本地网卡被分配的 dns server ip 来进行解析,dns server ip 一般是“非官方”的ip,比如谷歌的“8.8.8.8”,本身它也会对查找的域名解析结果进行缓存,如果它没有缓存或者缓存失效,则先去顶级域名服务器“com”去查找“不存在.com”的域名服务器ip,结果发现不存在,于是直接返回告诉浏览器域名解析错误,当然这两次查找过程是基于udp协议