收集和谈:从理论到实践,全方位熟悉DNS(理论篇)

Java从算法到架构 Java从算法到架构

对于 DNS(Domain Name System) 人人一定不生疏,不就是用来将一个网站的域名转换为对应的IP吗。当我们发现能够上QQ但不克浏览网页时,我们会想到或者是域名办事器挂掉了;当我们用别人供应的hosts文件浏览到一个"不存在"的网页时,我们会认识到域名解析系统的懦弱。

[“转载出处”:www.666z.com]

然而关于DNS还有一大堆故事值得我们去倾听,去思虑。

[“原创文章”:www.666z.com]

DNS源起

要想接见收集上的一台较量机,我们必需要知道它的IP地址,然则这些地址(好比243.185.187.39)只是一串数字,没有纪律,是以我们很难记住。而且若是一台较量机调换IP后,它必需通知所有的人。

显然,直接使用IP地址是一个愚蠢的方案。于是人们想出了一个替代的方式,即为每一台较量机起一个名字,然后竖立较量机名字到地址的一个映射关系。我们接见较量机的名字,剩下的名字到地址的转换过程则由较量机主动完成。

早期,名字到地址的转换过程十分简洁。每台较量机留存一个hosts文件,里面列出所有较量机名字和对应的IP地址,然后按期从一个维护此文件的站点更新里面的记录。当我们接见某个较量机名字时,先在hosts文件找到对应的IP,然后就能够竖立保持。

hosts 治理主机

早期的ARPANET就是如许做的,然则跟着收集规模的扩大,这种方式逐渐吃不用了。首要有以下三个原因:

1:hosts文件变得非常大;

2:主机名字会辩说;

3:集中的维护站点会不胜重负(需要给几百万机械供应hosts文件,想想就恐怖)。

为认识决上面的问题,1983年Paul Mockapetris提出了域名系统(DNS, Domain Name System),这是一种条理的、基于域的定名方案,而且用一个分布式数据库系统加以实现。当我们需要接见一个域名(其实就是前面说的较量机的名字)时,应用法式会向DNS办事器提议一个DNS恳求,DNS办事器返回该域名对应的IP地址。经由下面三种手段解决了上面的问题:

1:用户较量机上并没有存储所有的名字到IP的映射,如许避免了hosts文件过于宏大(如今各把持系统中hosts文件默认都是空的)。

2:划定了域名的定名划定,包管主机名字不会反复。

3:DNS办事器不再是单一的一台机械,而是一个条理的、合理组织的办事器集群。

如许接见一个域名的过程能够简化为下图:

域名hosts解析过程

DNS和谈

那么若何具体实现这个所谓的域名系统呢,要知道治理一个超大型而且络续转变的域名到IP的映射鸠合可不是一个简洁的事,何况还要去应付成千上万的DNS查询恳求。人们最终想出了一套不错的和谈,划定若何来实现这个系统,下面我们一路来看看吧。

首先我们需要制订一套定名划定,防止域名显现反复。DNS关于域名的划定和我们生活中的快递系统雷同,使用条理的地址构造。快递系统中要给或人邮寄物品,地址或者是如许:中国、广东省、广州市、番禺区、中山西路12号 XXX。而一个域名看起来则是如许的groups.google.com(为什么不是com.google.groups?我猜或者和老外写地址的习惯有关)。

对于Internet来说,域名条理构造的顶级(相当于国际快递地址中的国度部门)由ICANN(互联网名称与数字地址分派机构)负责治理。今朝,已经有跨越250个顶级域名,每个顶级域名能够进一步划为一些子域(二级域名),这些子域可被再次划分(三级域名),依此类推。所有这些域名能够组织成一棵树,如下图所示(图片来自Computer Networks: 7-1 ):

域名空间树

DNS设计之初是用来竖立域名到IP地址的映射,理论上对于每一个域名我们只需要在域名办事器上留存一笔记录即可。这里的记录一样叫作域名资源记录,它是一个五元组,能够用以下花样透露:

Domain_name Time_to_live Class Type Value

个中:

Domain_name:指出这笔记录适用于哪个域名;

Time_to_live:用来表明记录的生存周期,也就是说最多能够缓存该记录多长时间(后背会讲到缓存机制);

Class:一样老是IN;

Type:记录的类型;

Value:记录的值,若是是A记录,则value是一个IPv4地址。

我们看到域名资源记录有一个Type字段,用来表明记录的类型。这是为什么呢?因为对于一个域名来说,平日并非只记录其IP地址,还或者需要一些其他种类的记录,一些常见的记录类型如下:

我们知道不克只用一台域名办事器来响应所有的DNS查询,因为没有一台机械可以给全球的用户供应查询办事,较量能力、存储、带宽都不许可。只能合理组织一个域名办事器集群,使他们协同工作,配合供应域名解析办事。接下来首先要面临的一个问题是若何合理地将所有的域名资源记录存储到分歧的域名办事器上。

