您的位置:首页 > 其它

DNS报文格式

2013-07-04 19:00 323 查看
DNS (英文单词的全称是:Domain Name System,域名系统), DNS是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。(DNS在RFC 1034和RFC 1035中有详细说明,并在另外若干个RFC中作了更新。)

我们已经知道,既可以使用主机名标识一台主帆,也可以使用IP地址标识。人们更愿意使用便于记忆的主机名标识符,而路由器则只愿使用长度固定并有层次结构的IP地址。

  

  我们可以通过多种方法来识别一个人。例如,通过出生证明上的姓名,还可以通过社会安全编号、通过驾驶执照编号。尽管这些标识都可以用来识别人,但是在某种背景下会有一种标识比其他的标识更加恰当。例如,IRS(美国的一个税收机构)中的计算机喜欢使用固定长度的社会安全编号而不是出生证上的姓名来标注。另——方面,日常生活中人们喜欢用更好记的出生证上的姓名而不是社会安全编号〔确实,你能想象出如果一个人说“嗨,我的名字是132—67—9875,请找一下我丈夫,178—87—1146”会是何等滑稽的场景)。

  

  因特网中的主机就像人一样能以多种力式标识。标识方法之一是使用主机名(hostname)。主机名(例如cnn.com,www.yahoo.com)是助记性的,人们更愿意使用。然而主机名几乎没有提供关于主机在因特网中的位置信息(主机名为sina.com.cn的主机也许是在中国境内,此外不再有别的位置信息了)。另外,主机名是由可变长度的字母数字字符构成的,路由器处理起来有困难。因此因特网中的主机也使用所谓的IP地址标识。我们将在以后深入讨论IP地址,这里只简单地说明一下。IP地址由4个字节构成,具有严格的层次结构。IP地址一般以点分十进制数格式表示,也就是说所有4个字节都以0—255之间的十进制数表示,各个字节之间以点号分隔,例如121.7.106.83。IP地址具有层次结构,当从左到右扫描某个地址时,我们得到关于其主机在因特网中所在位置的越来越明确的信息。这就像从下到上扫描某个邮政地址时,我们得到关于住宅所在位置的越来越明确的信息一样。

  

  DNS提供的服务

  

  我们已经知道,既可以使用主机名标识一台主帆,也可以使用IP地址标识。人们更愿意使用便于记忆的主机名标识符,而路由器则只愿使用长度固定民有层次结构的IP地址。为调解这两种不同的偏好,我们需要一个把主机名转换成IP地址的目录服务。这就是因特网的域名系统(Domain Name System,DNS)的主要任务。DNS既是一个在由名称服务器主机构成的层次结构中实现的分布式数据库,又是一个允许客户主机和名称服务器主机通信以使用域名转换服务的应用层协议。名称服务器主机通常是运行Berkeley Internet Name
Domain(简称BIND)软件的UNIX主机。DNS协议运行在UDP之上,使用端口号53。

  

  其他应用层协议(例如HTTP,SMTP,FTP)普遍使用DNS把由用户提供的主机名转换成IP地址。作为例子,我们考虑某个用户使用运行在本地主机上的一个浏览器(也就是HTTP客户)请求http://www.yesky.com时会发生什么。为了把HTTP请求消息发送到名为www.yesky.com的web服务器主机,浏览器必须获悉这台主机的IP地址。我们知道,差不多每台主机都运行着DNS应用的客户端。浏览器从URL中抽取出主机名后把它传递给本地主机上的DNS应用客户端。DNS客户于是向某个DNS服务器发出一个包含该主机名的DNS查询消息。DNS客户最终收到一个包含与该主机名对应的IP地址的应答消息。浏览器接着打开一个到位于该IP地址的HTTP服务器的TCP连接。从这个例子中可以看出,DNS给使用它的因特网应用引入了额外延迟(有时还相当大)。所幸的是,正如我们即将讨论的那样.预期的主机名—IP地址对应关系往往高速缓存在就近的DNS名称服务器主机中,从而帮助降低了DNS访问延迟和DNS网络流量。

  

  除了从主机名到IP地址的转换,DNS还提供其他一些重要的服务:●主机别名(hody aliasing)。具有复杂主机名的主机还可以有一个或多个别名。例如,

  

  主机名为relay1.west-coast.enterprise.com的主机有两个别名:enterprise.com和www.enterprise.com。这种情况下,主机名relay1.west-coast.enterprise.com特称为正规主机名(canonical hostname),另外两个主机名则是别名主机名(alias hostname)。

  

  别名主机名往往比正规主机名更便于记忆。应用可以调用DNS获取所给定别名主机名的正规主机名和IP地址。

  

  ●邮件服务器别名(mall server aliasing)。电子邮件地址显然要求便于记忆。例如,如果Bob有一个hotmail账号,那么他的电子邮件地址可能是简单的bob@hotmail.com。然而hotmail邮件服务器的主机名要比hotmail.com复杂且不易记住。电子邮件应用可以调用DNS获取所给定别名主机名的正规主机名和IP地址。事实上,DNS允许一个公司的邮件服务器和Web服务器使用相同的别名主机名。例如,某个公司的web服务器和邮件服务器可以都称为enterprise.com。

  

  ●负载分担(load distribution)。DNS还越来越多地用于执行在多个复制成的服务器(例如复制成的Web服务器)之间的负载分担。像cnn.com那样的繁忙站点往往把Web服务器复制成多个,每个服务器运行在不向的端系统上,具有不同的IP地址。对于复制成的多个Web服务器,与其单个正规主机名相关联的是一组IP地址。DNS数据库中保存着这组IP地址。客户发出针对映射到一组IP地址的某个主机名的DNS查询后,服务器响应以整组IP地址,不过每次响应的地址顺序是轮转的。既然访问web站点时,浏览器一般把HTTP请求消息发送给内DNS客户否询到的一组IP地址中的第一个,DNS轮转于是把web站点的访问负载分担在所有复制成的服务器上。电子邮件应用也可以使用DNS轮转,这样多个邮件服务器可以有相同的别名。近来,有些公司已经以更为复杂的方式使用DNS提供web内容分发服务。

