DNS介绍
简介
域名系统(Domain Name System)是一种分层的分布式命名系统,用于连接到互联网或互联网上的计算机、服务或其他资源。它将更容易记忆的域名转换为使用底层网络协议定位和识别计算机服务和设备所需的数字IP地址.
域名服务器发展历史
DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
域名系统的发展要从ARPAnet网络的发展说起,DNS就是为了解决ARPAnet的一些问题而开发的。ARPAnet是美国国防部在20世纪60年代建立的一个试验性计算机网络, 通过这个网络,美国的一些重要研究部门之间能够传输电子文件,共享软件,交换电子邮件。TCP/IP协议在20世纪80年代开发,之后成为了ARPAnet网路上主机间通讯的标准协议。后来BSD UNIX操作系统也采用了TCP/IP协议。由于BSD UNIX的系统是免费的,之前那些没有加入到ARPAnet上的计算机,就很容易的加入到ARPanet网络,这些计算机通过ARPAnet连接到局域网开始进行通讯。 随着连接到网络的主机数量慢慢变多,ARPAnet也变成了TCP/IP网络的主干,也就是后来的因特网。
最初ARPAnet网络上只有几百台主机。该网络中的计算机的主机名是通过使用位于集中管理的服务器上的单个HOSTS文件来管理的。ARPAnet网络内的主机通过ftp的方式定期从这个服务器获取最新的HOST文件。当ARPAnet使用了TCP/IP作为标准协议之后,加入网路的用户出现了暴增,从屈指可数变成了成千上万,随着主机数量的增加,更新过程产生的流量以及HOSTS文件的大小也随之增加。对提供诸如可扩展性,分散管理,一致性等需求变得越来越明显。于是DNS系统应运而生,DNS系统是一个分布式数据库系统,这种分布式设计使数据库的各个部分能被分散管理,并且通过C/S模式,这些分散的数据对整个互联网都可用。
域名
DNS是一个分布式数据库,它用域名做索引,可以把域名看做一个很大的逆向数,每个域名是这课树上从叶子到树根的一条路径。
树的最大深度为127层,每个节点由一个字符串构成,这个字符串的最大长度是63,域名的写法就是由叶子节点顺着树往上一直到根节点,中间用符号“.”连接。一般的域名深度只有三四层,每个标签的字符也只有几个。比如www.google.com, www.baidu.com等 。
在DNS系统中,域名的格式并没有特别的规定。域名的标签可以用任何ASCII码组成。但是在互联网上,域名还是有分类的,例如com用于商业组织,edu用于教育机构等。
域名资源记录
在DNS系统中,域名当做索引,而域名资源记录则保存着域名的主机信息。资源记录有很多种,不同的资源类型对应着不同的主机信息。
SOA记录,记录了一个域名下的数据,最权威的数据来源,域名的SOA记录中记录的域名服务器,就是该域名的权威服务器。一个域名只能有一个SOA记录。
SOA记录中包含的信息有权威域名服务器、域名管理者的邮件地址和用来标识版本的序列号等。
NS记录是DNS系统分布式架构的最重要的记录,通过NS记录,域名管理员可以把自己域名下的子域名授权给它的服务器解析。DNS的分布式架构就是通过NS记录一层一层的往下授权形成的。
CNAME记录是域名的别名。当多个域名指向同一个IP地址时,可以将其中的一个域名指向这个IP地址,其他的域名的别名指向这个域名。如今CNAME记录在CDN中很重要。如果域名管理员想把一个子域名授权给其他人解析,而不想把整个子域搜全出去,这时候就可以吧子域名指向别人域名下的一个别名,别人通过别名直接间接的控制域名的解析。
DNS服务器
DNS服务器按功能分可以分为三种服务器
- 权威型(Authoritative-Only)。权威域名服务器是为域名管理员管理配置域名专门建立的服务器。域名资源的最原始数据就是来自权威域名服务器。权威域名服务器的权威是针对域名而言的,一个权威服务器可以同时对多个域名具有权威性,一个域名只能有一个权威域名服务器。权威域名服务器对于授权给自己的域名解析很快,因为所有的资源记录都在本地保存,而不用去查询其它的服务器。权威域名服务器可以不去响应递归的请求,因为权威服务器的作用就是管理授权给自己的域名。权威域名服务器只充当服务器的角色,对于客户端的查询请求,要么告诉其答案,要么告知其可以去哪台服务器去查询。
- 缓存型(Caching)。缓存型DNS服务器没有自己的资源记录,所有的资源记录都是来自别的权威服务器。缓存型DNS服务器不对任何域名具有权威性,它主要处理递归请求。相对于权威服务器,缓存服务器对用户来说更友好,因为缓存服务器接管了用户的递归请求,它负责替用户执行从跟服务器到域名服务器整个查询过程,并且把结果缓存到本地,下次用户再来查询或者其他用户查询相同的内容,就可以直接在缓存中查询结果,直接返回给用户,再某些情况下,缓存服务器能够更快的相应客户端的信息。各大网络运营商下的域名服务器一般都是缓存型域名服务器。
- 转发型(Forwarding)。转发型域名服务器和缓存型域名服务器对客户端来说在某种程度上,它们的作用是一样的,但转发型域名服务器和缓存型域名服务器的工作方式和用途是有很大不同的。缓存型域名服务器处理递归请求,当接收到客户端的域名请求时,他会递归处理这个消息,从根服务器往下挨个请求,最终获取查询的主机信息。缓存型域名服务器得到的信息都是从权威服务器获取的,所以一般缓存型域名服务器返回的消息都是可靠的,但是转发型域名服务器不会处理递归请求,它只是把客户端的请求转发到上级域名服务器,相当于一个代理。如果转发型域名服务器的上级域名服务器被污染了,那么转发型域名服务器也会被污染。如果一个网络需要对内网外网用户进行不同的解析,或者针对特殊的域名让特殊的域名服务器来解析,这时候就用得到转发型域名服务器。
DNS委托授权
DNS数据库可以分成多个区域。区域文件在DNS服务器上维护。单个DNS服务器可以配置为托管零个,一个或多个区域。全球一共有13台根服务器(名称上),互联网上所有的域名解析权都归根服务器所有,但是任凭根服务器的处理能力有多强大,也顶不住全球几十亿用户的同时请求。DNS根服务器用授权的方式将一些已com、org、edu、net等结尾的域名授权给其他的服务器解析。这些被授权的服务器称为权威服务器。它们对授权给它们的域名解析具有权威性。这些权威服务器还可以继续往下授权,例如跟服务器将cn结尾的域名授权给CNNIC(中国互联网信息中心)管理,CNNIC可以将cn域名下的域名进一步授权给其他的服务器,比如edu.cn授权给中国教育部门,之后中国教育部门可以将edu.cn下的域名分配给全国各地高校。DNS分层分布式系统就是这样一层一层往下授权形成的。
DNS协议
DNS协议是TCP/IP模型应用层中的一部分
DNS顶层消息格式
+---------------------+
| Header |
+---------------------+
| Question | the question for the name server
+---------------------+
| Answer | RRs answering the question
+---------------------+
| Authority | RRs pointing toward an authority
+---------------------+
| Additional | RRs holding additional information
+---------------------+
DNS消息的顶层被分为5个部分,(有些情况,他们中的一些部分是空的,比如查询包的Answer部分, Authority部分和 Additional部分是空的,响应包中的Authority部分,Additional部分也可能是空的)
header头部格式
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ID |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
|QR| OPCODE |AA|TC|RD|RA| Z | RCODE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QDCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ANCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| NSCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| ARCOUNT |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
ID: 16位,由程序分配,用来匹配查询和响应。(一次查询中,请求包和响应包的ID应该相同)
QR: 1位,规定是查询(0)还是响应(1)
OPCODE: 4位,规定查询种类(1)标准查询,(2)反向查询(3)服务器状态请求,(3-15)保留
AA: 1位,权威应答,在响应中有效,说明响应的服务器是问题的权威服务器
TC: 1位,截断,表示由于消息长度大于传送通道上的长度而被截断,TCP中使用
RD: 1位,期望递归查询,查询中可以设置为1,可以被复制到响应中,期望服务器进行递归查询
RA: 1位,递归可用,响应中表示是否支持递归查询
Z: 3位,保留字段,必须置0
RCODE:4位,响应代码,响应的一部分
QDCOUNT: 16位,无符号整数,规定问题部分问题的数量
ANCOUNT: 16位,无符号整数,规定回答部分资源记录的数量
NSCOUNT: 16位,无符号整数,规定权威部分名称服务器资源记录的数量
ARCOUNT: 16位,无符号整数,规定附加部分资源记录的数量
QUESTION问题格式
问题部分在大多数查询中携带问题,通常问题的数量QDCOUNT为1
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ QNAME /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QTYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| QCLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
QNAME: 长度不定,用数字加标签的序列表示,数字占8位,紧跟着是该数字长度的标签,数字是<0>代表结束。(例如:<3>www<5>baidu<3>com<0>)
QTYPE: 16位,规定查询的类型(A,NS,PTR等等)
QCLASS: 16位,规定查询的类。对于互联网通常是IN
ANSWER部分格式
Answer, Authority, Additional部分具有相同的格式,可变数目的资源记录,其中记录的数量和首部计数字段相对应.
1 1 1 1 1 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| |
/ /
/ NAME /
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TYPE |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| CLASS |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| TTL |
| |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
| RDLENGTH |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
/ RDATA /
/ /
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
NAME:长度不定,该资源记录匹配的域名
TYPE:16位,该资源记录的类型
CLASS:16位,该资源记录的类,通常是IN
TTL:32位,无符号整形,生存周期(单位:秒), 超过该时间后,该记录会被抛弃
RDLENGTH:16位无符号整形,规定RDATA的长度,(以8位为单位)
RDATA:该记录记录的内容,格式随TYPE和CLASS改变。例如,TYPE是A和CLASS是IN, 则RDATA是4个8位位组的互联网地址。