DNS-域名系统
DNS:本质是一种层次的,基于域的命名方式,并用一个分布式数据库系统加以实现。
DNS命名空间
对于Internet,命名层次结构的顶级由Internet名字与数字地址分配机构(ICANN)负责管理。 从概念上讲,Internet被划分为250个顶级域名,其中每个域涵盖了许多主机,这些域又进一步划成子域,这些子域可以再次被划分。
顶级域名分为
1. 通用的和国家的
2. 地区的
国家或地区域名包括每个国家或地区,它又ISO3166文档定义,2010年推出了使用非拉丁文字母的国际化国家或地区域名,这些使得说阿拉伯,西里尔文,中午或其它语言国家的人以自己的母语来命名他们的主机。
绝对域名总是以句点结束(如eng.cisco.com.)
相对域名必须在一定的上下文环境中被解释才有真正含义
域名不区分大小写,edu,Edu,EDU含义都一样,各组成部分名字最多可以有63个字符,整个路径的名字不得超过255个字符
如果想创建一个新域,则创建者必须得到包含该新域的上级域的许可,一旦创建并注册了一个新域之后,则该新域就可以创建属于自己的子域,而无需得到上级域的认可。
域名资源记录
无论是一台主机的域还是顶级域,每个域都有一组与它相关的资源记录,这些记录组成了DNS数据库。
DNS不仅仅只有把域名转化成IP地址的功能。
当解析器把一个域名传递给DNS时,它将与该域名相关联的资源记录返回。
一条记录是一个五元组,出于效率的话资源记录被编码成了二进制形式,但大多数说明性资料还是用ACSLL文本来表示资源记录。
接下来我们使用如下的格式。
Domain_name Time_to_live Class Type Value
Domain_name(域名) 指明了这条记录适用于那个域,通常每个域有许多条记录,并且数据库的每份副本保存了多个域的信息, Domain_name是匹配查询条件的主要搜索关键字。
**Time_to_live(生存期)**指明了这条记录的稳定程度,越稳定,则这个值被分配的大
Class 对于Internet信息,它总是IN
Type(类型) 指出了这是什么类型的记录
下面是列出的一些重要的类型
类型 | 含义 | 值 |
---|---|---|
SOA | 授权开始 | 本区域的参数 |
A | 主机的IPV4地址 | 32位整数 |
AAAA | 主机的IPV6地址 | 128位整数 |
MX | 邮件交换 | 优先级,愿意接受邮件的域 |
NS | 域名服务器 | 本域的服务器名字 |
CNAME | 规范名 | 域名 |
PTR | 指针 | IP地址的别名 |
SPF | 发送者的政策框架 | 邮件发送政策的文本编码 |
SRV | 服务 | 提供服务的主机 |
TXT | 文本 | 说明的ASCLL文本 |
SOA: 给出来有关该名字服务器区域的主要信息源名称,名字服务器管理员 的电子邮件地址,一个唯一的序号以及各种标志位和超时值。
A : 它包含了某台主机一个网络接口的32位IP地址
AAAA : 包含了一个128位IPV6地址,
某些主机有两个或多个网络接口,这样,他们就有两个或多个A或AAAA资源记录,因此,对于单个域名的查询可能获得多个地址。
MX: 它指定了一台准备接受该特定域名电子邮件的主机名字。(并非每台机器都做好了接收电子邮件的准备,如果有人想发电子邮件到 bill@microsoft.com,则发送主机必须找到在microsoft.com中愿意接受电子邮件的邮件服务器,MX记录就是用来提供这样的信息的)
NS:指明了一台用于所在域和子域的名字服务器(拥有一份某域数据库 副本的主机)
CNAME : 记录允许创建别名,假如一个人打算给MIT计算机科学系名为paul的人发送邮件,它猜测此人的邮箱名是paul@cs.mit.edu,但正确的是csail.mit.edu,MIT可以创建一条CNAME记录指向人和程序正确的方向,为那些不知情的人提供一项服务。
PTR: 与CNAME一样,它指向另一个名字,但是CNAME是一个宏定义,而PTR是一种正规的DNS数据类型,它的确切含义取决于所在的上下文,实际上,PTR几乎总是被用来将一个名字于一个IP地址关联起来,以便能够通过差评IP地址来获得对应机器名字(逆向查询)
SPF: 它可以让一个域把邮件服务信息进行编码,即域内哪台机器负责把邮件发送到Internet其余地方。这条记录有助于接受机器检查邮件是否有效。(检查垃圾邮件)
TXT: 最初为了允许域以任何方式标识自己而提供的一种途径。
还有Value 字段,该字段的值可以是一个数字,一个域名,或者一个ASCLL字符串,其语义取决记录的类型。
域名服务器
在理论上,一台域名服务器就可以包含整个DNS数据库,并响应所有对该数据库的查询,但实际上,这台服务器会因为负载过重而毫无用处
为了避免由于单个信息源带来的各种问题,DNS名字空间被划分为一些不重叠的区域。每个圈起来的区域包含域名树的一部分。
区域边界应该放置在区域中的什么位置由该区域的的管理员来决定。(取决于需要在哪里使用多少个名字服务器)
每个区域都于一个或多个域名服务器关联,这些服务器是持有该区域数据库的主机,通常情况下,一个区域有一个主域名服务器和一个或多个辅域服务器。主服务器从自己磁盘的一个文件读入有关域名的信息,辅域服务器从主域名获取域名信息,为了提高可靠性,一些域名服务器可以设置在区域外面。
DNS解析原理
1.本地查询
1.在浏览器中输入域名(如 www.baidu.com),操作系统会先检查自己本地的hosts文件是否有这个网站映射关系,如果有,就先调用这个IP地址映射,完成域名解析
2.如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个
3.如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,我们叫它本地DNS服务器,在其中查找
2.客户机到服务器查询
1.本地DNS服务器收到查询时,如果要查询的域名,包含在本地文件配置区域资源中,则返回解析结果给客户机,完成域名解析。(具有权威性,不过它是相对于缓存记录而言的,有可能过期)
2.如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
3.如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询。
3.服务器到服务器查询
1.如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com),是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP,本地DNS服务器收到IP信息后,将会联系负责该域(.com)名的这台服务器,如果这台服务器无法解析,就会找一个管理.com域的下一级DNS服务器(qq.com)给本地DNS服务器,当本地DNS服务器收到这个地址后,就会找qq.com,如此重复,进行查询,直到找到www.qq.com
2.如果采用转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器不能解析,就会找上上级或找根DNS服务器,以此循环。
不管是本地DNS服务器是转发还是非转发,最后都是把结果给本地DNS服务器,然后本地DNS服务器再返回给客户机.
4.递归查询和迭代查询
4.1 递归查询(客户端到本地DNS服务器之间的查询就是递归查询)
主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,想其它根域名服务器继续发出查询请求报文(替主机进行查询,而不是让主机进行查询)
4.2 迭代查询(服务器之间的查询就是迭代查询)
当根服务器收到本地服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器下一步要向哪一个服务器进行查询。
)
1. 递归查询看起来似乎比迭代查询更优一点,为什么还要有迭代查询呐?
因为许多域名服务器尤其是根服务器要接受来自各种服务器的查询,如果采用递归的话就会承载不了,而迭代查询则是把重负压在了发起方。
2.高速缓存并不具有权威性
因为在一个域名服务器可能会发送信息变化,而这样的话,不可能传播到世界上所有缓存这条信息的服务器,索引,在资源记录中添加了Time_to_live字段,对应不常变化的IP地址,这个字段的值就大,缓存的时间就长,而经常变化的IP地址,那么这个字段的值就小。