DNS报文格式:



该报文由12字节的首部和4个长度可变的字段组成。

标识字段由客户程序设置并有服务器返回结果。

16bit的标志字段 如下:



QR:0表示查询报文,1表示响应报文

Opcode:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。

AA:表示授权回答(authoritative answer).

TC:表示可截断的(truncated)

RD:表示期望递归

RA:表示可用递归

随后3bit必须为0

Rcode:返回码,通常为0(没有差错)和3(名字差错)

后面4个16bit字段说明最后4个变长字段中包含的条目数。

问题部分:

报文格式:



查询名为要查找的名字,它由一个或者多个标示符序列组成。每个标示符已首字节数的计数值来说明该标示符长度,每个名字以0结束。计数字节数必须是0~63之间。该字段无需填充字节。如:gemini.tuc.noao.edu



每个问题有一个查询类型,通常查询类型为A(由名字获得IP地址)或者PTR(获得IP地址对应的域名)

资源记录部分:

报文格式:

DNS最后3个字段,回答字段,授权字段和附加信息字段均采用资源记录RR(Resource Record)的相同格式。



域名是记录中资源数据对应的名字。它的格式和查询名字段格式相同。

类型说明R R的类型码。类通常为1,指I n t e r n e t数据。

生存时间字段是客户程序保留该资源记录的秒数。

资源数据长度说明资源数据的数量。该数据的格式依赖于类型字段的值。对于类型1(A记录)资源数据是4字节的I P地址。

数据包DNS 查询:(DNS query)

0000 00 19 56 6e 19 bf 00 17 a4 1a b2 e0 08 00 45 00   ..Vn.... ......E.

0010 00 3b ed c6 00 00 80 11 e3 c3 ac 15 0f 04 ac 15   .;...... ........

0020 01 f9 04 a9 00 35 00 27 2f bd 3e 3a 01 00 00 01   .....5.' /.>:....

0030 00 00 00 00 00 00 03 77 77 77 06 67 6f 6f 67 6c   .......w ww.googl

0040 65 02 63 6e 00 00 01 00 01                        e.cn.... .      

说明:

前面三段分别为以太网包头,ip包头和UDP包头。

从0020行后面开始为DNS数据包.

3e 3a 为标识字段

01 00 为标志字段,该字段设置了TC表示该报文是可截断的。

00 01 查询报文数量为1。

00 00 00 00 00 00 表示回答,授权和额外信息都为0。

03 77 77 77 06 67 6f 6f 67 6c 65 02 63 6e 00 表示查询的名字为www.google.com

00 01 为类型,1表示A查询

00 01 为类,1表示Internet数据。

数据包 DNS response (DNS response)

0000 00 17 a4 1a b2 e0 00 19 56 6e 19 bf 08 00 45 00   ........ Vn....E.

0010 00 78 48 af 00 00 7d 11 8b 9e ac 15 01 f9 ac 15   .xH...}. ........

0020 0f 04 00 35 04 a9 00 64 75 db 3e 3a 81 80 00 01   ...5...d u.>:....

0030 00 03 00 00 00 00 03 77 77 77 06 67 6f 6f 67 6c   .......w ww.googl

0040 65 02 63 6e 00 00 01 00 01 c0 0c 00 05 00 01 00   e.cn.... ........

0050 00 05 42 00 11 02 63 6e 01 6c 06 67 6f 6f 67 6c   ..B...cn .l.googl

0060 65 03 63 6f 6d 00 c0 2b 00 01 00 01 00 00 00 5f   e.com..+ ......._

0070 00 04 cb d0 21 65 c0 2b 00 01 00 01 00 00 00 5f   ....!e.+ ......._

0080 00 04 cb d0 21 64                                  ....!d          

说明:

前面三段分别为以太网包头,ip包头和UDP包头。

3e 3a 为标识字段

81 80 为标志字段,其中设置了QR = 1,RD = 1,RA = 1

00 01 问题数1,00 03 回答数3,其余两个为0。

03 77 77 77 06 67 6f 6f 67 6c 65 02 63 6e 00 表示查询的名字为www.google.com

00 01 为类型,1表示A查询

00 01 为类,1表示Internet数据。

接下来为回答报文,

c0 0c 为域名指针

00 05 表示CNAME(规范名称)

00 01 类,表示为Internet数据

00 00 05 42 生存时间

00 11 数据长度

02 63 6e 01 6c 06 67 6f 6f 67 6c 65 03 63 6f 6d 00 为数据 cn.l.google.cn

然后接下来两段为另外两个回答。

最后的数据为IP地址。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: