分类: LINUX
2010-05-04 13:42:25
14.1.3 DNS查询的过程
当客户端程序要通过一个主机名称来访问网络中的一台主机时,它首先要得到这个主机名称所对应的IP地址,因为IP数据报中允许放置的是目地主机的IP地址,而不是主机名称。可以从本机的hosts文件中得到主机名称所对应的IP地址,但如果hosts文件不能解析该主机名称时,只能通过向客户机所设定DNS服务器进行查询了。
说明:在UNIX系统中,可以设置hosts和dns的使用次序。
可以以不同的方式对DNS查询进行解析。第一种是本地解析,就是客户端可以使用缓存信息就地应答,这些缓存信息是通过以前的查询获得的;第二种是直接解析,就是直接由所设定的DNS服务器解析,使用的是该DNS服务器的资源记录缓存或者其权威回答(如果所查询的域名是该服务器管辖的);第三种是递归查询,即设定的DNS服务器代表客户端向其他DNS服务器查询,以便完全解析该名称,并将结果返回至客户端。第四种是迭代查询,即设定的DNS服务器向客户端返回一个可以解析该域名的其他DNS服务器,客户端再继续向其他DNS服务器查询。
1.本地解析
本地解析的过程如图14-2所示。客户机平时得到的DNS查询记录都保留在DNS缓存中,客户机操作系统上都运行着一个DNS客户端程序。当其他程序提出DNS查询请求时,这个查询请求要传送至DNS客户端程序。DNS客户端程序首先使用本地缓存信息进行解析,如果可以解析所要查询的名称,则DNS客户端程序就直接应答该查询,而不需要向DNS服务器查询,该DNS查询处理过程也就结束了。
(点击查看大图)图14-2 本地解析 |
2.直接解析
如果DNS客户端程序不能从本地DNS缓存回答客户机的DNS查询,它就向客户机所设定的局部DNS服务器发一个查询请求,要求局部DNS服务器进行解析。如图14-3所示,局部DNS服务器得到这个查询请求,首先查看一下所要求查询的域名是不是自己能回答的,如果能回答,则直接给予回答,如是不能回答,再查看自己的DNS缓存,如果可以从缓存中解析,则也是直接给予回应。
(点击查看大图)图14-3 局部DNS服务器解析 |
3.递归解析
当局部DNS服务器自己不能回答客户机的DNS查询时,它就需要向其他DNS服务器进行查询。此时有两种方式,如图14-4所示的是递归方式。局部DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给局部DNS服务器,再由局部DNS服务器返回给客户端。
(点击查看大图)图14-4 DNS解析的递归方式 |
4.迭代解析
当局部DNS服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析,如图14-5所示。局部DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给客户端DNS程序,客户端DNS程序再继续向这些DNS服务器进行查询,直到得到查询结果为止。
以上介绍了DNS解析的4种方式,下面看一下DNS报文的格式。14.1.4 DNS报文格式
DNS客户端与DNS服务器进行交互时,需要传送各种各样的数据报,这些数据报的总体格式如图14-6所示。DNS报文由12字节长的首部和4个长度可变的字段组成。标识字段由客户程序设置并由服务器返回结果,客户程序通过它来确定响应与查询是否匹配。标识字段包含了以下内容。
定义是查询报文还是响应报文;
查询类型是标准查询、反向查询还是服务器状态请求;
是否是权威回答;
查询方式是递归查询还是迭代查询;
是否支持递归查询;
查询是否有差错或要查的域名不存在。
问题部分中每个问题的格式如图14-7所示,通常只有一个问题。查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。计数字节的值必须是0~63的数,因为标识符的最大长度仅为63。与其他常用报文格式不一样的是,该字段无需以整32bit边界结束,即无需填充字节。图14-8显示了如何存放域名。其中,3、5、2表示后续字符的个数。
(点击查看大图)图14-6 DNS数据报的总体格式 |
图14-7 DNS数据包问题部分格式 |
(点击查看大图)图14-8 域名的表示方法 |
每个问题都有一个查询类型,而每个应答(也称为一条资源记录)也有一个应答类型。大约有20个不同的类型值,有一些目前已经过时,表14-1列出了常用的一些值。其中有两种可以用于查询类型:一种是A类型,表示期望获得查询名的IP地址。还有一种是PTR类型,表示请求获得一个IP地址对应的域名,也称为指针查询。查询报文格式中的查询类通常是1,指互联网地址。
注意:某些站点也支持其他非IP地址查询,此时查询类将是其他数值。
表14-1 DNS问题和响应的类型值和查询类型值
名 字 |
数 值 |
描 述 |
名 字 |
数 值 |
描 述 |
A |
1 |
IP地址 |
HINFO |
13 |
主机信息 |
NS |
2 |
名字服务器 |
MX |
15 |
邮件交换记录 |
CName |
5 |
规范名称 |
AXFR |
252 |
对区域转换的请求 |
PTR |
12 |
指针记录 |
*或ANY |
255 |
对所有记录的请求 |
DNS报文一般格式中的最后3个字段是回答字段、授权字段和附加信息字段,它们均采用一种称为资源记录RR(Resource Record)的相同格式。图14-9显示了资源记录的格式,各个字段的含义如下:
(点击查看大图)图14-9 DNS资源记录格式 |
域名是记录中资源数据对应的名字,它的格式和前面介绍的查询名字段格式(图14-8)相同。
类型说明RR的类型码,它的值的取值及含义见表14-1。
类通常为1,指Internet数据。
生存时间字段是客户程序保留该资源记录的秒数,资源记录通常的生存时间值为 2天。
资源数据长度说明资源数据的数量。
资源数据的格式依赖于类型字段的值,对于类型1(A记录)资源数据是4字节的IP地址。
14.1.4 DNS报文格式
DNS客户端与DNS服务器进行交互时,需要传送各种各样的数据报,这些数据报的总体格式如图14-6所示。DNS报文由12字节长的首部和4个长度可变的字段组成。标识字段由客户程序设置并由服务器返回结果,客户程序通过它来确定响应与查询是否匹配。标识字段包含了以下内容。
定义是查询报文还是响应报文;
查询类型是标准查询、反向查询还是服务器状态请求;
是否是权威回答;
查询方式是递归查询还是迭代查询;
是否支持递归查询;
查询是否有差错或要查的域名不存在。
问题部分中每个问题的格式如图14-7所示,通常只有一个问题。查询名是要查找的名字,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。计数字节的值必须是0~63的数,因为标识符的最大长度仅为63。与其他常用报文格式不一样的是,该字段无需以整32bit边界结束,即无需填充字节。图14-8显示了如何存放域名。其中,3、5、2表示后续字符的个数。
(点击查看大图)图14-6 DNS数据报的总体格式 |
图14-7 DNS数据包问题部分格式 |
(点击查看大图)图14-8 域名的表示方法 |
每个问题都有一个查询类型,而每个应答(也称为一条资源记录)也有一个应答类型。大约有20个不同的类型值,有一些目前已经过时,表14-1列出了常用的一些值。其中有两种可以用于查询类型:一种是A类型,表示期望获得查询名的IP地址。还有一种是PTR类型,表示请求获得一个IP地址对应的域名,也称为指针查询。查询报文格式中的查询类通常是1,指互联网地址。
注意:某些站点也支持其他非IP地址查询,此时查询类将是其他数值。
表14-1 DNS问题和响应的类型值和查询类型值
名 字 |
数 值 |
描 述 |
名 字 |
数 值 |
描 述 |
A |
1 |
IP地址 |
HINFO |
13 |
主机信息 |
NS |
2 |
名字服务器 |
MX |
15 |
邮件交换记录 |
CName |
5 |
规范名称 |
AXFR |
252 |
对区域转换的请求 |
PTR |
12 |
指针记录 |
*或ANY |
255 |
对所有记录的请求 |
DNS报文一般格式中的最后3个字段是回答字段、授权字段和附加信息字段,它们均采用一种称为资源记录RR(Resource Record)的相同格式。图14-9显示了资源记录的格式,各个字段的含义如下:
(点击查看大图)图14-9 DNS资源记录格式 |
域名是记录中资源数据对应的名字,它的格式和前面介绍的查询名字段格式(图14-8)相同。
类型说明RR的类型码,它的值的取值及含义见表14-1。
类通常为1,指Internet数据。
生存时间字段是客户程序保留该资源记录的秒数,资源记录通常的生存时间值为 2天。
资源数据长度说明资源数据的数量。
资源数据的格式依赖于类型字段的值,对于类型1(A记录)资源数据是4字节的IP地址。