圣狐资讯
域名解析DNS
来源:优码网     阅读:46
林风小破店
发布于 2023-11-27 20:55
查看主页

域名系统DNS概述

互联网的域名系统DNS被设计成为一个联机分布式数据库系统,并采用客户服务器方式。DNS使大多数名字都在本地进行解析(resolve)(解析就是转换的意思,地址解析可能会包含多次的查询请求和回答过程),仅少量解析需要在互联网上通信,因此DNS系统的效率很高。由于DNS是分布式系统,即使单个计算机出了故障,也不会妨碍整个DNS系统的正常运行。

域名到IP地址的解析是由分布在互联网上的许多域名服务器程序(可简称为域名服务器)共同完成的。域名服务器程序在专设的结点上运行,而人们也常把运行域名服务器程序的机器称为域名服务器。

域名到IP地址的解析过程的要点如下:当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序(resolver),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP是为了减少开销)。本地域名服务器在查找域名后,把对应的P地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。

若本地域名服务器不能回答该请求,则此域名服务器就暂时成为DS中的另一个客户,并向其心域名服务器发出查询请求。这种过程直至找到能够回答该请求的域名服务器为止。

域名结构

互联网采用了层次树状结构的命名方法,就像全球邮政系统和电话系统那样。采用这种命名方法,任何一个连接在互联网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。这里,“域”(domain)是名字空间中一个可被管理的划分。域还可以划分为子域,而子域还可继续划分为子域的子域,这样就形成了顶级域、二级域、三级域,等等。

从语法上讲,每一个域名都由标号((label)序列组成,而各标号之间用点隔开(请注意,是小数点“.”,不是中文的句号“。”)。例如中央电视台用于收发电子邮件的计算机(即邮件服务器)的域名,它由三个标号组成,其中标号com是顶级域名,标号cctv是二级域名,标号mail是三级域名。

    mail.cctv.com     三级域名.二级域名.顶级域名

DNS规定,域名中的标号都由英文字母和数字组成,每一个标号不超过63个字符(但为了记忆方便,最好不要超过12个字符),也不区分大小写字母(例如,CCTV或cctv在域名中是等效的)。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的顶级域名则写在最右边。由多个标号组成的完整域名总共不超过255个字符。DNS既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由ICANN进行管理。用这种方法可使每一个域名在整个互联网范围内是唯一的,并且也容易设计出一种查找域名的机制。

CTK@AFP}BNV4QFVU3%IK`UU.png

域名服务器

具体实现域名系统则是使用分布在各地的域名服务器。DNS就采用划分区的办法来解决这个问题。一个服务器所负责管辖的(或有权限的)范围叫做区(zone)。各单位根据具体情况来划分自己管辖范围的区。但在一个区中的所有节点必须是能够连通的。每一个区设置相应的权限域名服务器(authoritative name server),用来保存该区中的所有主机的域名到IP地址的映射。总之,DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管辖的范围。区可能等于或小于域,但一定不能大于域。

图6-2是区的不同划分方法的举例。假定abc公司有下属部门x和y,部门x下面又分三个分部门u,v和w,而y下面还有其下属部门t。图6-2(a)表示abc公司只设一个区abc.com。这时,☒bc.com和域abc.com指的是同一件事。但图6-2(b)表示abc公司划分了两个区(大的公司可能要划分多个区):abc.com和y.abc.com。这两个区都隶属于域abc.com,都各设置了相应的权限域名服务器。不难看出,区是“域”的子集。

6KJ)Q7~JY77)RFYYJTH_}G2.png

图6-3以图6-2(b)中公司abc划分的两个区为例,给出了DNS域名服务器树状结构图。这种DNS域名服务器树状结构图可以更准确地反映出DNS的分布式结构。在图6-3中的每个域名服务器都能够进行部分域名到IP地址的解析。当某个DNS服务器不能进行域名到IP地址的转换时,它就设法找互联网上别的域名服务器进行解析。

`]ZB@YD(832UL9]RHVELO(Q.png

从图6-3可看出,互联网上的DNS域名服务器也是按照层次安排的。每一个域名服务器都只对域名体系中的一部分进行管辖。根据域名服务器所起的作用,可以把域名服务器划分为以下四种不同的类型:

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

互联网的根域名服务器目前共只有13个域名(从A 到 M ,13个字母),但这不表明根域名服务器是由13台机器所组成。实际上,在互联网中是由l3套装置(13 installations))构成这13组根域名服务器[W-ROOT]。每一套装置在很多地点安装根域名服务器(也可称为镜像根服务器),但都使用同一个域名。

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

①注:任播的IP数据报的终点是一组在不同地点的主机,但具有相同的IP地址。IP数据报交付离源点最近的一台主机。

