DNS(Domain Name System)协议是一种将主机名转换为IP地址的目录服务,它存在的原因是在不同的条件下,标识方法的适用性可能会发生变化,例如在一般人通常喜欢用名字标识其他人,而在某些机构中用身份证号来标识其他人可能更加合适。在计算机网络中,主机名(例如 www.xxx.com)相当于前述例子中的人名,而IP地址则相当于身份证号。区别在于,通常人名可能会重复,而主机名一般不会重复。此外,主机名无法提供主机在因特网中的位置,且不是定长的,路由器较难处理。因此,通过IP地址来标识主机。
DNS的基础设施是由分层的DNS服务器实现的分布式数据库,它是一种应用层协议,使得主机可以查询分布式数据库,DNS运行在UDP之上。
DNS通常被其他应用层协议使用,例如HTTP协议。当一台用户主机试图通过服务器主机名(例如 www.xxx.com)访问某服务器,会首先通过DNS服务器获得服务器主机名对应的IP地址,然后向位于该IP地址的服务器主机发起连接。类似地,“DNS缓存服务器”的存在可以使得用户主机可以更快地实现上述转换,来减少DNS网络的负载和DNS的平均时延。
对于一些主机可能存在多个主机名,类似有的人也存在多个别名。
类似地,邮件服务器也可能存在别名,例如一个较为复杂的规范主机名和一个简单好记的邮件服务器别名。
通常有些繁忙的站点分布在多台冗余服务器之上,每台服务器在不同的端系统上,有着不同的IP地址。DNS可以用于在这些冗余服务器之间进行负载分配。对这种站点的服务器来说,一个规范主机名可能会对应一个IP地址集合。当用户试图访问站点时,可以通过某种策略,例如在DNS响应中循环IP地址集合中的主机地址次序,实现对这些冗余服务器的负载分配。
DNS的基础设施包括大量的DNS服务器,以分布式、层次结构存在于全世界。不存在1台DNS服务器记录了因特网上所有主机的映射,当前因特网的体量使得这不可能存在。大致来说,存在三种DNS服务器(层次结构由上层到下层形成树状结构):
严格来说,还存在着一种本地DNS服务器,通常本地DNS服务器“邻近”本主机,它起着代理的作用。当主机发出DNS请求时,首先发往本地DNS服务器,然后由本地DNS服务器将请求转发到DNS服务器层次结构中。
在DNS服务器的交互中,上层域需要知道:1、子域的名称,子域的权威DNS服务器的名字;2、子域的权威DNS的IP。
此外,关于域有以下内容:
一个域管理其下子域,创建一个新的域,必须征得它所属域的同意。域与物理网络无关,域遵从组织界限,而不是物理网络。一个域的主机可以不在一个网络,一个网络的主机可以不在一个域。域的划分是逻辑的,而不是物理的。
通常,DNS服务器之间的交互可以是迭代的也可以是递归的,实践中,从请求主机到本地DNS服务器的查询是递归的,其余查询是迭代的。
同样为一种空间换时间的策略,DNS缓存通过存储DNS回应(包括主机名/IP地址对)缓存在本地存储器中,当存在另外的对相同主机名的DNS请求到达时,那么该本地存储器对应的DNS服务器就可以提供所请求的IP地址,即使它不是权威服务器。显然,这种策略可以降低时延,并降低DNS网络的负载,DNS中广泛采用缓存技术。此外,由于主机名和IP地址的对应关系可能发生变化,通常在一定时间后清除缓存的信息。
DNS作为网络一种重要的基础设施,对于各种应用,例如Web,电子邮件等服务,如果DNS瘫痪,那么它们都无法正常工作。通常针对DNS服务的攻击有分布式拒绝服务(DDoS)带宽泛洪攻击、中间人攻击和投毒攻击等。
通常,一些非专业人士对于根服务器的认知,尤其是所谓的13台根服务器,认为没有一台在国内是存在巨大风险的。这种认知的本质原因在于错误的觉得因特网的流量全部都要经过国外的根服务器。事实上,它们是DNS(Domain Name System)根服务器,主要经过的是域名/IP转换请求及相关流量,而且DNS缓存服务器和国内其它DNS根服务器副本的存在,使得国内DNS服务对根服务器的依赖性没有那么严重,安全性是较为可靠的。
如有错漏之处,敬请指正!