前面说过域名的名字空间能够组织为一棵树,这里我们能够进一步将其划分为不重叠的区域(DNS zone),针对上图的域名空间,一种或者的域名划分如下图:

域名划分

然后将每个区域与多个域名办事器(个中一个是master,其他slave办事器则用来供应数据备份、加速解析速度、包管办事可用性)关系起来,称这些域名办事器为该区域的权势域名办事器(Authoritative Name Servers ),它留存两类域名资源记录:

1:该区域内所有域名的域名资源记录。

2:父区域和子区域的域名办事器对应的域名资源记录(首要是NS记录)。

如许,所有的域名资源记录都留存在多个域名办事器中,而且所有的域名办事器也构成了一个条理的索引构造,便于我们后背进行域名解析。下面以一个简化的域名空间为例子,解说域名资源记录是若何留存在域名办事器中的,如下图a:

域名办事器

图中域名空间划分为A, B, C, D, E, F, G七个DNS区域,每个DNS区域都有多个权势域名办事器,这些域名办事器里面留存了很多域名解析记录。对于上图的NDS区域E来说,它的权势域名办事器里面留存的记录如图中表格所示。

细心视察上图你或者会发现区域A、B并没有父区域,他们之间并没有一条路径连在一路。这将导致一个很麻烦的问题,那就是区域A的权势域名办事器或者基本不知道区域B的存在。熟悉到这一点后,你或者会想出一个很天然的解决方案,就是在A中记录B域名办事器的地址,同时在B中记录A的,如许它们两个就关联起来了。然则考虑到我们有跨越250个顶级域名,如许做并不是很得当。

而我们使用的域名系统则采用了一种加倍伶俐的方式,那就是引入根域名办事器,它留存了所有顶级区域的权势域名办事器记录。如今经由根域名办事器,我们能够找到所有的顶级区域的权势域名办事器,然后就能够往下一级一级找下去了。下图为全球根域名办事器的分布图,能够在这里找到。

顶级域名办事器

如今为止,我们的权势域名办事器和根域名办事器其实构成了一个树,树根为根域名办事器,下面每个节点都是一个区域的权势域名办事器,对于图a中各个DNS区域的权势域名办事器,它们构成了下面这棵树(实际中,一个权势域名办事器或者留存有多个DNS区域的记录,是以权势域名办事器之间的关联并不组成一棵树。这部门的具体内容能够参考RFC 1034: 4. NAME SERVERS。下面为了轻易懂得,将其简化为一棵树):

域名办事器树

域名解析

我们已经有了一个域名办事器集群,该集群合理地留存了域名空间和域名资源记录的对应关系。如今我们要做的就是发送一个DNS恳求给域名办事器,然后坐等它返回准确的域名资源记录,这个过程叫作域名解析。

严厉来说,域名解析的过程最早要追溯到竖立收集保持。因为每当保持上彀络之后,较量机会主动获得一个默认的DNS办事器,当然你也能够用本身信任的DNS办事器,好比8.8.8.8(DNS办事器也有信任不信任之分,是的,实践篇会讲到),我们把这个域名办事器也叫作内陆域名办事器。接下来当我们需要知道一个域名对应的资源记录时,会向内陆域名办事器提议恳求,若是该域名正好在内陆域名办事器所辖属的域名区域(DNS zone)内,那么能够直接返回记录。

若是在内陆域名办事器没有发现该域名的资源记录,就需要在整个域名空间搜刮该域名。而整个域名空间的资源记录存储在一个分层的、树状关联的一系列域名办事器上,所以内陆域名办事器首先要从根域名办事器起头往下搜刮。这里有一个问题就是内陆域名办事器若何找到根域名办事器在哪里呢?其实域名办事器启动的时候,就会加载一个设置文件,里面留存了根域名办事器的NS记录(要知道根域名办事器地址一样非常不乱,不会随意改变,而且数量很少,所以这个设置文件会很小)。找到根域名办事器之后,就能够一级一级地往下查找啦。

仍然以我们的图a为例,如今假设区域E内的某个用户想接见math.sysu.edu.cn,那么恳求的过程如下:

域名解析过程

用说话简洁描述如下:

1:用户:喂,内陆域名办事器,敷陈我math.sysu.edu.cn的地址;

2:内陆域名办事器:哎呀,我不知道啊,不在我的辖区,容我去问问老迈哥吧。root老迈,能敷陈我math.sysu.edu.cn的地址吗;

3:根域名办事器:忙着呢,你去问B(.cn);

4:内陆域名办事器:喂,B,敷陈我math.sysu.edu.cn的地址;

5:B:你去问D(.edu.cn);

6:内陆域名办事器:喂,D,敷陈我math.sysu.edu.cn的地址;

7:D:你去问F(sysu.edu.cn);

8:内陆域名办事器:喂,F,敷陈我math.sysu.edu.cn的地址;

9:F:容老衲看看,哎呀,找到了,是X.X.X.X;

10:内陆域名办事器:踏破铁鞋终于找到啦,喂用户,出来啊,我找到了,是X.X.X.X

