DNS基本概念

DNS(Domain Name System,域名系统)

早期
早期的域名解析是在一个文件中(hosts)记录所有的主机名和IP地址,并且不重复;通过检索host文件即可完成主机名的解析,很显然这种方法存不了多少主机名和IP地址,硬盘就得爆。

DNS是互联网上最核心的带层级的分布式数据库系统,他负责域名和IP地址之间的转换以及宣告邮件路由等信息,使得基于域名提供服务成为可能。

DNS的组成部分

域名服务器(Name Server)
提供域名解析的软件,一般监听UDP,TCP的53端口,例如Linux系统的BIND和Windows server中集成的DNS服务器组件,根据用途分为:
(1)权威域名服务器
负责授权域下的域名解析服务,又上级权威域名服务器使用NS记录进行授权。权威服务器有三种:
1.1根域名服务器(Root Name Server)
最上层的权威域名服务器,负责对.com,.cn,.org等顶级域名的向下授权,目前世界上有十三组这样的根域名服务器:

主机名 IP地址 管理机构
1 a.root-servers.net 198.41.0.4 VeriSign, Inc.
2 b.root-servers.net 192.228.79 University of Southern California (ISI)
3 c.root-servers.net 192.33.4.12 Cogent Communications
4 d.root-servers.net 199.7.91.13 University of Maryland
5 e.root-servers.net 192.203.230.10 NASA (Ames Research Center)
6 f.root-servers.net 192.5.5.241 Internet Systems Consortium, Inc.
7 g.root-servers.net 192.112.36.4 US Department of Defense (NIC)
8 h.root-servers.net 198.97.190.53 US Army (Research Lab)
9 i.root-servers.net 192.36.148.17 Netnod
10 j.root-servers.net 192.58.128.30 VeriSign, Inc.
11 k.root-servers.net 193.0.14.129 RIPE NCC
12 l.root-servers.net 199.7.83.42 ICANN
13 m.root-servers.net 202.12.27.33 WIDE Project

1.2顶级域名服务器(Top Level Name Server)
顶级域名服务器分为两大类:

通用顶级域名服务器(Generic Top Level Domain,GTLD),例如:.com,.org等授权的域名服务器。
国家顶级域名服务器(Country Code Top Level Domain,CCTLD),例如:.uk,.cun,.jp等授权的域名服务器。

获取完整的顶级域名列表可以访问顶级域名服务器列表

1.3二级域名服务器(Second Level Name Server)
服务于具体域名的解析,二级域名一般是指域名注册人选择使用的网上名称,如“yahoo.com”
三者关系

. 根域名
.cn 顶级域名
.com.cn 二级域名

(2)缓存域名服务器(Caching Name Server)
负责接收接受解析器发过来的dns请求,通过依次查询根域名服务器-顶级域服务器-二级域名服务器来获取DNS的解析条目。同时根据TTL(Time To Live,存活时间)进行缓存。一般有这样三个用途:

用在企业内部,作为局域网的DNS服务器,避免内部用户访问外部非授权的DNS服务器,避免DNS污染。
用于电信等运营商为租户提供域名解析服务。
用于开放DNS解析服务。如谷歌的8.8.8.8 , Norton安全DNS 199.85.126.30以及国内的114.114.114.114

(3)转发域名服务器(Forwarding Name Server)
负责接收解析器发送过来的DNS请求,转发给指定的上级域名服务器获得DNS的解析条目,然后把响应结果发送给解析器。与缓存域名服务器不同,这类服务器不进行任何缓存,只做转发。

解析器(Resolver)
访问域名服务器的客户端,负责解析从域名服务器获得的响应,向调用它的应用返回IP地址或者别名等信息,例如Linux系统中的gethostbyname()函数,Windows中的nslookup等

递归查询

递归查询


就是指上图中本地域名服务器,解析器向他发送解析请求,由它代替解析器依次查询根域名服务器,顶级域名服务器,二级域名服务器来获得DNS的解析条目,再将响应结果发送给解析器。
由此我们可以看出,递归查询对权威服务器的负担是非常大的。只要有DNS请求就走权威服务器,每时每刻都有人访问,会造成发出大的数据流量,因此在权威服务器上,需要禁止递归查询,
在BIND中配置禁止递归查询的指令如下:

  recursion no;

迭代查询

当DNS服务器收到请求后,如果没有找到需要的数据,该DNS服务器就会告诉客户机另外一台DNS服务器的IP地址,然后再由客户机向另一台DNS服务器发送请求,如果还是没有找到那么就再发一台DNS服务器的地址往复循环,知道找到为止。

原文地址:https://www.cnblogs.com/hxlinux/p/12972322.html