企业网络基础服务-域名解析服务-DNS

企业网络基础服务-域名解析服务-DNS

Scroll Down

一、DNS

DNS(domain name system,域名系统)是一个联机分布式数据库系统,为用户和互联网应用提供核心的域名到IP地址的转换

名称解析(域名解析):域名到IP地址的转换的过程

以下三问了解DNS存在的合理性、重要性:

  • 为什么需要将域名转换成IP地址?因为IP地址不方便人类记忆,于是人类用域名来唯一标识一个IP地址,而域名能让人类更容易记住。而计算机处理数据报时只能识别IP地址,所以需要做域名到IP地址的转换。所以总结就是IP地址让计算机更方便的处理数据报,而域名是让人类更方便的间接记住某台主机的IP地址
  • 为什么DNS很重要?由于很多应用层软件经常直接使用DNS,同时用户也是会间接使用到DNS,DNS为互联网的各种应用层提供了核心服务,所以DNS在现代互联网中是非常重要的存在。
  • DNS为什么采用分布式数据库系统?理论上讲DNS完全可以只需要一台域名服务器,但是单台服务器的性能和处理速度跟不上全球使用互联网用户的访问请求,所以分布式这个概念就存在了,并且在很多领域都得以运用,DNS也不例外。而且一旦域名服务器出现故障,那么全球的用户就无法使用域名来访问其他计算机资源。所以对于一个提供庞大用户的服务,需要考虑冗余性和性能等诸多因素。分布式数据库系统+层次树状结构命名法形成了DNS。

dns1.png

1、DNS性能

DNS使用了分布式数据库系统,并采用了C/S架构(client/server),DNS让大多数的名称解析在本地进行(即本地解析,local resolve),仅有少量的解析需要通过互联网通信,因此DNS的效率很高。

2、DNS冗余性

分布式数据库系统的特点就是即使单台服务器出现故障,也不会妨碍整个DNS的正常运行

以下三问了解DNS名称的由来、计算机如何处理域名、分布式DNS的重要性:

  • 为什么叫域名系统而不叫名字系统?
    因为互联网的命名系统中使用了许多的域(domain)
  • 为什么计算机在处理IP数据报时要使用IP地址而不是域名呢?
    因为IP地址长度固定32位(即使是IPV6也是固定128位),而域名的长度并不是固定的,计算机处理起来比较困难
  • 理论上来说,一台服务器不就可以记录全世界的主机名与IP的映射么?
    理论是可以,但是考虑到互联网规模宏大,如果是这样,会导致这台域名服务器超负荷而无法正常工作,而且一旦域名服务器出现故障,整个互联网就会瘫痪,没有冗余性。所以互联网采用了层次树状结构的命名空间,并使用分布式的域名系统。

二、DNS域名结构

1、层次树状结构命名语法

经过多年的发展,DNS采用了层次树状结构(即等级命名)的命名空间,采用这种方法,任何一个连接在互联网上的主机或路由器都有唯一的名字,即域名(domain name)。域是命名空间中的一个可被管理的划分,域可以划分子域,子域还能划子域,这样就形成了顶级域、二级域、三级域等等。

dns2.png

命名语法:

  • 每一个域名由标号和点构成
  • 标号由英文字母和数字组成,每一个标号不超过63个字符(一般不超过12个),中除了 – 外不能有其他任何特殊符号,不区分大小写
  • 低级别域名写在最左边,顶级域写在最右边
  • 完整域名不超过255个字符

2、层次树状命名分类与管理

一般被分为了顶级域名、二级域名、三级域名、四级域名(一般出现在以国家顶级域名后),每级域由上一级的域名管理机构管理,而顶级域由ICANN管理。用这种方法可以使得每个域名在整个互联网范围内是唯一的,并且容易设计出一种查找域名的机制。

FQDN:完全限定域名,即每个域在全球唯一,域不是域名,比如goole.com是域,www.google.com是域名

1)顶级域名

顶级域名:国家顶级域名(nTLD)、通用顶级域名(gTLD)、基础顶级域名

dns3.png

