资讯专栏INFORMATION COLUMN

当我们谈网络时,我们谈些什么(2)--DNS的工作原理

fireflow / 1532人阅读

摘要:同上,本地服务器向百度的权威服务器发起查询请求号路径。单位为秒下面分别举个例子帮助理解下一篇更新对获取百度首页的过程中从网络层到链路层的一个变化。

博客新址,这里更有趣

来做个小实验吧

打开你的终端或者DOS命令运行窗口,输入ping www.baidu.com看看发生了什么

如果你的网络正常连接的话,应该可以看到这样的结果

把其中的111.13.100.92(你的显示的可能不一样,不用担心,放心复制)复制到浏览器,然后访问后你是不是看到了百度首页了呐。

域名与IP地址

我们将www.baidu.com这样的能定位到某个网站的字符串叫做域名

111.13.100.92这样同样的定位到某个网站(更准确的说是定位到某台主机)的字符串叫做IP地址

通过上面的例子可以看出相对于IP地址,域名对于用户而言更容易记忆,更加友好。而对于路由器等网络设备却不是这样的。路由器可以根据IP地址更快的定位主机位置。而域名这种长度不定的字符串对于路由器来说简直是无法理解的。

DNS的使命

DNS(Domain Name System),中文叫做域名系统。

DNS的就是为了同时保留域名和IP地址的优势的产物。人们可以通过域名简单的记住要访问的web站点,而路由器等网络设备却可以使用IP地址快速定位到相关主机。DNS要做的就是当用户输入域名后,先到DNS服务器查询IP地址,然后再通过IP地址来访问web站点。

DNS服务器的层次结构

实现DNS服务器最简单的一种方案就是在一台远程主机上配置好DNS的映射表,所有的域名转换都会通过这台主机。可是这样的方案简单却不可靠。主要的缺点有:

当这台主机出现故障时,整个互联网将会瘫痪。只有那些不依赖DNS服务的软件才可以正常工作

单个DNS服务器不得不处理整个互联网的所有DNS解析,这样的对带宽的要求是很高的

这种单点非分布式的方案,会造成巨大的延迟。加入这台服务器放在美利坚,当你在我大天朝访问大天朝的百度的时候,你的域名解析的报文不得不先到达地球另一面的服务器所在地,然后返回。一次请求,报文往返路程就绕地球一圈了。而互联网的使用者的直观感受就是:慢

映射表的维护成本更加昂贵,当你需要添加或者更新DNS记录的时候,对于这样大量的数据维护成本极高,效率极低

所以,DNS服务器应该是分布式的。

DNS服务器的层次结构:

根DNS服务器 :用来返回TLD服务器的IP地址

顶级域(TLD)域名服务器:返回权威服务器的IP地址

权威DNS服务器 :返回相应主机的IP地址

还有一种本地DNS服务器,他并不属于以上的层次机构,却很重要,通常我们电脑和路由器自动获得到的DNS服务器地址就是本地服务器。每个ISP都有本地DNS服务器,当主机发出DNS请求时,请求被发往本地服务器,它起着代理作用,将该请求转发到DNS服务器层次中。

图解访问百度DNS解析过程

你在浏览器输入了网址,然后浏览器通过UDP协议向本地服务器的53号端口发送了DNS解析请求(1号过程)。

如果本地DNS服务器缓存了百度的DNS记录(关于DNS缓存在下一节会详细讲),如果没有该记录就回向根服务器请求(2号路径),然后根服务器收到请求后,会返回给本地服务器相应的顶级域名DNS服务器地址。以www.baidu.com为例,就回返回解析com顶级域名的服务器(3号路径)。

然后本地服务器知道TLD DNS服务器的地址后就会向该服务器发送解析请求(4号请求),然后TLD服务器返回给本地DNS服务器百度的权威服务器的IP地址(5号路径)。

同上,本地DNS服务器向百度的权威DNS服务器发起查询请求(6号路径)。就回得到百度权威DNS服务器返回给本地服务器的百度服务器的IP地址(7号路径)。

最后,本地DNS服务器会把百度服务器的IP地址返回给你的电脑(8号路径),同时将这条记录缓存在本地DNS服务器。

注意:以上这种方式称为“先递归,再轮询”的查询方式,计算机网络中还存在其他的查询方式如仅仅的”递归“,可是上面这种查询方式时最常用的。

DNS缓存

