域命名空间(domain namespace)

DNS的分布式数据库通过域名来进行索引。每个域名本质上就是一棵大型逆向树的一条路径。这棵逆向树又被称作域命名空间。
image.png

域(domain)

一个域就是域命名空间的一颗子树。一个域的名称也就是该域最顶端节点的域名。
purdue.edu域最顶端的节点是purdue.edu节点
image.png
image.png

授权(delegation)

image.png
image.png

名称服务器(nameserver)和区域(zone)

存储域命名空间(domain namespace)信息的程序被称作名称服务器(nameserver)
名称服务器通常只拥有域名空间某一部分的完整信息,这一部分我们称作区域(zone)。区域的内容是从文件或另一个名称服务器加载而来的。加载过后,这个名称服务器便可宣城对该区域具有权威(authority)
一个名称服务器可以同时对多个区域具有权威。

域(domain)与区域(zone)的区别

所有的顶级域以及许多二级域和更低级别的域,例如berkeley.edu和hp.com。通过授权被划分为了更小的单元,这些单元被称作区域(zone)
image.png
image.png
image.png
image.png

授权子域

授权是将一部分域的责任分派给另一个组织。而实际的工作就是将子域的权威分配给不同的名称服务器。
将子域授权出去之后,该名称服务器将不再包含已被授权的子域信息,而是包含一些指针,这些指针向那些已被授权子域的权威名称服务器。现在向该名称服务器询问子域中的数据的时候,他就能回答正确的名称服务器列表。

名称服务器类型

DNS规范中定义了两种类型的名称服务器:primary mastersecondary master
区域中的primary master 名称服务器从其主机上的文件中读取区域数据。
区域中的secondary master 名称服务器从该区域的权威名称服务器(被称为master的服务器)上读取区域数据。
通常master名称服务器就是区域的primary master名称服务器
但secondary master 并不是必须从primary master读取数据,也能从另一个secondary master名称服务器上加载区域数据。
当secondary名称服务器启动时,它会联系master名称服务器,在需要的时候获取区域数据,这就是区域传输(zone tarnsfer) - 与域传送漏洞相关
虽然很多人、很多软件仍然使用secondary master名称服务器这个旧术语,但是如今更多地被称为slave。

一个区域 primary master 和 slave名称服务器都是该区域的权威。但是slave并不是次等名称服务器。DNS提供两种类型的名称服务器是为了让管理变得更加方便。一旦已经创建了区域的数据并建立了一个primary master 名称服务器,往后如果需要创建新的名称服务器,就不必将数据从这台主机拷贝到那台主机。主需要建立一台salve 名称服务器,并且将它设置成从区域的primary master上获取数据即可。
image.png

区域数据文件

parimary master 名称服务器从本地主机加载区域数据的文件被称为区域数据文件(zone datafile),也常常被称之为数据文件(datafile)。 slave 名称服务器也可以从数据文件中加载区域数据。

slave名称服务器通常被配置为将从master名称服务器传出过来的区域数据备份到数据文件中。当salve名称服务器死机或者重新启动的时候,它都会读取之前备份的数据文件,然后检查他的区域数据是否最新。
就避免了传送未更改区域的数据,又在master名称服务器宕机时提供了数据的来源。
区域数据文件中包含了描述区域的资源记录。资源记录描述了区域内所有的主机,并标记了子域的授权情况
BIND允许使用特殊指令来引入配置文件。

解析器

解析器(resolver)就是访问名称服务器的客户端程序。 当运行在主机上的程序需要从域命名空间中获取信息时就会用到解析器。
解析器处理的任务有以下几个:

  • 查询名称服务器
  • 解释响应信息(可能是资源记录或是错误)
  • 将信息返回给查询他的程序

在BIND中,解析器是连结到诸如ssh、ftp等程序的一组库例程(library routine)。它甚至不是一个独立的进程。解析器几乎完全依赖于名称服务器:它收集查询命令,向名称服务器发送查询并等待应答,如果没有应答就再次发送查询。为查询寻找答案的大部分工作都是由名称服务器来完成的。在DNS规范中把这种类型的解析器称作为stub解析器(stub resolver)。

解析

由于名称服务器很善于从域命名空间中检索数据,所以大多数解析器的功能都很有限。事实上,名称服务器不经能提供以自己为权威的区域数据,还能再域命名空间中搜索找到不以自己为权威的区域数据。而这个过程被称为名称解析(name resolution)。

因为域命名空间的结构如同一个倒置的树,所以名称服务器只需要知道一条信息就能找到树中的任一节点,这条信息就是root名称服务器的域名和地址。一个名称服务器可以想root名称服务器查询域命名空间中的任何域名,然后root名称服务器会以自己的方式代为解析域名。

root名称服务器

root名称服务器知道每个顶级区域的权威名称服务器的位置。(有些root名称服务器本身就是通用顶级区域的权威)。
对于查询要求中任何的域名,root名称服务器最终至少会提供该域名所在顶级区域的那些权威名称服务器的名称和地址
接着,顶级名称服务器会提供该域名所在的二级区域中权威名称服务器的列表。每一个被查询的名称服务器要么提供如何进一步寻找答案的信息,要么就直接给出答案。
可见root名称服务器对于解析的重要性。故DNS提供了缓存(caching)等 机制来帮助root名称服务期减轻负载。
当所查询的域名不在缓存中时,解析就得从root名称服务器开始。
image.png
image.png

递归与迭代

名称解析的完整过程

RTT:往返时间
image.png
image.png

地址到名称的映射

域命名空间中数据(包括地址)是按照名称来索引的。给定域名来查询地址相对简单。但是给定地址来查询域名却复杂得多,因为需要尽可能详细的搜索DNS树中每个域名数据。
既然有名称来索引数据,那么久可以建立以地址为标签的域命名空间。 在Internet 域命名空间中,有一个 in-addr.arpa 域。

在 in-addr.arpa 域中的节点都是以数字来做标签,并采用点分字节法(dotted-octet)- 【IPV4】 来表示 IP地址。
in-addr.arpa 域最多可以有256个子域,分别和IP地址中第一个字节(即8位)的每一个可能的值相对应。而这个子域又能有256个子域,分别与第二个字节的每个可能的值相对应。最终在第四节下,与最后一个字节想关联的资源记录会提供该IP地址所队友主机的完整域名。这也就形成了一个in-addr.arpa 域。(这儿我看了很久,挺懵逼的 具体看下面这张图 )
image.png
然后这里的域名所解析到的IP地址为:15.16.192.152,所以在in-addr.arpa 域中对应的节点是 152.192.16.15.in-addr.arpa (从叶子往根读)

缓存

image.png
image.png
image.png