顶级域名一般分为三大类:

  • 国家顶级域名:cn(中国)、us(美国)、jp(日本)、uk(英国)……共296个国家顶级域名
  • 通用顶级域名:com(商业公司)、net(网络服务机构)、org(非盈利组织)、edu(教育机构)、gov(政府机构)、mil(军事部门)、aero(航空运输)、asia(亚太)……等20个,值得注意的是ICANN在2011年通过了新通用顶级域名,任何个人、组织和机构都可以向ICANN申请新通用顶级域,新通用顶级域名被认为是真正的商业顶级域名。比如谷歌在2015年以2501万美元击败其他公司拿下了.app顶级域名,在比如.top也是属于新通用顶级域,一般用于个人和企业注册。
  • 基础结构域名:arpa用于反向域名解析

2)二级域名

二级域名:nTLD下注册的二级域名由该国家自行决定,其他顶级域名下注册的二级域名企业和个人自行决定

dns4.png

我国将二级域名划分为类别域名和行政类域名:

  • 类别域名7个(属二级域名):ac(科研)、com(工、商、金融)、edu(教育)、gov(政府)、mil(军事)、net(互联网服务提供机构)、org(非盈利)
  • 行政类域名34个(属二级域名):bj(北京)、sh(上海)、ah(安徽)……

3)三级域名

三级域名:一般由公司、组织自行为服务器/主机命名,比如著名的www(泛指web服务器)、email(泛指电子邮件服务器)

指明泛指和特指,如果www有属于特定的域名(比如www.epiol.top),那么就是特指,如果没有则是泛指。

4)FQDN

dns5.png

通过等级命名形成的域名树,最终每台主机都会有一个全球唯一的域名,比如

三、DNS域名服务器

既然DNS是分布式数据库系统,那么就需要了解如何进行分布式。DNS采取划分区这个方法来提升DNS的运行效率。一个服务器所负责管辖(即拥有权限)范围叫做区,各公司或组织根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器(authoritative name server),用来保存该区中的所有主机的域名到IP的映射。

域名服务器:名称解析的应用程序所在的服务器

DNS不是以域为单位,而是以区为单位。区≤域,不可能大于域!

dns6.png
上图权限域名服务器为:abc.com,因为只有一个区

dns7.png
上图权限域名服务器为:abc.com和y.abc.com,因为有两个区

1、根域名服务器

根域名服务器(root name server)是最高层次及最重要的域名服务器。所有的根域名服务器都知道存有各种顶级域名的顶级域名服务器的域名和IP。根域名服务器是最重要的域名服务器,因为不管是哪一个本地域名服务器,若要对互联网上任何一个域名进行解析,只要自己无法解析,那么首先求助于根域名服务器。假定所有的根域名服务器瘫痪了,那么DNS就无法工作。

截至2016年,全球有588个地点安装了根域名服务器,但是这么多根域名服务器却只使用13个不同IP地址的域名,即a.rootservers.net、b.rootservers.net、……、m.rootservers.net每个域名下的根域名服务器由专门的公司或美国政府某个部门负责运营。虽然互联网的根域名服务器总共只有13台机器,但是不表示根域名服务器只由13台机器组成。实际上在互联网中是由13套装置构成这13组根域名服务器。每一套装置在很多地点安装根域名服务器(也称镜像根服务器),但都是使用同一域名。

由于一组根域名服务器采用了任播技术,因此当DNS客户向某个根域名服务器的IP地址发出查询报文时,互联网上的路由器就能找到离这个DNS客户最近的一个根域名服务器。这样不仅加快了DNS查询过程,也合理的利用了互联网的资源。

2、顶级域名服务器

顶级域名服务器负责管理所有的二级域名,当收到DNS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当查找的域名服务器的IP地址)

3、权限域名服务器

权限域名服务器负责一个区的域名服务器,当一个顶级域名服务器不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪个权限域名服务器。如上图的区abc.com和y.abc.com各设有一个权限域名服务器。

4、本地域名服务器

本地域名服务器(或缓存域名服务器,cache domain server)对DNS也非常重要,当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。每一个ISP(/大学/大学计算机系)都可以拥有一个本地域名服务器

