dns
DNS介绍:
DNS属于应用层的协议,DNS提供了将人类易于理解的主机名或域名转换为计算机或网络可识别的数字地址的机制,从而使得互连网的广泛应用成为可能。
域名系统
Internet中的域名地址与IP地址是等价的,它们之间通过域名系统DNS进行映射变换。
DNS系统是一种分布式地址信息数据库系统,采用客户机/服务器模式,服务器中包含整个数据库的某部分信息,并供客户查询。
地址解析器:客户方,负责查询域名服务器、解释从服务器返回来的应答、将信息返回给请求方等工作。
域名服务器(Domain Name Server):服务器方,存储并管理着所管辖区域的域名数据库,负责接收来自于地址解析器的请求,按照请求类型,进行递归与非递归查询。同时将查询结果返回给地址解析器(网络中的每台主机既可作为客户方,也可作为服务器方)。
域名数据库:一个大型的分布在整个网络上的分布式数据库,存储了按层次管理的相关的数据,该层次结构可理解为一棵倒放的树,树中的每个结点均代表一个域,并存储着与该域相关的区域和资源记录(RRs),以供域名服务器查询使用。
域名区域
DNS采用了一种树形结构对域名数据库进行组织和管理,树中的每一个节点代表域名系统的域。域可以进一步划分成子域,每个域都有一个域名并由不同的组织管理,并定义了它在数据库中的位置。
在DNS中,一个完整的域名是从该域向上直到根的所有标记组成的字符串,标记之间要用“.”分隔开。
域名区域是由资源记录中的一组授权数据定义的。其内容有:
• 域名区域中所有节点的资源记录。
• 域名区域中顶级节点的信息。如在图7-39中,Exam2.com区域的顶级节点是Exam2.com,Exam2.com节点可保存管理该区域所有节点的信息。
• 委托子区域信息(被委托给本区域中其它子区域管理的区域)。
利用域名区域信息进行域名地址解析
当某个主机请求获得域名payroll.h2.Exam2.com的IP地址时,其地址解析程序首先从树的根节点获得域.com
的域名信息,然后从.com的域名服务器获得其管辖下的子区域Exam2.com的域名信息,这样逐级向下进行查询,直到到达payroll.h2.Exam2.com子区域的域名服务器,并从中获得其相应的IP地址,并反馈给地址解析程序。
域名数据
域名数据分为两类数据:授权数据和缓冲数据。
授权数据是经过授权的数据,该数据来自于负责存储该类数据的域名服务器,授权数据是最近得到的新数据,因而被认为是正确数据。但是时间也长。
缓冲数据是早先请求或交互操作的应答数据,被主机存储在本地缓冲区内。时间短。
查询
当一个域名服务器存储了一个域名查询所请求域的所有授权信息,它可直接给出需要的查询结果,否则,它必须给出具有所需信息的最近的域名服务器,以便继续查询 【区域树中父节点的域名服务器,一旦查询到具有目标域名信息的域名服务器,该域名服务器自动将目标地址信息发送到请求方。否则继续】。
递归查询
A recursive query is one for which the DNS server will fully answer the query (or give an error) by querying other name servers as needed.
一般客户机和服务器之间属递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到结果后转交给客户机。
所谓递归查询是指接收请求的第一个域名服务器必须自始至终对请求进行处理,或向其它域名服务器进行请求且最终获得授权数据,并对请求进行应答。采用递归查询时,当所请求的域名信息在自身缓冲区时,域名服务器直接返回缓冲数据。
【客户端提出域名解析请求(无论以何种形式或方法),并将该请求发或转发给本地的DNS服务器。
本地DNS服务器收到请求后就去查询自己的缓存,
如果有该条记录,则会将查询的结果返回给客户端。
如果DNS服务器本地没有搜索到相应的记录,则会把请求转发到根DNS(13台根DNS服务器的IP信息默认均存储在DNS服务器中,当需要时就会去有选择性的连接)。
根DNS服务器收到请求后会判断这个域名是谁来授权管理,并会返回一个负责该域名子域的DNS服务器地址。(比如查询abc.com的IP,根DNS服务器就会在负责.com顶级域名的DNS服务器中选一个(并非随机,而是根据空间、地址、管辖区域等条件进行筛选),返回给本地DNS服务器。)
本地DNS服务器收到这个地址后,就开始联系对方并将此请求发给他。
负责.com域名的某台服务器收到此请求后,如果自己无法解析,就会返回一个管理.com的下一级的DNS服务器地址给本地DNS服务器,也就是负责管理abc.com的DNS。
当本地DNS服务器收到这个地址后,就会重复上面的动作,继续往下联系,不断重复这样的轮回过程,直到有一台DNS服务器可以顺利解析出这个地址为止。
在这个过程中,客户端一直处理等待状态,他不需要做任何事,也做不了什么。直到本地DNS服务器获得IP时,才会把这个IP返回给客户端,到此在本地的DNS服务器取得IP地址后,递归查询就算完成了。
本地DNS服务器同时会将这条记录写入自己的缓存,以备后用。
非递归查询
A non-recursive query is one in which the DNS server provides a record for a domain for which it is authoritative itself, or it provides a partial result without querying other servers.
一般DNS服务器之间属迭代查询,如:若DNS2不能响应DNS1的请求,则它会将DNS3的IP给DNS2,以便其再向DNS3发出请求;
所谓非递归查询是指接收请求的第一个域名服务器可以返回可靠数据(本身有时),也可以返回指向其它服务器的指针(相当于将查询的接力棒传给了最接近的域名服务器)。
主机的地址解析程序在查询时可以指定是否用递归还是非递归查询方式。非递归查询方式与递归查询方式相比响应速度快。
http://www.zytrax.com/books/dns/ch2/#recursive
http://zhumeng8337797.blog.163.com/blog/static/10076891420110694312990/
资源记录
在一个域名服务器的配置文件里包含若干个资源记录,以帮助地址解析器进行地址解析。
资源记录(Resource Records),简称RRs。它是指每个域所包含的与之相关的资源。
标准的资源记录具有其基本格式:
[name] [ttl] IN type rdata
name:名称字段,此字段是资源记录引用的域对象名,可以是一台单独的主机也可以是整个域。字段值:"."是根域,@是默认域,即当前域,
ttl:生存时间字段,它以秒为单位定义该资源记录中的信息存放在DNS缓存中的时间长度。通常此字段值为空,表示采用SOA记录中的最小TTL值(即1小时)。
IN:此字段用于将当前湖泊记录标识为一个INTERNET的DNS资源记录。
TYPE:类型字段,用于标识当前资源记录的类型,什么样的资源存在于这个RR中
资源记录类型 |
一句话 |
起始授权结构(SOA) |
指出当前区域内谁是 主DNS服务器 |
主机(A) |
将域名FQND映射到IP 正向解析 |
别名(CNAME) |
将A记录指向的域名 指向 另外一个域名 |
邮件交换器(MX) |
指出当前区域内 SMTP邮件服务器IP |
名称服务器(NS) |
指出当前区域内有几个DNS服务器在提供服务 |
反向解析(PRT) |
将IP解析为域名FQND |
http://www.xker.com/page/e2009/1010/81029.html
http://www.docutek.asia/faq/infoblox/288.htm
DNS的报文格式
DNS报文由报头和正文段构成,DNS有四类正文段:查询段、应答段、授权段和附加段。
DNS报头格式
各个字段意义简述如下: • ID(Transaction ID):这是由生成DNS查询的程序指定的16位的标志符。该标志符也被随后的应答报文所用,申请者利用这个标志将应答和原来的请求对应起来。 • QR(Request/response):该字段占1位,用以指明DNS报文是请求(0)还是应答(1)。 • OPCODE(Operation code):该字段占4位,用于指定查询的类型。值为0表示标准查询,值为1表示逆向查询,值为2表示查询服务器状态,值为3保留,值为4表示通知,值为5表示更新报文,值6~15的留为新增操作用。 • AA(Authoritative answer):该字段占1位,仅当应答时才设置。值为1,即意味着正应答的域名服务器是所查询域名的管理机构或者说是被授权的域名服务器。 • TC(Truncation):该字段占1位,代表截断标志。如果报文长度比传输通道所允许的长而被分段,该位被设为1。 • RD(Recursion desired):该字段占1位,是可选项,表示要求递归与否。如果为1,即意味 DNS解释器要求DNS服务器使用递归查询。 • RA(Recursion available):该字段占1位,代表正在应答的域名服务器可以执行递归查询,该字段与查询段无关。 • Z(Reserved):该字段占3位,保留字段,其值在查询和应答时必须为0。 • RCODE(Return code):该字段占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。
DNS正文格式
查询段:
查询段是主机向域名服务器发出的将域名转换为IP地址的请求报文
• QNAME:该字段是可变长字段,其中包含一个被请求的域名,用一系列标签表示,每一个标签由一个八进制后面跟着一个表示长度的八进制数组成。【 For example, the domain microsoft.com is expressed as 0x09microsoft0x03com0x00, where the hexadecimal digits represent the length of each label, the ASCII characters indicate the individual labels, and the final 0 indicates the end of the name.】 • QTYPE: 该字段占16位,指定查询的资源类型(Type),该字段将一个类型值与一条指定的资源记录相匹配(有些通用的QTYPE值可以和与多条资源记录相匹配),其值可以是A(请求主机IP地址)、NS(请求授权域名服务器)或CNAME(请求返回规范名称,或者是某主机使用的与别名对应的真实名称)。 • QCLASS: 该字段占16位,指定查询的类别(Class),如Inet用以表示互联网和IP地址查询。【Represents the IN (Internet) question class and is normally set to 0x0001.】
应答段、授权段、附加段的格式:
域名服务器按照主机查询类型,经过查询资源记录数据库后返回含有资源记录的应答段、授权段或附加段,资源记录告诉主机所查询的信息。也是资源记录。
各字段意义介绍如下:
• NAME:该字段是可变长字段,资源记录对应的域名(与主机发出的查询段中QNAME相同)。
• TYPE:占16位,该字段与查询段中的QTYPE相同。
• CLASS:占16位,该字段与查询段中的QCLASS相同。
• TTL:占32位,该字段表示资源记录的生命周期(以秒为单位),一般用于当地址解析程序取出资源记录后决定保存及使用缓存数据的时间。
• RDLENTH:占16位,该字段表示资源数据的长度(以字节为单位)。
• RDATA:该字段是可变长字段,表示按查询段要求返回的相关资源记录的数据。其TYPE值是A,则返回4个字节的主机IP地址,如果TYPE值是NS,则返回授权域名服务器的域名,如果TYPE值是CNAME,则返回规范名称,或者是该主机使用的与别名对应的真实名称)。
DNS工作流程
在DNS查找域名的过程中,域名服务器为了得到一个IP地址常常需要查询多个域名服务器。
于是,在 查询地址的同时,本地域名服务器也就得到了许多其它域名服务器的信息,像它们的IP地址、所负责的区域等,本地域名服务器将这些信息连同最终查询到的主机 IP地址全部存放在它的缓冲区中,以便将来参考。
当下次解析器再查询与这些域名相关的信息时,就可以直接引用。这样,就大大减少了查询时间。
应答数据例子:
③ 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:对请求域进行管理的另一个授权服务器的域名。
http://technet.microsoft.com/en-us/library/dd197470%28v=ws.10%29.aspx
http://www.shwglm.com/thread-86806-1-1.html?jdfwkey=kvwkm2
http://www.cnblogs.com/BeyondAnyTime/archive/2012/07/17/2593224.html
数组