6

博客新址,这里更有趣

来做个小实验吧

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

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

  • 把其中的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的映射表,所有的域名转换都会通过这台主机。可是这样的方案简单却不可靠。主要的缺点有:

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

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

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

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

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

  • DNS服务器的层次结构:

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

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

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

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

图解访问百度DNS解析过程

DNS服务器交互

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

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

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

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

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

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

DNS缓存

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

DNS的额外服务

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

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

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

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

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

RR

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

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

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

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

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

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


如果觉得我的文章对你有用,请随意赞赏
liuxuesong001 · 4月9日

DNS 解析过程图,加载不出来。@Jensen

回复

载入中...