dns8.png
如上图首选DNS服务器和备用DNS服务器的IP地址就是指本地域名服务器。本地域名服务器离用户比较近,一般不超过几个路由器的距离,当所要查询的主机也属于同一个本地ISP时,该本地域名服务器就能将所查询的域名转换成IP地址,而不需要去询问其他的域名服务器。

  • 当使用桌面路由器时,桌面路由器会下发DNS服务器地址为内网PC的首选DNS服务器,桌面路由器收到PC的DNS查询请求后,会转发查询请求给ISP的本地域名服务器去查询。所以桌面路由器充当了转发的作用,也称为转发域名服务器
  • 如果企业环境下有AD域,那么一定有DNS服务器支持,这个DNS服务器的功能拥有本地域名服务器的功能(即缓存)和转发域名服务器的功能(即转发DNS请求)。

四、DNS查询方式

DNS被设计成联机分布式数据库系统,并采用C/S的架构。大多数的名称解析都在本地进行解析(resolve),仅少量解析需要在互联网上通信,因此DNS的效率很高。

域名解析流程:当一个应用程序进程需要进行域名解析时所经过的一系列动作

dns9.png
应用进程获得目的主机的IP地址后即可进行通信。若本地域名服务器中没有该对应的映射,那么本地域名服务器就会向其他的域名服务器发出请求报文,这种过程直至找到能够回答该请求的域名服务器为止。使用UDP是为了节省开销

DNS可以使用UDP,也可以使用TCP,只是使用UDP更为合理

1、hosts文件

以前整个网络上只有数百台计算机,那时只需要使用hosts文件,列出所有主机名-IP地址的对应,只要用户输入一台主机名,计算机可以很快的把这台主机名转换成IP地址。但是随着互联网的发展,hosts文件已经不能满足需求了,产生了DNS。尽管有了DNS,计算机在查询域名时也是先会查询hosts文件中是否有对应条目,有就直接访问该域名对应的IP地址,没有则成为DNS客户,查询域名对应的IP地址。

2、迭代查询

迭代查询:发出多次DNS-query查询不同的DNS服务器,本地域名服务器向根域名服务器的查询

迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,告诉本地域名服务器:“你下一步应当向哪个域名服务器进行查询”。然后让本地域名服务器进行后续的查询(而不是替本域名服务器进行后续的查询)。根域名服务器通常是把自己知道的顶级域名服务器的IP告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到域名服务器的查询请求后,要么给出所要查询的IP,要么告诉本地域名服务器下一步应当向哪一个权限域名服务器进行查询,本地域名服务器就这样进行迭代查询。最后知道了所要解析的域名的IP地址,然后把结果返回给发起查询的主机。

本地域名服务器默认采用迭代查询方法的查询图示:

dns10.png

第2~7步是迭代查询:

  1. 主机向本地域名服务器发起查询(www.epiol.top对应的IP地址是多少?)
  2. 本地域名服务器不知道,默认开始执行迭代查询,向一个根域名服务器查询(www.epiol.top对应的IP地址是多少?)
  3. 根域名服务器告诉本地域名服务器,下一次应该向谁询问(我不知道,但是我知道.top的顶级域名服务器的IP地址,你可以去问问他)
  4. 本地域名服务器向顶级域名服务器发出查询(www.epiol.top对应的IP地址是多少?)
  5. 顶级域名服务器告诉本地域名服务器,下一次应该向谁询问(我不知道,但是我知道epiol.top的权限域名服务器的IP地址,你可以去问问他)
  6. 本地域名服务器向权限域名服务器发出查询(www.epiol.top对应的IP地址是多少?)
  7. 权限域名服务器告诉本地域名服务器(www.epiol.top对应的IP地址是114.x.x.x)
  8. 本地域名服务器把结果告诉给主机

其实本地域名服务器也可以发起递归查询,这取决于最初的查询请求报文的设置是要求使用哪一种查询方式。如果本地域名服务器采用递归查询方法的查询图示:
dns11.png

3、递归查询

递归查询:客户端发起一次DNS-query给DNS服务器,通过多次查找返回正确解析,主机向本地域名服务器的查询

递归查询的特点:如果主机本身hosts文件没有解析条目,以及所询问的本地域名服务器不知道被查询域名的IP地址,那么本地服务器就以DNS客户的身份,向其他根域名服务器继续发出查询请求报文(即替该主机继续查询),而不是让该主机自己进行下一步查询。因此递归查询返回的查询结果或者是所要查询的IP,或者是报错,表示无法查询到所需的IP。

