DNS属于应用层的协议,DNS提供了将人类易于理解的主机名或域名转换为计算机或网络可识别的数字地址的机制,从而使得互连网的广泛应用成为可能。
一、 DNS涉及的基本概念
(1)域名及顶级域
1)域名
域名(Domain Name)通常是用户所在的主机名。域名格式是由若干部分组成,每个部分又称子域名,它们之间用“.”分开,每个部分最少由两个字母或数字组成。城名通常按分层结构来构造,每个子域名都有其特定的含义。从右到左,子域名分别表示不同的国家或地区的名称(只有美国可以省略表示国家的顶级域名)、组织类型、组织名称、分组织名称和计算机名称等,如www.example.com既是一个域名的典型例子。
2)域名地址的最后一部分子域名称为高层域名(或顶级域名)
它大致上可以分成两类:一类是组织性顶级域名;另一类是地理性顶级域名。
① 组织性顶级域名的出发点是为了说明拥有并对那些Internet主机负有责任的组织的类型。 表7-36给出部分组织的分类及它们所对应的组织性顶级域名。
(2)域名系统的构成
Internet中的域名地址与IP地址是等价的,它们之间通过域名系统DNS进行映射变换。实际上,DNS系统是一种分布式地址信息数据库系统,采用客户机/服务器模式,服务器中包含整个数据库的某部分信息,并供客户查询。DNS允许局部控制整个数据库的某些部分,但数据库的每一部分都可通过全网查询得到。
网络上的每台主机都有域名,指向主机相关信息,像IP地址等。主机也可以有一个或多个域的别名,它只是简单地从一个域名(别名)指向另一个域名(正式域名)。DNS采用层次结构的优点:各个组织在它们的内部可以自由地选择域名,只要保证组织内的惟一性即可,而不必担心与其它组织内的域名相冲突。
域名系统采用的是客户机/服务器模式,由三部分构成: 域名数据库、域名服务器和地址解析器。
各自功能如下:
• 地址解析器是客户方,负责查询域名服务器、解释从服务器返回来的应答、将信息返回给请求方等工作。
• 域名服务器(Domain Name Server)是服务器方,存储并管理着所管辖区域的域名数据库,负责接收来自于地址解析器的请求,按照请求类型,进行递归与非递归查询。同时将查询结果返回给地址解析器(网络中的每台主机既可作为客户方,也可作为服务器方)。
• 域名数据库
域名数据库是一个大型的分布在整个网络上的分布式数据库,存储了按层次管理的相关的数据,该层次结构可理解为一棵倒放的树(见图10-2),树中的每个结点均代表一个域,并存储着与该域相关的区域和资源记录(RRs),以供域名服务器查询使用。域名系统的构成如图7-37所示。
在一个域名服务器的配置文件里包含若干个资源记录,以帮助地址解析器进行地址解析。配置文件中资源记录所含的信息见表7-38资源记录示例,表中有关记录的内容及意义参照有关DNS报文格式进行解读。
域名数据分为两类数据:授权数据和缓冲数据。
1)授权数据
授权数据是经过授权的数据,该数据来自于负责存储该类数据的域名服务器,授权数据是最近得到的新数据,因而被认为是正确数据。该类数据使用价值高,但为了获得授权数据其时间花费的代价也高。通常主机在发出地址解析请求时要在报文头中要指出是否需要授权数据(见图10-30报文头格式)。
2)缓冲数据
缓冲数据是早先请求或交互操作的应答数据,被主机存储在本地缓冲区内。这类数据与授权数据相比,使用价值略低一些,但时间花费的代价低。通常,在互联网稳定状态下,缓冲数据在某种程度上也是很有用的。
(5)域名区域
如果整个网络中只有一台域名服务器且其中存储了所有的DNS的信息,那么域名转换处理就简单的多了,因为网络中任意一个主机对域名查询的请求均发向这惟一的一台域名服务器,它负责进行查询处理并将结果反馈给发出查询的主机即可。但是这种解决方案无论从数据的存储量还是从数据的传输速度要求都无法适应不断变化的网络及用户的需求。为了满足变化的网络及庞大数据的存储量还是从数据的传输速度,DNS采用了一种树形结构对域名数据库进行组织和管理,树中的每一个节点代表域名系统的域。域可以进一步划分成子域,每个域都有一个域名并由不同的组织管理,并定义了它在数据库中的位置。我们已经知道,在DNS中,一个完整的域名是从该域向上直到根的所有标记组成的字符串,标记之间要用“.”分隔开。
1)域名区域的定义
为了便于对树中各节点代表域名信息进行有效的管理,就引出了域名区域的概念。域名区域是指一个域名服务器负责管理的命名空间的一部分。域名服务器负责维护自己管理区域的授权数据。域名区域构成见图10-2。
域名区域是由资源记录中的一组授权数据定义的。其内容有:
• 域名区域中所有节点的资源记录。
• 域名区域中顶级节点的信息。如在图7-39中,Exam2.com区域的顶级节点是Exam2.com,Exam2.com节点可保存管理该区域所有节点的信息。
• 委托子区域信息(被委托给本区域中其它子区域管理的区域)。
当某个主机请求获得域名payroll.h2.Exam2.com的IP地址时,其地址解析程序首先从树的根节点获得域.com 的域名信息,然后从.com的域名服务器获得其管辖下的子区域Exam2.com的域名信息,这样逐级向下进行查询,直到到达payroll.h2.Exam2.com子区域的域名服务器,并从中获得其相应的IP地址,并反馈给地址解析程序。
(6)递归查询与非递归查询
综上所述,一个单一的域名服务器无法对每一个域名查询进行完整的回答,但是它可以对查询路径作出准确的响应。即,当一个域名服务器存储了一个域名查询所请求域的所有授权信息,它可直接给出需要的查询结果,否则,它必须给出具有所需信息的最近的域名服务器,以便继续查询。所谓最近的域名服务器一般是图7-39所示的区域树中父节点的域名服务器,一旦查询到具有目标域名信息的域名服务器,该域名服务器自动将目标地址信息发送到请求方。否则该域名服务器继续向请求方推荐另一个更接近目标的域名服务器,上述过程一直持续到请求方得到正确的结果或在使用授权信息访问某个域名服务器时出现错误为止。这种查询过程可能会反复多次。
1) 递归查询
所谓递归查询是指接收请求的第一个域名服务器必须自始至终对请求进行处理,或向其它域名服务器进行请求且最终获得授权数据,并对请求进行应答。 采用递归查询时,当所请求的域名信息在自身缓冲区时,域名服务器直接返回缓冲数据。此时递归查询请求标志无效(见DNS报头介绍)。有关递归查询见图7-40所示。
2)非递归查询
所谓非递归查询是指接收请求的第一个域名服务器可以返回可靠数据(本身有时),也可以返回指向其它服务器的指针(相当于将查询的接力棒传给了最接近的域名服务器)。 递归查询与非递归查询的区别可从图7-40看出。
主机的地址解析程序在查询时可以指定是否用递归还是非递归查询方式。非递归查询方式与递归查询方式相比响应速度快。
二、DNS的报文格式
DNS报文由报头和正文段构成,DNS有四类正文段:查询段、应答段、授权段和附加段。其具体构成见7-41所示。
(1) DNS报文报头格式
DNS报文报头格式如图7-42所示。
• ID:这是由生成DNS查询的程序指定的16位的标志符。该标志符也被随后的应答报文所用,申请者利用这个标志将应答和原来的请求对应起来。
• QR:该字段占1位,用以指明DNS报文是请求(0)还是应答(1)。
• OPCODE:该字段占4位,用于指定查询的类型。值为0表示标准查询,值为1表示逆向查询,值为2表示查询服务器状态,值为3保留,值为4表示通知,值为5表示更新报文,值6~15的留为新增操作用。
• AA:该字段占1位,仅当应答时才设置。值为1,即意味着正应答的域名服务器是所查询域名的管理机构或者说是被授权的域名服务器。
• TC:该字段占1位,代表截断标志。如果报文长度比传输通道所允许的长而被分段,该位被设为1。
• RD:该字段占1位,是可选项,表示要求递归与否。如果为1,即意味 DNS解释器要求DNS服务器使用递归查询。
• RA:该字段占1位,代表正在应答的域名服务器可以执行递归查询,该字段与查询段无关。
• Z:该字段占3位,保留字段,其值在查询和应答时必须为0。
• RCODE:该字段占4位,该字段仅在DNS应答时才设置。用以指明是否发生了错误。
允许取值范围及意义如下:
0:无错误情况,DNS应答表现为无错误。
1:格式错误,DNS服务器不能解释应答。
2:严重失败,因为名字服务器上发生了一个错误,DNS服务器不能处理查询。
3:名字错误,如果DNS应答来自于授权的域名服务器,意味着DNS请求中提到的名字不存在。
4:没有实现。DNS服务器不支持这种DNS请求报文。
5:拒绝,由于安全或策略上的设置问题,DNS名字服务器拒绝处理请求。
6 ~15 :留为后用。
• QDCOUNT:该字段占16位,指明DNS查询段中的查询问题的数量。
• ANCOUNT:该字段占16位,指明DNS应答段中返回的资源记录的数量,在查询段中该值为0。
• NSCOUNT:该字段占16位,指明DNS应答段中所包括的授权域名服务器的资源记录的数量,在查询段中该值为0。
• ARCOUNT:该字段占16位,指明附加段里所含资源记录的数量,在查询段中该值为0。
(2)DNS正文段
在DNS报文中,其正文段封装在图7-42所示的DNS报文头内。DNS有四类正文段:查询段、应答段、授权段和附加段。
1)查询段的格式
图7-43给出了查询段的格式。各字段意义为:
• QNAME:该字段是可变长字段,其中包含一个被请求的域名,用一系列标签表示,每一个标签由一个八进制后面跟着一个表示长度的八进制数组成。
• QTYPE: 该字段占16位,指定查询的资源类型(Type),该字段将一个类型值与一条指定的资源记录相匹配(有些通用的QTYPE值可以和与多条资源记录相匹配),其值可以是A(请求主机IP地址)、NS(请求授权域名服务器)或CNAME(请求返回规范名称,或者是某主机使用的与别名对应的真实名称)。
• QCLASS: 该字段占16位,指定查询的类别(Class),如Inet用以表示互联网和IP地址查询。
查询段是主机向域名服务器发出的将域名转换为IP地址的请求报文,域名服务器按照主机查询类型,经过查询资源记录数据库后返回含有资源记录的应答段、授权段或附加段,资源记录告诉主机所查询的信息。应答段、授权段、附加段具有相同的格式,其格式如图7-44所示。
各字段意义介绍如下:
• NAME:该字段是可变长字段,资源记录对应的域名(与主机发出的查询段中QNAME相同)。
• TYPE:占16位,该字段与查询段中的QTYPE相同。
• CLASS:占16位,该字段与查询段中的QCLASS相同。
• TTL:占32位,该字段表示资源记录的生命周期(以秒为单位),一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。
• RDLENTH:占16位,该字段表示资源数据的长度(以字节为单位)。
• RDATA:该字段是可变长字段,表示按查询段要求返回的相关资源记录的数据。其TYPE值是A,则返回4个字节的主机IP地址,如果TYPE值是NS,则返回授权域名服务器的域名,如果TYPE值是CNAME,则返回规范名称,或者是该主机使用的与别名对应的真实名称)。
(1)DNS的工作过程
域名系统是一个分布式系统,其管理和控制也是分布式的。一个用户A在查找另一用户B的域名时,域名系统的工作过程如图7-45所示。
(2)DNS工作实例
以下给出一个要求查找域名是www.internet-standard.com的IP地址的DNS查询实例。
1)DNS查询报文
查询主机发出的DNS查询报文见图7-46所示。其DNS查询报文中报头意义如下:
• QR=0:表示为查询段。
• OPCODE=0000:表示为标准查询。
• AA=0:表示为未要求授权。
• TC=0:未截断。
• RD=1:表示为要求递归查询。
• RA=0:该项与应答有关,与查询无关,因此设置为零。
• Z=000:属保留位
• RCODE=0000:该项是对应答信息的设置,与查询无关,故均设置为0。
• QDCOUNT=1:该项表示只有1条查询信息。
• ANCOUNT=0:该项表示应答时返回资源记录的数量,由于是查询信息,故设为0。
• NSCOUNT=0:该项表示应答时返回授权服务器资源记录的数量,对于查询段,应设置为零。
• ARCOUNT=0:该项表示应答时返回附加的授权域名服务器资源记录的数量,对于查询段,应设置为零。
• QNAME=www.internet-standard.com:该项给出要求查询的域名。
• QTYPE=A:该项表示要求查询IP地址。
• QCLASS=inet:该项表示互联网的IP地址查询。
相关域名服务器收到DNS查询报文后,进行解包分析,通过判定,确定起为一般的递归查询报文,要查询的是域名为www.internet-standard.com,并且得知要求返回对应的IP地址,经过一系列的查询处理,获得了相应的资源记录RRs,返回与上述DNS查询段对应的DNS应答报文,具体应答报文如图7-47所示。
① DNS应答报头解释
在DNS应答报头中,只需修改与应答有关的字段:QR、RA、RCODE、ANCOUNT、NSCOUNT、ARCOUNT。
• QR=1:表示为应答段。
• OPCODE=0000:表示为标准查询。
• AA=0:表示为未要求授权。
• TC=0:未截断。
• RD=1:表示为要求递归查询。
• RA=1:表示正在应答的域名服务器可以执行递归查询。
• Z=000:属保留位
• RCODE=0000:该项是对应答情况的设置,其值为零表示无错误。
• QDCOUNT=1:该项表示只有1条查询信息。
• ANCOUNT=2:该项表示应答时返回资源记录的数量为2条。
• NSCOUNT=2:该项表示应答时返回授权服务器资源记录的数量为2条。
• ARCOUNT=0:该项表示应答时返回附加的授权域名服务器资源记录的数量为0。
• QNAME=www.internet-standard.com:该项给出要求查询的域名。
• QTYPE=A:该项表示要求查询IP地址。
• QCLASS=inet:该项表示互联网的IP地址查询。
② DNS应答部分查询段解释
在DNS应答报文中,仍需将原查询段的内容附加在报头其后。但内容不变。
③ DNS应答部分的第一条资源记录解释
• NAME= www.internet-standard.com:要查询的域名,即资源记录中对应的域名。
• TYPE=CNAME:意味着www.internet-standard.com是别名。
• CLASS= inet:表示是互联网。
• TTL=60:该资源记录的生命周期是60秒(以秒为单位)。
• RDLENTH=2:表示资源数据的长度为2个字节(以字节为单位),此处是指针程度。
• RDATA= internet-standard.com:该主机使用的与别名对应的真实名称。
④ DNS应答部分的第二条资源记录解释
• NAME= internet-standard.com:要查询的主机的真实域名,由上一条资源记录返回的“RDATA”的值。
• TYPE=A:表示要查询的是internet-standard.com 对应的IP地址。
• CLASS= inet:表示是互联网。
• TTL=60:同上。
• RDLENTH=4:表示资源数据的长度为4个字节(RDATA所表示的IP地址长度)。
• RDATA=216.92.98.204:该主机真实域名所对应的IP地址。
⑤ DNS应答部分的第一条授权资源记录解释
NAME= internet-standard.com:要查询的主机的真实域名。
• TYPE=NS:返回的资源记录是授权服务器的域名。
• CLASS= inet:表示是互联网。
• TTL=60:同上。
• RDLENTH=1:表示资源数据的长度为11个字节。
• RDATA=ns00.ns0.com:对请求域进行管理的授权服务器的域名。
⑥ DNS应答部分的第二条授权资源记录解释
• NAME= internet-standard.com:要查询的主机的真实域名。
• TYPE=NS:返回的资源记录是授权服务器的域名。
• CLASS= inet:表示是互联网。
• TTL=60:同上。
• RDLENTH=13:表示资源数据的长度为13个字节。
• RDATA= ns130.pair.com:对请求域进行管理的另一个授权服务器的域名。
一、 DNS涉及的基本概念
(1)域名及顶级域
1)域名
域名(Domain Name)通常是用户所在的主机名。域名格式是由若干部分组成,每个部分又称子域名,它们之间用“.”分开,每个部分最少由两个字母或数字组成。城名通常按分层结构来构造,每个子域名都有其特定的含义。从右到左,子域名分别表示不同的国家或地区的名称(只有美国可以省略表示国家的顶级域名)、组织类型、组织名称、分组织名称和计算机名称等,如www.example.com既是一个域名的典型例子。
2)域名地址的最后一部分子域名称为高层域名(或顶级域名)
它大致上可以分成两类:一类是组织性顶级域名;另一类是地理性顶级域名。
① 组织性顶级域名的出发点是为了说明拥有并对那些Internet主机负有责任的组织的类型。 表7-36给出部分组织的分类及它们所对应的组织性顶级域名。
表7-36 组织性顶级域名
???? ② 组织性域名除了国际性组织域名外,其它类型的组织在Internet诞生时就已存在了,但随着Internet的日益国际化,这种组织性顶级域名已难以满足需求了,于是便产生一种新的地理性顶级域名。 地理性项级域名用两个字母的缩写形式来完全地表示某个国家和地区。(2)域名系统的构成
Internet中的域名地址与IP地址是等价的,它们之间通过域名系统DNS进行映射变换。实际上,DNS系统是一种分布式地址信息数据库系统,采用客户机/服务器模式,服务器中包含整个数据库的某部分信息,并供客户查询。DNS允许局部控制整个数据库的某些部分,但数据库的每一部分都可通过全网查询得到。
网络上的每台主机都有域名,指向主机相关信息,像IP地址等。主机也可以有一个或多个域的别名,它只是简单地从一个域名(别名)指向另一个域名(正式域名)。DNS采用层次结构的优点:各个组织在它们的内部可以自由地选择域名,只要保证组织内的惟一性即可,而不必担心与其它组织内的域名相冲突。
域名系统采用的是客户机/服务器模式,由三部分构成: 域名数据库、域名服务器和地址解析器。
各自功能如下:
• 地址解析器是客户方,负责查询域名服务器、解释从服务器返回来的应答、将信息返回给请求方等工作。
• 域名服务器(Domain Name Server)是服务器方,存储并管理着所管辖区域的域名数据库,负责接收来自于地址解析器的请求,按照请求类型,进行递归与非递归查询。同时将查询结果返回给地址解析器(网络中的每台主机既可作为客户方,也可作为服务器方)。
• 域名数据库
域名数据库是一个大型的分布在整个网络上的分布式数据库,存储了按层次管理的相关的数据,该层次结构可理解为一棵倒放的树(见图10-2),树中的每个结点均代表一个域,并存储着与该域相关的区域和资源记录(RRs),以供域名服务器查询使用。域名系统的构成如图7-37所示。
图7-37 DNS结构
???? (3)资源记录在一个域名服务器的配置文件里包含若干个资源记录,以帮助地址解析器进行地址解析。配置文件中资源记录所含的信息见表7-38资源记录示例,表中有关记录的内容及意义参照有关DNS报文格式进行解读。
表7-38配置文件中资源记录示例
???? (4)域名数据的分类域名数据分为两类数据:授权数据和缓冲数据。
1)授权数据
授权数据是经过授权的数据,该数据来自于负责存储该类数据的域名服务器,授权数据是最近得到的新数据,因而被认为是正确数据。该类数据使用价值高,但为了获得授权数据其时间花费的代价也高。通常主机在发出地址解析请求时要在报文头中要指出是否需要授权数据(见图10-30报文头格式)。
2)缓冲数据
缓冲数据是早先请求或交互操作的应答数据,被主机存储在本地缓冲区内。这类数据与授权数据相比,使用价值略低一些,但时间花费的代价低。通常,在互联网稳定状态下,缓冲数据在某种程度上也是很有用的。
(5)域名区域
如果整个网络中只有一台域名服务器且其中存储了所有的DNS的信息,那么域名转换处理就简单的多了,因为网络中任意一个主机对域名查询的请求均发向这惟一的一台域名服务器,它负责进行查询处理并将结果反馈给发出查询的主机即可。但是这种解决方案无论从数据的存储量还是从数据的传输速度要求都无法适应不断变化的网络及用户的需求。为了满足变化的网络及庞大数据的存储量还是从数据的传输速度,DNS采用了一种树形结构对域名数据库进行组织和管理,树中的每一个节点代表域名系统的域。域可以进一步划分成子域,每个域都有一个域名并由不同的组织管理,并定义了它在数据库中的位置。我们已经知道,在DNS中,一个完整的域名是从该域向上直到根的所有标记组成的字符串,标记之间要用“.”分隔开。
1)域名区域的定义
为了便于对树中各节点代表域名信息进行有效的管理,就引出了域名区域的概念。域名区域是指一个域名服务器负责管理的命名空间的一部分。域名服务器负责维护自己管理区域的授权数据。域名区域构成见图10-2。
域名区域是由资源记录中的一组授权数据定义的。其内容有:
• 域名区域中所有节点的资源记录。
• 域名区域中顶级节点的信息。如在图7-39中,Exam2.com区域的顶级节点是Exam2.com,Exam2.com节点可保存管理该区域所有节点的信息。
• 委托子区域信息(被委托给本区域中其它子区域管理的区域)。
图7-39 DNS区域和子区域示意图
当某个主机请求获得域名payroll.h2.Exam2.com的IP地址时,其地址解析程序首先从树的根节点获得域.com 的域名信息,然后从.com的域名服务器获得其管辖下的子区域Exam2.com的域名信息,这样逐级向下进行查询,直到到达payroll.h2.Exam2.com子区域的域名服务器,并从中获得其相应的IP地址,并反馈给地址解析程序。
(6)递归查询与非递归查询
综上所述,一个单一的域名服务器无法对每一个域名查询进行完整的回答,但是它可以对查询路径作出准确的响应。即,当一个域名服务器存储了一个域名查询所请求域的所有授权信息,它可直接给出需要的查询结果,否则,它必须给出具有所需信息的最近的域名服务器,以便继续查询。所谓最近的域名服务器一般是图7-39所示的区域树中父节点的域名服务器,一旦查询到具有目标域名信息的域名服务器,该域名服务器自动将目标地址信息发送到请求方。否则该域名服务器继续向请求方推荐另一个更接近目标的域名服务器,上述过程一直持续到请求方得到正确的结果或在使用授权信息访问某个域名服务器时出现错误为止。这种查询过程可能会反复多次。
1) 递归查询
所谓递归查询是指接收请求的第一个域名服务器必须自始至终对请求进行处理,或向其它域名服务器进行请求且最终获得授权数据,并对请求进行应答。 采用递归查询时,当所请求的域名信息在自身缓冲区时,域名服务器直接返回缓冲数据。此时递归查询请求标志无效(见DNS报头介绍)。有关递归查询见图7-40所示。
2)非递归查询
所谓非递归查询是指接收请求的第一个域名服务器可以返回可靠数据(本身有时),也可以返回指向其它服务器的指针(相当于将查询的接力棒传给了最接近的域名服务器)。 递归查询与非递归查询的区别可从图7-40看出。
主机的地址解析程序在查询时可以指定是否用递归还是非递归查询方式。非递归查询方式与递归查询方式相比响应速度快。
二、DNS的报文格式
DNS报文由报头和正文段构成,DNS有四类正文段:查询段、应答段、授权段和附加段。其具体构成见7-41所示。
图7-41 DNS报文结构
???? 其中正文段中的查询段用于主机向域名服务器发出地址解析请求,应答段、授权段、附加段用于域名服务器向主机返回地址解析结果。DNS报文头和正文段的格式具体介绍如下。(1) DNS报文报头格式
DNS报文报头格式如图7-42所示。
7-42 DNS报头格式
???? 各个字段意义简述如下:• ID:这是由生成DNS查询的程序指定的16位的标志符。该标志符也被随后的应答报文所用,申请者利用这个标志将应答和原来的请求对应起来。
• QR:该字段占1位,用以指明DNS报文是请求(0)还是应答(1)。
• OPCODE:该字段占4位,用于指定查询的类型。值为0表示标准查询,值为1表示逆向查询,值为2表示查询服务器状态,值为3保留,值为4表示通知,值为5表示更新报文,值6~15的留为新增操作用。
• AA:该字段占1位,仅当应答时才设置。值为1,即意味着正应答的域名服务器是所查询域名的管理机构或者说是被授权的域名服务器。
• TC:该字段占1位,代表截断标志。如果报文长度比传输通道所允许的长而被分段,该位被设为1。
• RD:该字段占1位,是可选项,表示要求递归与否。如果为1,即意味 DNS解释器要求DNS服务器使用递归查询。
• RA:该字段占1位,代表正在应答的域名服务器可以执行递归查询,该字段与查询段无关。
• Z:该字段占3位,保留字段,其值在查询和应答时必须为0。
• RCODE:该字段占4位,该字段仅在DNS应答时才设置。用以指明是否发生了错误。
允许取值范围及意义如下:
0:无错误情况,DNS应答表现为无错误。
1:格式错误,DNS服务器不能解释应答。
2:严重失败,因为名字服务器上发生了一个错误,DNS服务器不能处理查询。
3:名字错误,如果DNS应答来自于授权的域名服务器,意味着DNS请求中提到的名字不存在。
4:没有实现。DNS服务器不支持这种DNS请求报文。
5:拒绝,由于安全或策略上的设置问题,DNS名字服务器拒绝处理请求。
6 ~15 :留为后用。
• QDCOUNT:该字段占16位,指明DNS查询段中的查询问题的数量。
• ANCOUNT:该字段占16位,指明DNS应答段中返回的资源记录的数量,在查询段中该值为0。
• NSCOUNT:该字段占16位,指明DNS应答段中所包括的授权域名服务器的资源记录的数量,在查询段中该值为0。
• ARCOUNT:该字段占16位,指明附加段里所含资源记录的数量,在查询段中该值为0。
(2)DNS正文段
在DNS报文中,其正文段封装在图7-42所示的DNS报文头内。DNS有四类正文段:查询段、应答段、授权段和附加段。
1)查询段的格式
图7-43给出了查询段的格式。各字段意义为:
• QNAME:该字段是可变长字段,其中包含一个被请求的域名,用一系列标签表示,每一个标签由一个八进制后面跟着一个表示长度的八进制数组成。
• QTYPE: 该字段占16位,指定查询的资源类型(Type),该字段将一个类型值与一条指定的资源记录相匹配(有些通用的QTYPE值可以和与多条资源记录相匹配),其值可以是A(请求主机IP地址)、NS(请求授权域名服务器)或CNAME(请求返回规范名称,或者是某主机使用的与别名对应的真实名称)。
• QCLASS: 该字段占16位,指定查询的类别(Class),如Inet用以表示互联网和IP地址查询。
图7-43 DNS报文中查询段的格式
???? 2)应答段、授权段、附加段的格式查询段是主机向域名服务器发出的将域名转换为IP地址的请求报文,域名服务器按照主机查询类型,经过查询资源记录数据库后返回含有资源记录的应答段、授权段或附加段,资源记录告诉主机所查询的信息。应答段、授权段、附加段具有相同的格式,其格式如图7-44所示。
各字段意义介绍如下:
• NAME:该字段是可变长字段,资源记录对应的域名(与主机发出的查询段中QNAME相同)。
• TYPE:占16位,该字段与查询段中的QTYPE相同。
• CLASS:占16位,该字段与查询段中的QCLASS相同。
• TTL:占32位,该字段表示资源记录的生命周期(以秒为单位),一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。
• RDLENTH:占16位,该字段表示资源数据的长度(以字节为单位)。
• RDATA:该字段是可变长字段,表示按查询段要求返回的相关资源记录的数据。其TYPE值是A,则返回4个字节的主机IP地址,如果TYPE值是NS,则返回授权域名服务器的域名,如果TYPE值是CNAME,则返回规范名称,或者是该主机使用的与别名对应的真实名称)。
图7-44DNS应答段、授权段或附加段的格式
(1)DNS的工作过程
域名系统是一个分布式系统,其管理和控制也是分布式的。一个用户A在查找另一用户B的域名时,域名系统的工作过程如图7-45所示。
图7-45 DNS基本工作过程
(2)DNS工作实例
以下给出一个要求查找域名是www.internet-standard.com的IP地址的DNS查询实例。
1)DNS查询报文
查询主机发出的DNS查询报文见图7-46所示。其DNS查询报文中报头意义如下:
• QR=0:表示为查询段。
• OPCODE=0000:表示为标准查询。
• AA=0:表示为未要求授权。
• TC=0:未截断。
• RD=1:表示为要求递归查询。
• RA=0:该项与应答有关,与查询无关,因此设置为零。
• Z=000:属保留位
• RCODE=0000:该项是对应答信息的设置,与查询无关,故均设置为0。
• QDCOUNT=1:该项表示只有1条查询信息。
• ANCOUNT=0:该项表示应答时返回资源记录的数量,由于是查询信息,故设为0。
• NSCOUNT=0:该项表示应答时返回授权服务器资源记录的数量,对于查询段,应设置为零。
• ARCOUNT=0:该项表示应答时返回附加的授权域名服务器资源记录的数量,对于查询段,应设置为零。
• QNAME=www.internet-standard.com:该项给出要求查询的域名。
• QTYPE=A:该项表示要求查询IP地址。
• QCLASS=inet:该项表示互联网的IP地址查询。
图7-46 查询 DNS报文内容
相关域名服务器收到DNS查询报文后,进行解包分析,通过判定,确定起为一般的递归查询报文,要查询的是域名为www.internet-standard.com,并且得知要求返回对应的IP地址,经过一系列的查询处理,获得了相应的资源记录RRs,返回与上述DNS查询段对应的DNS应答报文,具体应答报文如图7-47所示。
① DNS应答报头解释
在DNS应答报头中,只需修改与应答有关的字段:QR、RA、RCODE、ANCOUNT、NSCOUNT、ARCOUNT。
• QR=1:表示为应答段。
• OPCODE=0000:表示为标准查询。
• AA=0:表示为未要求授权。
• TC=0:未截断。
• RD=1:表示为要求递归查询。
• RA=1:表示正在应答的域名服务器可以执行递归查询。
• Z=000:属保留位
• RCODE=0000:该项是对应答情况的设置,其值为零表示无错误。
• QDCOUNT=1:该项表示只有1条查询信息。
• ANCOUNT=2:该项表示应答时返回资源记录的数量为2条。
• NSCOUNT=2:该项表示应答时返回授权服务器资源记录的数量为2条。
• ARCOUNT=0:该项表示应答时返回附加的授权域名服务器资源记录的数量为0。
• QNAME=www.internet-standard.com:该项给出要求查询的域名。
• QTYPE=A:该项表示要求查询IP地址。
• QCLASS=inet:该项表示互联网的IP地址查询。
② DNS应答部分查询段解释
在DNS应答报文中,仍需将原查询段的内容附加在报头其后。但内容不变。
③ DNS应答部分的第一条资源记录解释
• NAME= www.internet-standard.com:要查询的域名,即资源记录中对应的域名。
• TYPE=CNAME:意味着www.internet-standard.com是别名。
• CLASS= inet:表示是互联网。
• TTL=60:该资源记录的生命周期是60秒(以秒为单位)。
• RDLENTH=2:表示资源数据的长度为2个字节(以字节为单位),此处是指针程度。
• RDATA= internet-standard.com:该主机使用的与别名对应的真实名称。
④ DNS应答部分的第二条资源记录解释
• NAME= internet-standard.com:要查询的主机的真实域名,由上一条资源记录返回的“RDATA”的值。
• TYPE=A:表示要查询的是internet-standard.com 对应的IP地址。
• CLASS= inet:表示是互联网。
• TTL=60:同上。
• RDLENTH=4:表示资源数据的长度为4个字节(RDATA所表示的IP地址长度)。
• RDATA=216.92.98.204:该主机真实域名所对应的IP地址。
⑤ DNS应答部分的第一条授权资源记录解释
NAME= internet-standard.com:要查询的主机的真实域名。
• TYPE=NS:返回的资源记录是授权服务器的域名。
• CLASS= inet:表示是互联网。
• TTL=60:同上。
• RDLENTH=1:表示资源数据的长度为11个字节。
• RDATA=ns00.ns0.com:对请求域进行管理的授权服务器的域名。
⑥ DNS应答部分的第二条授权资源记录解释
• NAME= internet-standard.com:要查询的主机的真实域名。
• TYPE=NS:返回的资源记录是授权服务器的域名。
• CLASS= inet:表示是互联网。
• TTL=60:同上。
• RDLENTH=13:表示资源数据的长度为13个字节。
• RDATA= ns130.pair.com:对请求域进行管理的另一个授权服务器的域名。