如果每次DNS解析都要走完上一节整个的流程,那样对于网络带宽的消耗和延时对于用户和DNS解析系统都是不友好的。所以当本地DNS服务器在一次查询后缓存到本地。从而加快DNS的解析速度。实际上,你的访问的解析大多数都是在本地服务器上完成的。

DNS的额外服务

之所以称这节为DNS的额外服务是指出了主机名到IP地址转换的其他的一些服务

主机别名(host aliasing):有着复杂主机名的主机能同时拥有一个或者多个别名。例如:relay1.hangzhou.enterprise.com可能有一个别名叫做enterpries.com 我们称前者为规范主机名。主机别名更容易记忆。DNS可以根据主机别名来返回主机名的规范主机名,和主机的IP地址

邮件服务器别名(mail server aliasing):与第一项类似,只不过是针对邮件服务器提供别名服务

负载分配(load distribution):并不是每个域名对应一个IP地址,可能对应多台。这是DNS以轮流的方式来返回主机IP地址。

DNS资源记录(DNS存了什么?)

DNS资源记录(resource record,RR)就是上图描述的四种类型的纪录(其实还有其他类型,这里我们不再说明)。其中生存时间TTL决定了该条记录在缓存中删除的时间。(单位为秒)
下面分别举个例子帮助理解

(relay1.bar.foo.com, 145.37.93.126, A)

(foo.com, dns.foo.com, NS)

(foo.com, relay.bar.foo.com, CNAME)

(foo.com, mail.bar.foo.com, MX)

下一篇更新对获取百度首页的过程中从网络层到链路层的一个变化。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11520.html

相关文章

  • 我们网络我们什么2(2)DNS

    摘要:而我们平时生活中见了人是不会说,的,我们会叫名字,为什么,因为不需要把百度的记录下来,然后每次要搜索东西的时候,都要输入,有了它我们只需要输入就可以了,非常方便。百度当时也是一边紧急启动备用登陆进行恢复,一边痛骂劫持方。 序言 准备了很久,之前自己理解不够通彻的,这里自己参阅相关书籍,进行了又一个整理。下篇更新TCP/UDP相关。进入正题,网域名称系统(英文:Domain Name S...

    褰辩话 评论0 收藏0
  • 我们网络我们什么(3)--获取网页从网络层到链路层发生了什么

    摘要:我们和百度建立的连接的过程,我们中间经过若干个路由器,然后数据返回到我们本地,我们便可以看到百度首页了。 建立连接 上面我们通过DNS访问得到了目的地的IP地址,接下来,是我们如何向其发送数据了,比如我们的要获得到百度的首页,我们是如何访问的到的,本篇文章,将从拿到IP到页面展示在我们面前,从应用层到链路层进行一个分析。 首先来一个整体的架构,根据这个架构,我们再去完善我们在访问的过程...

    lieeps 评论0 收藏0
  • 我们网络我们什么(1)--我们如何接入因特网

    摘要:从如何接入网络到数据返回给我们这个过程。路由器是根据网络地址进行转发,属于网络层。此时我们就拿到和服务器的地址,和我们默认网关的地址。 博客新址,这里更有趣 之前对于黑砖头书,一直有种抵触感,看着看着就不想看了,总感觉TM这么厚,什么时候能看完,看着就愁,暑假,硬着头皮啃了《Thinking in Java》,还有《Head First设计模式》,边做笔记,边读,这样还是蛮有成就感的,...

    dabai 评论0 收藏0
  • 我们网络我们什么(5)链路层概述

    摘要:对于我们的每一块网卡,其都会有一个独一无二的地址与其对应,通过这个地址,我们就可以确定到每一台主机,然后将数据报交给它,同时对于来自网络层的数据报,链路层也会对其进行一个封装,加上地址,同时链路层也执行一些差错的检测和纠正。 作用位置 链路层的在层级的划分上是处在IP层下面的,通过IP,我们获得了一个具体的范围,然后要找到具体的每一台机器,那么这个时候,链路层就发挥作用了,其作用的位置...

    andycall 评论0 收藏0
  • 我们网络我们什么2(1)HTTP

    摘要:序言很早之前出了一个系列的当我们谈网络,谈些什么专题,得到了比较好多反响和认可。代表请求已成功被服务器接收理解并接受这类状态码代表需要客户端采取进一步的操作才能完成请求。 序言 很早之前出了一个系列的《当我们谈网络,谈些什么》专题,得到了比较好多反响和认可。再次准备更仔细深入的再来做一起,更深入,更全面的来讲解网络知识。涉及Http,P2P,DNS,TCP,UDP,网络层,链路层,无线...

    EastWoodYang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<