DNS 是计算机域名(域名管理系统) Domain Name System 的缩写,它是由解析器和域名服务器组成的。工作在应用层 监听在udp/tcp 53号端口 udp响应域名解析请求 tcp用于主从服务器的数据同步,这是网络服务中最基础的应用之一。
其实最初的名称解析都是靠一个文件来实现的,LINUX系统在/etc/hosts文件里可以配置,Windows里也有hosts文件在\WINDOWS\system32\drivers\etc下,在这里我们也可以设置名称解析条目。但是到后来PC机的出现,以及www的发展,互联网呈现爆炸式发展,这就催生了域名解析服务DNS。
DNS采用类似于目录数结构的等级管理(倒置的树状结构):
. 位于最上层 所有域名服务器的跟服务器。(全球有13个根节点,日本和欧洲各一个,其余的全位于美国)
顶级域(又称一级域通常指组织域,国家域等)常见的如.com .org .cn .net等
二级域名 一般我们申请域名的时候申请的都是二级域(我们在申请到而二级域后可以划分63级子域,每级的字符串长度可以长达127位但是一般我们都不会用到)
我们在使用域名的时候都是从下向上追溯的,如我们平时用的其实完整的写法应为.最后的.(点)是存在的,早期的域名必须以“.”结尾 ,这样DNS才能够进行域名解析,如今DNS服务器已经可以自动补上结尾的"."。
DNS本身可以说是一个数据库类似于hosts文件里面存储的是各种记录,常见的记录类型有以下几种:
A记录,FQDN-->IP,将域名解析为IP地址
PTR,指针记录,IP-->FQDN,将IP地址解析为域名
NS(Name Server)记录,DOMAIN-->SERVER 用于说明当前域的域名服务器
MX(Mail exchanger)记录,DOMAIN-->MTA 用于表明当前域的邮件服务器
CNAME记录,ALIAIS-->CNAME(正式名称),正式名称解析类型
SOA (start of authority)起始授权记录 表明一个域的主域名服务器
DNS服务器的类型:
主服务器
辅助服务器(从服务器)
缓存名称服务器
这个比较简单,一会儿会有实际的配置过程供参考!这里稍微说下这几个服务器扮演的角色或者说是作用是什么,为了保证服务的可用性一个域内会有多个DNS服务器, 但只有一个主域名服务器负责域名解析,辅助服务器通过区域传送保证与主服务器保持数据同步,只有在主服务器当掉的时候才临时发挥域名解析的作用,要知道辅助服务器的数据文件都是从主服务器同步而来的,所以主服务器当掉一段时间后辅助服务器也将失去作用(戏称为殉情),而缓存服务器的主要作用是提高查询速度,节约带宽!(稍后介绍查询过程后可能会更容易理解)这里说下辅助服务器同步数据的方式——区域传送,主要有俩种方式:
完全区域传送axfr,按名字理解就是完全数据同步,将区域内所有的数据全部传送给辅助服务器。
增量区域传送ixfr,也很容易理解吧,即只传送区域内变化的数据。
但还有一种机制notify,通知的机制防止一些意外情况的发生导致数据不同步的情况,如辅助服务器刚同步过数据,此时主服务器的一条数据发生了变化,正在此时,主服务器当掉了,此时辅助服务器的数据就与主服务器的数据不同步,在顶上做域名解析服务的时候就会发生错误的解析,这是我们不希望看到的状况吧!而notify的机制就是解决这种问题的,即当主服务器的数据发生变化后会主动通知辅助服务器来同步数据,而不管是否到了同步时间。在一会儿配置的时候会有这些字段的设置说明!
除了以上3种外还有一种转发器,不做任何域名解析的动作,只用来转发解析请求,一般用于位于防火墙两端的解析请求!
DNS的查询类型:
递归查询
迭代查询
简单的说明下,递归查询:这种查询方式客户端只发送一次解析请求就要得到最终结果。
迭代查询:这种查询方式是当客户端一个DNS服务器发送解析请求后,若此请求解析的域并非是本DNS服务器管理的域而此DNS服务器知道管理此域的DNS服务器,就将这个能可能能解析此请求的DNS服务器的地址返回给客户端,而客户端再像这个DNS服务器发送解析请求,以这种模式进行循环的查询方式称为迭代查询。
举个简单的例子说明下吧,假如说现在有客户端A,俩台DNS服务器B和C。场景A向B发送解析请求而B并不知道结果且B知道C知道结果,(注意场景的描述)递归查询的模式:A向B发送请求,B接受到请求后再把请求发送给C,C将查询结果发送给B,B再将结果发送给A,完成解析过程。迭代查询模式:A向B发送请求,B接受到请求后,将C的地址发送给A,A再向C发送请求,C将结果发送给A,完成解析。不知道这样说清楚了么?!
由此可见递归查询是十分耗资源的,所以在实际的应用中客户端向本地DNS服务器发送请求时采用的是递归查询,而本地DNS服务器向互联网发送查询请求的过程则是迭代模式的。
DNS的解析方式:
正向解析:FQDN-->IP
反向解析:IP-->FQDN
上面已经说过记录的概念,无论进行正向解析还是反向解析都需要一个独立的数据文件的支持,而这个数据文件就被称为区域。
所以大家也稍微理解了区域和域的概念了吧!简单的说,域是一个逻辑概念(一个逻辑范围的集合),区域则是一个物理概念,是独立的数据文件(在LINUX配置文件中用关键字zone来定义稍后会有说明)。下面是来源于其他资料的解释:
通常,DNS 数据库可分成不同的相关资源记录集。其中的每个记录集称为区域。区域可以包含整个域、部分域或只是一个或几个子域的资源记录。
管理某个区域(或记录集)的 DNS 服务器称为该区域的权威名称服务器。每个名称服务器可以是一个或多个区域的权威名称服务器。
在域中划分多个区域的主要目的是为了简化 DNS 的管理任务,即委派一组权威名称服务器来管理每个区域。采用这样的分布式结构,当域名称空间不断扩展时,各个域的管理员可以有效地管理各自的子域。
有时,区域和域是很难分辨的。
区域是域的子集。可以将它看作域名称空间的某个分支(或子树)。例如,Microsoft 名称服务器可以同时是区域、区域和区域的权威名称服务器。但是,可以将子域的区域委派给其它专用名称服务器管理。如果设置的区域包含整个域的资源记录,那么该区域与该域的范围是相同的。
DNS查询流程:
1、当客户机提出查询请求时,首先查询自己的hosts文件,然后查询本地DNS缓存(dns cache)信息。如果在本地无法获得查询信息,则将查询请求发给本地DNS服务器。
2、首先客户机将域名查询请求发送到本地DNS服务器,本地DNS服务器先查找自己的缓存信息,如果没有则查看是否是自己管理的域,如果是则将查询结果返回给客户端,如果不是则本地DNS服务器直接向根域名服务器发送请求。(这里需要说明的一点是,所有的低级域名服务器都不知道直属上级域名服务器的地址而都只知道根域名服务器的地址)
3、根域名服务器负责解析客户机请求的根域部分,它将包含下一级域名信息的DNS服务器地址返回给客户机的DNS服务器。
4、客户机的DNS服务器利用根域名服务器解析的地址访问下一级DNS服务器,得到再下一级域的DNS服务器地址。
5、按照上述迭代方法逐级接近查询目标,最后在有目标域名的权威DNS服务器上找到相应IP地址信息。
6、客户机的本地DNS服务器将递归查询结果返回客户机。
7、客户机利用从本地DNS服务器查询得到的IP访问目标主机,就完成了一个解析过程。
结合以上的过程是否对迭代和递归查询的方式有更深一步的理解了呢?!对缓存服务器能节约带宽,提高查询效率的概念是否也有所感悟呢!下面给出几个常用的术语解释:
术语 |
说明 |
域 |
代表网络一部分的逻辑实体或组织 |
域名 |
主机名的一部分,它代表包含这个主机的域。它可以和域交换使用 |
主机 |
网络上的一台计算机 |
节点 |
网络上的一台计算机 |
域名服务器 |
提供DNS服务的计算机,它将DNS名字转化为IP地址 |
解析 |
把一个DNS服务器转化为与其相映的IP地址的过程 |
解析器 |
从域名服务器中提取DNS信息的程序或库子程序 |
反向解析 |
将给出的IP地址转化为其相映的DNS名字 |
欺骗 |
使网络看上去好象具有不同的IP地址或域名的行为 |
基础的部分到此结束,有不足的希望能指出,以助于补充和分享。
DNS常见的服务软件:
全球标准的服务器软件:bind,Berkeley Internet Name Domain Berkeley大学太N了!目前交由isc Internet Systems Consortium 互联网系统委员会维护,他们主要维护两个软件DHCP,BIND。在下篇中会介绍BIND的安装及简单的配置应用。
阅读(1249) | 评论(0) | 转发(0) |