DNS,又称为域名系统(Domain Names System),是一项互联网服务,用于进行域名和与之相对应的IP地址进行转化的服务器。
Domain Names System
一、定义
DNS用于将域名转换为IP地址。其中:
- IP地址:一组用点分隔的能唯一标识互联网中的计算机的数字组合
- 域名:一串用点分隔的名字,用来表示计算机的名称
根据《计算机网络》的定义:DNS是
- 一个由分层的 DNS 服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
二、域名构成
域名是层次结构,从上到下(从书写上看是从右到左),分为根域名、顶级域名、二级域名、三级域名等等。
根域名:root
顶级域名:net, com, edu, org…
二级域名:ibm, baidu, alibaba, ….
三级域名:www, mail, …
注意:在域名的每一个层级都有一个域名服务器,如果顶级域名中,有edu域名服务器,com域名服务器。
从上面可以看出,DNS 系统是一个典型的树状结构,从根域名服务器开始一级一级的查询。根服务器用于一切域名的起始解释权,通过下图可以大致了解解释权机制(SOA)。
三、查询方式
- 递归查询:A只请求B,直到B返回A想要的结果。
- 迭代查询:A请求B,B返回结果告知A所需要请求的其他服务器,然后A再请求C、D、E等并拿到响应的返回结果。
四、域名缓存
对于域名服务器而言:
在首次进行解析域名时,会使用缓存保存域名和对应的IP地址映射。
对于本地计算机而言:
对于浏览器:
浏览器会在获取网站域名的实际IP后,用缓存保存下来,以减少网络请求次数
对于操作系统:
操作系统的缓存就是用户自己配置的hosts文件
五、查询过程
大致有七个步骤:
首先搜索浏览器的DNS缓存,其缓存中维护了一张域名与IP地址的对应表,若有则返回,并结束操作
若没有找到,继续搜索操作系统的DNS缓存,若有则返回,并结束操作
若没找到,则操作系统把域名发给本地域名服务器,本地域名服务器在自己的DNS缓存中采用递归方式查找,若有则返回,并结束操作
若没找到,则本地服务器向上级域名服务器进行迭代查询
- 本地域名服务器向根域名服务器发送请求,其会返回顶级域名服务器地址
- 本地域名服务器再向顶级域名服务器发送请求,其会返回二级域名服务器地址
- 本地域名服务器再向二级域名服务器发送请求,最终返回该域名对应的IP地址
至此,请求阶段完成,接下来分三步返回结果至浏览器并缓存。
- 本地域名服务器将得到的IP地址返回给操作系统,同时缓存该域名与IP的映射
- 操作系统将得到的IP地址返回给浏览器,同时缓存该域名与IP的映射
- 浏览器得到该域名对应的IP地址,同时缓存该域名与IP的映射
六、DNS 负载均衡基本原理
DNS 也用于在冗余的服务器之间进行负载分配。繁忙的站点(例如cnn.com)被冗余分布在多台服务器上,每台服务器均运行在不同的端系统上,每个都有着不同的 IP 地址。
DNS 服务器为同一个主机名/域名配置了多个 IP 地址,在应答 DNS 查询时,DNS 服务器对每个查询将以 DNS 文件中主机记录对应的 IP 地址按顺序返回不同的解析结果,将客户端访问引导到不同的机器上去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。