目前根域名服务器的分布仍然是很不均衡的。例如,在北美,平均每375万个网民就可以分摊到一个根域名服务器,而在亚洲,平均超过2千万个网民才分摊到一个根域名服务器,这样就会使亚洲的网民上网速度明显地低于北美的。

需要注意的是,在许多情况下,根域名服务器并不直接把待查询的域名直接转换成P地址(根域名服务器也没有存放这种信息),而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。

(2)顶级域名服务器(即TLD服务器):这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DS查询请求时,就给出相应的回答(可能是最后的结果,也可能是下一步应当找的域名服务器的P地址)。

(3)权限域名服务器:负责一个区的域名服务器。当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器。例如在图6-2(b)中,区abc.com和区y.abc.com各设有一个权限域名服务器。

(4)本地域名服务器(local name server):本地域名服务器并不属于图6-3所示的域名服务器层次结构,但它对域名系统非常重要。当一台主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。由此可看出本地域名服务器的重要性。每一个互联网服务提供者ISP,或一个大学,甚至一个大学里的系,都可以拥有一个本地域名服务器,这种域名服务器有时也称为默认域名服务器

当计算机使用Windows7操作系统时,打开“控制面板”,然后依次选择“网络和Internet”→“网络和共享中心”→“查看网络状态和任务”→“无线网络连接”(假定采用家庭网络)→“属性”→“Internet协议版本4”→“属性”等项目,就可以看见首选DNS服务器和备用DNS服务器的IP地址。这里的DNS服务器指的就是本地域名服务器。本地域名服务器离用户较近,一般不超过几个路由器的距离。当所要查询的主机也属于同一个本地ISP时,该本地域名服务器立即就能将所查询的主机名转换为它的IP地址,而不需要再去询问其他的域名服务器。为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个是主域名服务器(master name server),其他的是辅助域名服务器(secondaryname server)。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。

域名的解析过程

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

@WHK%8L7R`4FV}$QY{850}X.png

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

CZ3JSM7Q5(KA3@]U]9_SD97.png

假定域名为m.xyz.com的主机想知道另一台主机(域名为y.abc.com)的P地址。例如,主机m.xyz.com打算发送邮件给主机y.abc.com。这时就必须知道主机y.abc.com的IP地址。

面是图6-5(a)的几个查询步骤:

①主机m.xyz.com先向其本地域名服务器dns.xyz.com进行递归查询。

②本地域名服务器采用迭代查询。它先向一个根域名服务器查询。

③根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器dns.com的IP地址。

④本地域名服务器向顶级域名服务器dns.com进行查询。

⑤顶级域名服务器dns.com告诉本地域名服务器,下一次应查询的权限域名服务器dns.abc.com的IP地址。

⑥本地域名服务器向权限域名服务器dns.abc.com进行查询。

⑦权限域名服务器dns.abc.com告诉本地域名服务器,所查询的主机的P地址。

⑧本地域名服务器最后把查询结果告诉主机m.xyz.com。

我们注意到,这8个步骤总共要使用8个UDP用户数据报的报文。本地域名服务器经过三次迭代查询后,从权限域名服务器dns.abc.com得到了主机y.abc.com的IP地址,最后把结果返回给发起查询的主机m.xyz.com。

图6-5(b)是本地域名服务器采用递归查询的情况。在这种情况下,本地域名服务器只需向根域名服务器查询一次,后面的几次查询都是在其他几个域名服务器之间进行的(步骤③至⑥)。只是在步骤⑦,本地域名服务器从根域名服务器得到了所需的P地址。最后在步骤⑧,本地域名服务器把查询结果告诉主机m.xyz.com。整个的查询也是使用8个UDP报文。

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

例如,在图6-5(a)的查询过程中,如果在不久前已经有用户查询过域名为y.abc.com的IP地址,那么本地域名服务器就不必向根域名服务器重新查询y.abc.com的IP地址,而是直接把高速缓存中存放的上次查询结果(即y.abc.com的P地址)告诉用户。

假定本地域名服务器的缓存中并没有y.abc.com的IP地址,而是存放着顶级域名服务器dns.com的IP地址,那么本地域名服务器也可以不向根域名服务器进行查询,而是直接向com顶级域名服务器发送查询请求报文。这样不仅可以大大减轻根域名服务器的负荷,而且也能够使互联网上的DNS查询请求和回答报文的数量大为减少。

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

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

作者:67d5c5667193
链接:https://www.jianshu.com/p/ad11a10369e8

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 圣狐资讯
相关推荐
“长寿” AI 产品的背后:请手动编码,少用 AI 模型!
网站建设的10个技巧让你的网站更加专业和易用!
2024年最新选题之Android安卓app类型
一个开源的 ChatGPT VSCode 插件
微信提现接口申请流程及申请条件:打造安全高效的资金管理解决方案

首页

消息

购物车

我的