dns12.png
第1、8步是递归查询:

  1. 主机向本地域名服务器发起查询(www.epiol.top对应的IP地址是多少?)
  2. 本地域名服务器不知道,默认开始执行迭代查询,向一个根域名服务器查询(www.epiol.top对应的IP地址是多少?)
  3. 根域名服务器告诉本地域名服务器,下一次应该向谁询问(我不知道,但是我知道.top的顶级域名服务器的IP地址,你可以去问问他)
  4. 本地域名服务器向顶级域名服务器发出查询(www.epiol.top对应的IP地址是多少?)
  5. 顶级域名服务器告诉本地域名服务器,下一次应该向谁询问(我不知道,但是我知道epiol.top的权限域名服务器的IP地址,你可以去问问他)
  6. 本地域名服务器向权限域名服务器发出查询(www.epiol.top对应的IP地址是多少?)
  7. 权限域名服务器告诉本地域名服务器(www.epiol.top对应的IP地址是114.x.x.x)
  8. 本地域名服务器把结果告诉给主机

4、解析方式和服务器功能

正向解析:FQDN->IP

反向解析:IP->FQDN

主从DNS服务器:即slave自动更新同步master的配置,作为backup

缓存服务器:使用递归查询,将查询结果返回客户端,作为缓存查询的结果

转发服务器:当发现查询不是本机的时候则将请求转发出去

5、提高DNS查询效率

为了提高DNS查询效率,并减轻根域名的服务器的负荷和减少互联网上的DNS查询报文数量,在域名服务器中广泛使用了高速缓存(有时也称高速缓存域名服务器)。高速缓存用来存放最近查询过的域名以及从何处获得域名映射信息的记录。

比如本地域名服务器查询过www.epiol.top 的IP地址后,其他用户想要访问www.epiol.top ,本地域名服务器不必再执行迭代查询,而是把之前查询之后的结果存入高速缓存,并返回缓存信息给用户即可。同时如果本地域名服务器缓存中有顶级域名服务器的IP地址,那么本地域名服务器在执行迭代查询时就不必向根域名服务器去查询,而是直接询问比如com、top、net等顶级域名服务器。这样就大大减轻了根域名服务器的负荷,而且能够使互联网上的DNS查询请求和回答报文的数量大大减少。

由于名字到地址的绑定并不经常改变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器并处理超过合理时间的项(例如每个项存放两天)。当域名服务器已经从缓存中删去某项信息后又被请求查询该项信息,就必须重新授权管理该项的域名服务器获取绑定信息。当权限域名服务器回答一个查询请求时,在响应中都指明绑定有效存在的时间值。增加此时间值可减少网络开销,而减少此时间值可提高域名转换的准确性。

不但在本地域名服务器中需要高速缓存,在主机中也很需要。许多主机在启动时从本地域名服务器下载名字和地址的全部数据库,维护存放自己最近使用的域名的高速缓存,并且只在从缓存中找不到名字时才使用域名服务器。维护本地域名服务器数据库的主机自然应该定期地检查域名服务器以获取新的映射信息,而且主机必须从缓存中删掉无效地项。由于域名改动并不频繁,大多数网点不需要花太多精力就能维护数据库地一致性。

五、DNS记录类型

DNS服务器中存在几种记录类型,用于返回客户端所请求的记录类型,正常都是请求A、AAAA、CNAME记录。

记录作用
A查询FQDN的IPV4主机地址
AAAA查询FQDN的IPV6主机地址
CNAME查询FQDN的别名记录,最终需要将CNAME解析成A或AAAA记录。比如:当8.1.2.45有两个服务(web和email),就会使用两个
NS查询区域的域名服务器IP地址,可能存在多个
SOA查询区域的域名服务器中的master,只有1个
MX查询区域的邮件服务器IP地址
PTR查询IP对应的FQDN
显性URL转发记录将域名指向一个http/https协议地址,访问域名时自动跳转到该http/https协议地址。比如:访问www.epiol.top显性转发到www.epiol.com,访问www.epiol.top,浏览器地址栏显示地址为www.epiol.com
隐性URL转发记录将域名指向一个http/https协议地址,访问域名时自动跳转到该http/https协议地址。比如:访问www.epiol.top显性转发到www.epiol.com,访问www.epiol.top,浏览器地址栏显示地址为www.epiol.top