在Internet的应用层中,许多应用都遵循客户机client/服务器server模式。客户端/服务器应用程序分为两类:
- 一种可以直接被用户使用:e-mail
- 支持其他应用程序的应用程序:DNS
DNS是一种支持程序
TCP/IP使用IP唯一确定一台主机到因特网的连接。名字比IP更容易记忆。需要实现名字到地址或者地址到名字的映射系统。
map name to a address or map address to a name
因特网发展初期,使用**主机文件(host file)**实现映射。
host file构成
- 一列是名字
- 一列是地址
每台主机主机文件存储在磁盘中,并以一个标准主机文件为依据,定期进行更新。当程序或者用户需要将某一名字映射到一个地址时,主机就查询主机文件。
问题:
- 主机文件太大,无法存储在每一台计算机中
- 每次发生变化时,无法更新世界上的所有主机
解决:
-
方案1:存储在一台单独的主机上,允许每一台需要映射的计算机访问这个集中化的信息。
- 缺点:造成较大的通信量
-
方案2:将巨大的信息分成很多很小的部分,每一部分存储在不同的计算机中。
需要映射的计算机可以寻找最近的一台持有信息的计算机。
分配给机器的名字必须从名字空间name space 中选择。
【IP地址唯一】----->【名字唯一】
Name Space按两种方式进行组织:
{
F
l
a
t
H
i
e
r
a
r
c
h
i
c
a
l
begin{cases}Flat\Hierarchicalend{cases}
{FlatHierarchical
一个名字分配个一个地址,空间中的名字是一个无结构的字符序列 a sequence of characters without structure。名字之间也可能没有公共部分;即使有公共部分,也没有实际含义。
缺点:
- 必须集中控制才能避免二义性和重复性
名 字 的 组 成 { p a r t 1 : 组 织 的 性 质 p a r t 2 : 组 织 的 名 字 p a r t 3 : 组 织 的 部 门 . . . . . . . 名字的组成begin{cases}part1:组织的性质\part2:组织的名字\part3:组织的部门\.......end{cases} 名字的组成⎩⎪⎪⎪⎨⎪⎪⎪⎧part1:组织的性质part2:组织的名字part3:组织的部门.......
分配和控制名字的机构可以分散化decentralied,
组织的性质和名字可以由中央组织定义,其他部分的分配可以交给这个组织自身。
25.2 Domain Name Space为了获得层次结构名字空间,设计了Domain Name Space。所有的名字由根在顶部的倒置的树结构定义:
树最多有128级:0级~127级
25.2.1 Label树上的每一个节点有一个label,label最多为63个字符。根节点的标号是一个空字符串null
DNS要求同一节点分出来的子节点有不同的label:确保名字的唯一性。
25.2.2 Domain Name每一个节点都有一个域名。
一个全的domain name是用.分割的标识号序列。
domain name总是从节点向上读到根节点。最后一个标号是根节点的标号。这表示一个完全的域名总是以一个空标号结束,即最后一个字符是.
(1)Fully Quanlified Domain Name如果一个label以空字符串结束,那么他就是全称域名full quanlified domain name
却称名包含一台主机的所有名字的域名。它包含所有的标号,从最具体的标号到最一般的标号,能唯一定义一台主机的名字,如:
challenger.act.fhda.edu.
是一个全称域名。
(2)Partially Qualified Domain Name如果一个域名不是以空字符串结束,那么称为部分域名partially Qualified Domain Name
当这个需要解析的名字属于和客户端相同的站点same site时,使用部分域名。解析程序能提供省略的部分,称为后缀suffix,以创建FQDN。
25.2.3 Domaindomain是域名空间的一棵子树。
域的名字是树顶部节点的域名。
一个域本身也可以划分为多个域,即子域subdomain
25.3 Distribution Of Name Space一台计算机存储的问题:
- 通信量大
- 不安全
将信息分布在多台称为DNS服务器(DNS server)的计算机中。
一种方法:将整个空间划分为基于第一级的域,并进一步划分为更小的subdomain。
每一台服务器对一个大的域或者较小的域是负责的
与建立名字的层次结构一样,也建立了服务器的层次结构
25.3.2 Zone一个服务器responsible或者has authority的范围称为一个Zone。
Zone和Domain的区别:
- 如果一个服务器负责一个域,并且这个域没有被划分更小的subdomain,那么此时domain和zone是相同的。
- 如果被划分为更小的subdomain
- 子节点的信息会放在更低层次的服务器中
- 原来的服务器只保存这些较低服务器的某种参照
Root Server:whose ZONE consists of the whole tree
根服务器通常不保存关于域的任何信息,只是将其授权给其他的服务器,并保存这些服务器的参照关系。
目前有多个根服务器,每一台都覆盖了整个域名空间, 这些服务器分布在世界各地。
25.3.4 Primary Server Versus Secondary ServerD N S 定 义 了 服 务 器 类 型 { primary server secondary server DNS定义了服务器类型begin{cases}text{primary server}\text{secondary server}end{cases} DNS定义了服务器类型{primary serversecondary server
-
primary server:存储了授权区域有关文件的服务器,它负责创建creating、维护maintaining和更新updating区域文件,并将区域文件存储在本地磁盘中。
-
**secondary server:**从一个服务器(主服务器或者是辅服务器)传输transfer一个区域的全部信息,并将文件存储在它的本地磁盘中。辅助服务器既不创建也不更新区域文件。如果需要更新,那么必须是由主服务器完成,由主服务器发送到辅助服务器。
一台服务器可能是某个特定区域的主服务器,也可能是别的区域的辅服务器。
-
主服务器能够从磁盘文件中装载所有信息,辅助服务器从主服务器中装载信息。
-
当辅助服务器从主服务器中下载信息时,这称为区域的传递。【辅服务器作为备份】
域名空间被划分为三个部分:
D
o
m
a
i
n
n
a
m
e
s
p
a
c
e
{
G
e
n
e
r
i
c
d
o
m
a
i
n
s
I
n
v
e
r
s
e
d
o
m
a
i
n
c
o
u
n
t
r
y
d
o
m
a
i
n
s
Domain name spacebegin{cases}Generic domains\Inverse domain\country domainsend{cases}
Domain name space⎩⎪⎨⎪⎧Generic domainsInverse domaincountry domains
Generic domain:按照已经注册主机的一般行为对主机进行定义。
树中的每一个节点定义一个域,他是域名空间数据库的一个索引。
25.4.2 country domain
country domain使用两个字母的国家缩写,如us代表美国,第二级Label是组织机构,如州。
24.5.3 Inverse domaininverse domian用于将地址映射为名字。
应用:反向或者指针PTR查询。
25.5 RESOLUTIONname-address resolution:将名字映射为地址或者将地址映射为名字
25.5.1 Resolver解析程序DNS是一个客户机/服务器应用程序,需要将地址—>名字或者名字—>地址时需要调用一个解析程序resolver的DNS服务程序。
resolver用一个映射访问最近的一个DNS服务器,然后进行递归解析或者迭代解析。
25.5.2 Mapping Names to Address名字到地址的映射:DNS服务器检查通用域或者国家与查找相应的映射
25.5.3 Mapping Address to Names地址到名字的映射:DNS服务器进行PTR查询,使用inverse domian。
IP地址必须反过来,并将in-addr和arpa两个标号附加在最后,以创建反向域能够接收的域。
25.5.4 Recursive Resolution客户端解析程序从名字服务器中请求递归应答的方式:
- 如果服务器是这一域名的授权服务器,他会检查数据库并做出相应
- 不是授权服务器,通常会发给父服务器,并等待响应。
- …一直迭代向上…直到找到
- 找到后迭代返回
客户端解析程序从名字服务器中没有请求递归应答,那么映射可以以迭代的形式进行
- 如果服务器时该名字的授权服务器,那么发送应答
- 不是,它返回那个他认为可以解析该查询的服务器地址
服务器向另一个服务器请求映射并得到回应时,将回应发送回客户端之前,先将信息存储在高速缓存中。
下次查询时通过高速缓存解决问题。但是通知这个响应来自高速缓存而非授权信息。
高速缓存存在问题:
- 映射过期
解决方式:
- TTL信息添加在映射上,TTL定义了服务器可以将信息放入高速缓存的时间,超时后该信息无效
- 每一台服务器对每一个映射保留一个TTL计数器。高速缓存定期检查,清除TTL已经过期的映射
D N S 报 文 { q u e r y r e s p o n s e DNS报文begin{cases}query\responseend{cases} DNS报文{queryresponse
查询报文和相应报文的格式如下:
25.6.1 Header头部在查询报文和响应报文中格式相同,查询报文头部某些字段设置为0:
- identification:匹配对查询的相应,每次查询会使用不同的标识,响应时使用同一个标识
- flags:定义了报文的类型,相应的类型,期望的解析类型(迭代或者递归)
- number of question records:询问部分请求的数量
- number of answer records:应答记录数量
- number of authoritative records:授权部分
- additional records:附加记录数
一条或者多条询问记录。查询和响应的报文都有这一部分
25.6.3 Answer Section一条或者多条询问记录组成。仅存在于应答报文中。
25.6.4 Authoritative Section给出用于查询的一台或者多台服务器的域名(信息)
25.6.5 Additional section一条或者多条资源记录构成,仅存在于响应报文中。
25.7 Types of Records 记录的类型 25.7.1 question record客户机使用询问记录从服务器获取信息,包含了域名
25.7.2 resource record每一个域名都有一个资源记录,服务器数据库包含了所有的资源记录。
25.8 register 注册机构新的域名的假如通过注册机构(registrar)来完成的, 一个熟知的商业实体是ICANN(因特网名字和编号分配组织)。注册机构首先确认询问的域名是唯一的,然后将它输入到DNS数据库中,这是需要收费的。
25.9 Dynamic Domain Name System 动态域名系统DNS主文件必须能动态更新。动态域名系统 Dynamic Domain Name System (DDNS) 就是为了满足这种需求而设计的。
在DDNS中,当名字和地址之间的绑定确定时,通常由DHCP给主DNS服务器发送这种信息,主服务器更新这一区域。
通知辅助服务器的方法可以:
- 主动方式
- 被动方式



