DNS问答
DNS用来干什么?
域名系统DNS用来把互联网中的主机名字转换为IP地址。
为什么要转换呢?
因为IP地址长度是固定的(32位),在通信中更好处理。
那为什么不直接使用IP地址呢?
因为IP地址不容易记忆。
DNS具体怎么工作的呢?
DNS是一个分布式数据库系统,采用客户端服务器方式。数据库中存放的记录是域名与IP地址之间的对应关系。我们想要知道一个域名对应的IP地址,就向域名服务器发出请求,希望得到响应,响应的内容就是IP地址,当然也可以包含一些其他信息。看下面的图,这是DNS的查询过程。
简单的总结这个过程:主机访问m.xyz.com,为了解析域名得到IP地址,向域名服务器发出了请求(步骤1),最后得到了结果(步骤8)。
这里有需要注意的两个查询方式:
- 递归查询:主机向本地域名服务器查询一般采用递归查询。如果本地域名服务器不知道被查询的域名地址的IP地址,那么本地域名服务器就以DNS客户的身份,向其他根域名服务器发出请求,替主机继续查询。查询结果要么是IP地址,要么报错,表示无法查询到结果
- 迭代查询:本地域名服务器向根域名服务器查询通常采用迭代查询。当根域名服务器收到请求,要么给出IP地址,要么告诉本地域名服务器“你下一步应该去哪一个域名服务器进行查询”。让本地域名服务器继续进行后续的查询,而不是替本地域名服务器查询。本地域名服务器也可以采用递归查询,就像上图右边的查询过程,取决于最初的请求报文中的设置。
上面的本地域名服务器、根域名服务器、顶级域名服务器以及权限域名服务器都有什么区别吗?
理论上只需要一台域名服务器,但是由于互联网规模很大,一台机器是负荷不了的,一旦出现故障,就整个瘫痪。因此,互联网就采用层次树状结构的命名方法,并适用分布式的域名系统DNS。
域名
先来看一下域名这个概念:域名是指为了识别主机名称和阻止结构名称的一种具有分层的名称。例如
kusa.ac.jp
kusa 仓敷艺术科学大学
ac 表示大学
jp 表示日本
级别是从左到右依次下降。最右边的是顶级域名,域名可以划分子域,比如还如co.jp表示日本企业。子域还可以继续划分,从而形成了顶级域,二级域,三级域等等。
总结:域名只是一个逻辑概念,跟物理地点没有关系。
域名服务器
要管理整个域名系统,DNS采用了划分区的方法。
一个服务器所负责管辖的范围叫做区(zone)。每个区的节点必须是能够连通的。每一个区设置相应的权限服务器,用来保存该区中所有主机的域名和IP地址的映射。
区是“域”的子集。
按照上图划分区,反映出了DNS的分布式结构。
一层域名服务器注册着下一层域名服务器的IP地址。
根域名服务器中注册顶级服务器的IP地址。
顶级域名服务器中注册权限域名服务器的IP地址。
所有域名服务器都必须注册着根域名服务器的IP地址。(IP地址查询从根域名开始进行)
本地域名服务器
上面域名服务器没有列出本地域名服务器。本地域名服务器并不属于域名服务器层次结构,但是又非常重要。主机发出DNS查询请求,请求会发送给本地域名服务器。
每一个互联网服务提供者ISP、或者一个大学,或者一个大学的系,都可以有一个本地域名服务器。本地域名服务器一般距离用户较近,一般不超过几个路由器的距离。
解析器
进行DNS查询的主机或者软件叫做DNS解析器。用户所使用的个人电脑就属于解析器。
一个解析器至少注册一个以上域名服务器的IP地址。
如何优化DNS查询呢?
高速缓存,存放最近查询过的域名以及从何处获得域名映射信息的记录。
例如如果本地域名服务器缓存着主机需要查询的域名的IP地址,直接把缓存结果告诉用户,而不需要再向根域名服务器发送请求。如果本地域名服务器没有缓存被查的域名的记录,而是存着顶级域名服务器的IP地址,可以不向根域名服务器发出请求,直接向顶级域名服务器发送请求。
缓存的内容需要定时清理,域名服务器为每项内容都设置有计时器并处理超时的项。
主机也需要进行缓存,许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的高速缓存,只有在缓存中找不到记录时才使用域名服务器。DNS使大多数名字都在本地进行解析,仅少量解析需要在互联网上通信,因此DNS系统的效率很高。
DNS可以存储除了IP地址的其他信息吗?
DNS系统中,常见的资源记录类型有:
- 主机记录(A记录):RFC 1035定义,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
- 别名记录(CNAME记录): RFC 1035定义,CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录。
- IPv6主机记录(AAAA记录): RFC 3596定义,与A记录对应,用于将特定的主机名映射到一个主机的IPv6地址。
- 服务位置记录(SRV记录): RFC 2782定义,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等。
- NAPTR记录:RFC 3403定义,它提供了正则表达式方式去映射一个域名。NAPTR记录非常著名的一个应用是用于ENUM查询。
参考
1、《计算机网络》--谢希仁
2、《图解tcp/ip》