DNS:域名系统

    域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息。从应用的角度上看,对DNS的访问是通过一个地址解析器(resolver)来完成的。由于DNS底层逻辑方面太复杂了,所以我仅从数据报方面分析如何应用DNS解析地址,只要学会如何使用就行,原理方面在后面深入。

DNS基础

    

图为DNS的命名空间,和Unix的文件系统相似,也具有层次结构。

    命名树上任何一个结点的域名就是将从该结点到最高层的域名串连起来,中间使用一个点“.”分隔这些域名;以点“.”结尾的域名称为绝对域名完全合格的域名FQDN(Full Qualified DomainName),例如sun.tuc.noao.edu.。如果一个域名不以点结尾,则认为该域名是不完全的。如何使域名完整依赖于使用的DNS软件。如果不完整的域名由两个或两个以上的标号组成,则认为它是完整的;或者在该域名的右边加入一个局部后缀。例如域sun通过加上局部后缀.tuc.noao.edu.成为完整的。


DNS的报文格式

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

1)标识字段由客户程序设置并由服务器返回结果。客户程序通过它来确定响应与查询是否匹配。

2)16 bit的标志字段被划分为若干子字段,如下图所示。

                                

我们从最左位开始依次介绍各子字段:

  1. QR是1bit字段:0表示查询报文,1表示响应报文。
  2. opcode是一个4bit字段:通常值为0(标准查询),其他值为1(反向查询)和2(服务器状态请求)。
  3. AA是1bit标志,表示“授权回答(authoritative answer)”。该名字服务器是授权于该域的。
  4. TC是1bit字段,表示“可截断的(truncated)”。使用UDP时,它表示当应答的总长度超过512字节时,只返回前512个字节。
  5. RD是1bit字段表示“期望递归(recursion desired)”。该比特能在一个查询中设置,并在响应中返回。这个标志告诉名字服务器必须处理这个查询,也称为一个递归查询。如果该位为0,且被请求的名字服务器没有一个授权回答,它就返回一个能解答该查询的其他名字服务器列表,这称为迭代查询。在后面的例子中,我们将看到这两种类型查询的例子。
  6. RA是1bit字段,表示“可用递归”。如果名字服务器支持递归查询,则在响应中将该比特设置为1。在后面的例子中可看到大多数名字服务器都提供递归查询,除了某些根服务器。
  7. 随后的3bit zero字段必须为0。
  8. rcode是一个4bit的返回码字段。通常的值为0(没有差错)和3(名字差错)。名字差错只有从一个授权名字服务器上返回,它表示在查询中制定的域名不存在。

3)随后的4个16 bit 可变字段说明最后4个变长字段中包含的条目数。对于查询报文,问题(question)数通常是1,而其他3项则均为0。类似地,对于应答报文,回答数至少是1,剩下的两项可以是0或非0。

详细说明DNS查询报文中的问题部分

                            

        (*1)查询名是要查找的名字,格式如下图显示了如何存储域名gemini.tuc.noao.edu,它是一个或多个标识符的序列。每个标识符以首字节的计数值来说明随后标识符的字节长度,每个名字以最后字节为0结束,长度为0的标识符是根标识符。

                            

        (*2)查询类型每个问题有一个查询类型,而每个响应(也称一个资源记录,我们下面将谈到)也有一个类型。

                            

                最常用的查询类型是A类型,表示期望获得查询名的IP地址。一个PTR查询则请求获得一个IP地址对应的域名。

        (*3)查询类通常是1,指互联网地址(某些站点也支持其他非IP地址)。

DNS响应报文中的资源记录部分

            DNS报文中最后的三个字段,回答字段、授权字段和附加信息字段,均采用一种称为资源记录RR(Resource Record)的相同格式。下图显示了资源记录的格式。

                        

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

类型说明RR的类型码。它的值和前面介绍的查询类型值是一样的。

通常为1,指Internet数据。

生存时间字段是客户程序保留该资源记录的秒数。资源记录通常的生存时间值为2天。

资源数据长度说明资源数据的数量。

资源数据的格式依赖于类型字段的值。对于类型1(A记录)资源数据是4字节的IP地址。


该篇总结了DNS的报文格式,希望你喜欢。

该文章大部分段落取材于《TCP/IP详解 卷1:协议》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值