细心想想,这和我们邮寄快递实在是千篇一律啊,假设你从美国邮器材到广州市番禺区,首先快递送到中国(不外这里没有一个雷同根域名办事器的中转站罢了),然后往下到广东省,接下来是广州市,再往下是番禺了。

上面的是内陆域名办事器的迭代解析过程,其实也能够递归查询,这里就不说了,事理差不多。

缓存机制

如今整个域名系统已经能够为我们供应域名解析办事了,当我们输入域名,较量机发送DNS恳求,然后DNS办事器返回给我们解析的究竟,一切看起来很完美。然而是不是能够更完美呢?

回首一下平时浏览网站的情形,我们会发现两个对照有意思的结论:

1:80%的时间我们都在看那些20%的网站,这就是台甫鼎鼎的80/20 Rule;

2:我们会在一个网站的分歧网页之间跳转,也就是络续地接见统一个域名,雷同法式接见的局部性道理。

这两条结论很轻易让我们联想到缓存机制。若是我们将已经接见过的那些域名的解析究竟缓存在本身的较量机上,那么下次接见的时候能够直接读取究竟,不消再次反复DNS查询过程,给本身和域名办事器都节约了麻烦。

当然,如许做的一个前提是要缓存的解析究竟不会频仍更改,也就是说我十分钟后解析一个域名的究竟和如今解析的究竟是一般的。对大多数域名来说,这都是一个不争的事实。然则不免有一些“善变”的域名,他们或者会频仍更改本身的解析究竟。为了使缓存机制适应这两类情形,我们在域名资源记录里面添加一个Time_ti_live字段,表明这笔记录最多能够缓存多久。对于那些“稳如泰山”的域名,给一个对照大的值,而那些“反复无常”的域名,则能够给定一个小的值。

我们既然能够在本机行使缓存,那么可弗成以在域名办事器上也行使缓存机制呢,谜底当然是能够的。因为对于域名办事器来说,上面的两条有意思的结论仍然有效。所以,域名办事器能够将那些接见过的域名资源记录缓存,用户再次提议恳求时,能够直接返回缓存究竟,不消去迭代或许递归解析。

上面一大堆理论,看上去有点不明所所以吧,没事,下一篇文章会连系实践来加倍清楚地熟悉DNS这一最根蒂的系统。

Java从算法到架构微信号:暂无扫描二维码关注公众号
爱八卦,爱爆料。
小编推荐
  1. NO.1 莱西男子做微商遭连环套受愚30万 上下家快递单名字都关系

    做微商,在家躺着就能挣钱的诱人模式,越来越受到公共的青睐。但虚拟世界的生意,也让一些造孽分子上演白手套白狼的剧情。近日,青岛市即墨

  2. NO.2 先后获得德帅和波波维奇赞美,这支球队前途弗成限量!

    相信今天马刺队对阵国王队的竞赛人人都看了,想不到波波维奇老爷子会在这场竞赛遭到本赛季首次遣散进场的情形,更没想到,主场战绩排在联盟

  3. NO.3 《缔造与魔法》白天坐骑获得方式

    缔造与魔法怎么开出白天蛋?黑夜坐骑是经由白天龙蛋孵化出来的,下面小编就带来了缔造与魔法白天龙坐骑获得方式,想要拥有这款与脚色差不多

  4. NO.4 克洛普:争冠就像400竞走,最后100米必需尽心尽力

    英超第34轮,利物浦将坐镇安菲尔德迎战切尔西上演红蓝大战。赛前,利物浦主帅克洛普接管了媒体的采访。 谈争冠 “就像你跑400米的竞赛,100米时

  5. NO.5 偷偷做这3件事的女人最不“忠实”,但凡中1条,都不值得深交

    无论是爱情照样婚姻,都是需要专心经营的,然则这里的经营指的是坦诚相对,真心以待,而不是满脑子套路和算计。在一段情绪中,最主要的就是

  6. NO.6 这两样食材很通俗,确是下饭小菜必备材料,小长假必备!

    豆皮,我这大北方也叫干豆腐,南方有些处所叫千张,豆皮的服法好多,很随意,煎炒凉拌都是能够。尤其是在我这大北方,豆皮拌凉菜居多,最经

  7. NO.7 杜特尔特被惹急了:菲律宾升级制裁办法,预备与加拿大死磕究

    据视察者网5月26日新闻,菲律宾和加拿大之间关于垃圾的“战争”持续升级。 因为加拿大迟迟没有运回其在菲律宾的垃圾,继上周菲律宾召回驻加拿

  8. NO.8 现在因失误遗憾退役!她曾是体操一姐,用奖金给哥哥买房授室

    对于中国的体育事业来说,如今已经算是遍地开花了,显现了好多精良的活动员,不管是哪个范畴的活动员都是十分精良的,他们为国度的声誉支付

Copyright2018.天天资讯网资讯站,让大家及时掌握各行各业第一手热门资讯!