DNS 域名系统


DNS(域名系统)的主要任务就是将主机名映射到其IP地址。除此之外,DNS还提供了一些重要的服务:

  • 主机别名。有着复杂主机名的主机能够拥有一个或者多个别名。例如,一台名为relay1.west-coast.enterprise.com的主机,可能还有别名为www.enterprise.com。在这种情况下,relay1.west-coast.enterprise.com被称为规范主机名。使用主机别名的好处在于,当多个服务部署在同一台机子中时,主机IP的改变不会影响到主机的IP。例如,一个主机同时提供WWW和MAIL服务,这两个主机别名分别为www.mydomain.com以及mail.mydomain.com,它们都指向host.mydomain.com。即访问前两个主机名时,实际上访问的为host.mydomain.com。而当host.mydomain.com修改IP时,前两个主机不需要做任何操作,因为它们是指向host.mydomain.com的。
  • 邮件服务器别名。通常情况下用户的的邮箱像bob@yahoo.com这样简单,而雅虎的邮件服务器主机名可能会很复杂。电子邮件应用程序可以使用DNS对提供的主机名别名进行解析可以得到该主机的规范主机名及IP地址。
  • 负载分配。一个IP地址的集合,即多个IP可以与同一个规范主机名相联系。当客户端查询某个主机名时,会有一系列的IP地址进行响应,但在每次响应时会循环这些地址次序。因为客户端总是向IP地址排在最前面的发送请求,对IP地址序列进行循环,便在冗余的服务器中实现了负载。

DNS工作流程

(1)用户主机上的某些程序(如浏览器)需要将主机名转换为IP地址。这些应用程序会调用DNS的客户端,然后将需要被转换的主机名发送给客户端(在很多基于UNIX的机器上,应用程序为了执行这种转换需要调用函数gethostbyname())。

(2)用户主机上的DNS客户端接收到信息后,向网络中发送一个DNS查询报文。所有的DNS请求和回答报文使用UDP数据报经端口53发送。

(3)经过若干毫秒的时延后,用户主机上的DNS客户端接收到一个DNS回答报文,该报文中包含着所希望映射的结果。

(4)DNS客户端将映射结果传递到调用DNS的应用程序。

从用户主机的调用程序角度来看,DNS是一个提供简单、直接的转换服务的黑盒子。但事实上,这个黑盒子非常复杂。

DNS服务器

如果在互联网上只存在一个DNS服务器会存在很多问题,没有可拓展能力。因此,DNS采用了分布式的设计方案。

为了处理拓展性问题,DNS使用了大量的DNS服务器,它们以层次方式组织,并且分布在全世界范围内。没有一台DNS服务器拥有因特网上全部主机的映射。相反,这些映射分布在所有的DNS服务器上。

大致来说,有3种类型的DNS服务器:根DNS服务器、顶级域DNS服务器和权威DNS服务器。

在这里插入图片描述

  • 根DNS服务器

    根DNS服务器用于提供顶级域DNS服务器的IP地址。根DN服务器用于提供顶级域DNS服务器的IP地址。

  • 顶级域DNS服务器

    对于每个顶级域,都有一个单独的服务器。每个顶级域DNS服务器提供了权威DNS服务器的IP地址。

  • 权威DNS服务器

    在因特网上具有公共可访问主机(Web服务)的每个组织必须提供公共可访问的DNS记录,这些记录将主机的名字映射为IP地址。一个组织机构的权威DNS服务器收藏了这些DNS记录。权威DNS服务器可以是自己实现的,也可以是支付费用存储在某个第三方权威DNS服务器中。

假定DNS客户端请求www.amazon.com的IP地址,首先会与根服务器之一进行联系,然后得到顶级域名com对应的顶级域DNS服务器的IP地址,然后客户端向顶级域DNS服务器发送请求,得到amazon.com对应的权威服务器的IP地址。最后,客户端和amazon.com对应的权威服务器进行联系,其返回www.amazon.com的IP地址。

本地DNS服务器

本地DNS服务器并不属于DNS服务器的层次结构,但是它对整个DNS请求过程来说是至关重要的。其包含了包含根服务器IP地址数据,当主机发送DNS请求时,该请求被发往本地DNS服务器,它起着代理作用,通过访问本地DNS服务器,可以直接获取主机对应的IP地址。而本地DNS服务器的IP地址通常通过DHCP获得。

假设主机cse.nyu.edu想要知道主机gaia.cs.umass.edu的IP地址。其中cse.nyu.edu主机的本地DNS服务器为dns.nyu.edu,并且gaia.cs.umass.edu的权威DNS服务器为dns.umass.edu。

首先,主机cse.nyu.edu向它的本地DNS服务器dns.nyu.edu发送一个DNS查询报文,该报文中包含着需要查询的主机名gaia.cs.umass.edu。本地DNS服务器内含有根服务器的IP地址,将请求报文转发到某一个根服务器中。根服务器注意到其edu前缀,于是向本地DNS服务器返回负责edu顶级域名的顶级域名DNS服务器的IP地址列表。本地DNS服务器从IP地址列表中选择一个顶级域DNS服务器发送查询报文。顶级域DNS服务器注意到umass.edu前缀,返回关于umass.edu的权威DNS服务器的IP地址给本地DNS服务器,该权威DNS服务器为dns.umass.edu。最后,本地DNS服务器向dns.umass.edu发送查询报文,dns.umass.edu用gaia.cs.umass.edu的IP地址进行相应。

可以看到,为了获得一台主机名的IP地址,共发送了8份DNS报文,其中包括4份查询报文和4份回答报文。

在这里插入图片描述

上述例子假设顶级域DNS服务器知道主机对应的权威DNS服务器的IP地址。而实际上,这种假设并不总是正确的。相反,顶级域DNS服务器只是知道中间的某个DNS服务器,对中间DNS服务器继续请求才能得到主机对应的权威DNS服务器。

例如,umass有一台用于本大学的DNS服务器dns.umass.edu,同时该大学的每个系都有着自己的DNS服务器,并且每个系的DNS服务器是本系所有主机的权威服务器。在这种情况下,当中间DNS服务器dns.umass.edu收到了对某主机的请求时,该主机名是以cs.umass.edu结尾,它向dns.nyu.edu返回dns.cs.umass.edu的IP地址,因为它是所有以cs.umass.edu结尾的主机的权威服务器。本地DNS服务器dns.nyu.edu则向权威DNS服务器发送查询,然后得到对应的IP地址。在这个例子中,共发送了10份报文。

从上个例子可以看出,域名的层级是可以不断向下划分的,并不是顶级域下方的域名一定包含着主机名,有可能还包含着多个子域。但对这些子域主机的请求是需要上级域的权威服务器进行解析才能找到子域对应的权威服务器。

DNS记录

DNS服务器存储了资源记录(RR),RR提供了主机名到IP地址的映射。每个DNS回答报文包含了1条或多条资源记录。资源记录是一个包含了下列字段的4元组:

(Name, Value, Type, TTl)

TTL是该记录的生存时间,它决定了资源记录应当从缓存中删除的时间。在下面给出的记录例子中,我们忽略掉TTL字段。Name和Value的值取决于Type:

  • 如果Type=A,则Name是主机名,Value是主机名对应的IP地址。因此,一条类型为A的资源记录提供了标准的主机名到IP地址的映射。例如(realy1.bar.foo.com,145.37.93.126,A)就是一条类型A记录。
  • 如果Type=AAAA,与Type=A相同,都记录着主机名到IP地址的映射,知识IP地址为IPV6。
  • Type=NS,则Name是个域(如foo.com),而Value是个知道如何获得该域中主机地址的权威DNS服务器的主机名。例如(foo.com,dns.foo.com,NS)就是一条类型NS记录。
  • Type=CNAME,则Value是别名为Name的主机对应的规范主机名。该记录能够向查询的主机提供一个主机名对应的规范主机名,即主机到主机的映射,例如(foo.com,realy1.bar.foo.com,CNAME)是一条类型CNAME的记录。
  • Type=MX,则Value是个别名为Name的邮件服务器的规范主机名。举例来说,(foo.com,mail.bar.foo.com,MX)就是一条MX记录。MX记录允许邮件服务器具有简单的别名,例如qq.com。通过使用MX记录,一个公司的邮件服务器和其它服务器可以使用相同的别名。为了获得邮件服务器的规范主机名,DNS应当请求一条MX记录,而为了获得其他服务器的规范主机名,DNS客户应当请求CNAME记录。即MX的主机名可以叫做qq.com,WWW的主机名也可以叫做qq.com,当Type为MX时,寻找的是MX主机对应的IP,而Type为CNAME时寻找的是WWW主机对应的IP。

如果一台DNS服务器适用于某特定主机名(某域名下的主机)的权威DNS服务器,那么该DNS服务器会有一条包含该主机名的类型A记录(本地服务器可能也会有)。

如果服务器不是用于某主机名(某域名下的)的权威服务器,那么该服务器将包含一条类型NS记录,该记录着用于解析该主机对应域名的DNS服务器,并且还有一条类型A记录,提供了NS记录中Value字段中DNS服务器的IP地址。

举例来说,edu顶级域DNS服务器不是主机gaia.cs.umass.edu的权威DNS服务器,则该服务器包含主机对应的域记录,如(umass.edu,dns.umass.edu,NS);并且还包含着一条类型A记录,如(dns.umass.edu,128.119.40.111,A)。

DNS报文

DNS有DNS查询报文和DNS回答报文两种,并且二者有着相同的格式,如下图所示:

在这里插入图片描述

  • 前12个字节是首部区域,有着几个字段。
    • 第一个字段为标识符,是一个16比特的数,用于表示某个查询。这个标识符也会被复制到对查询的回答报文中,以便让客户用来匹配发送的请求和接收到的回答。
    • 第二个字段为标志字段,含有若干标志。1比特的“查询/回答”标志位指出报文是查询报文(0)还是回答报文(1)。当某DNS服务器是所请求名字的权威DNS服务器时,1比特的“权威”标志被置在回答报文中。如果客户在DNS服务器没有记录时希望其执行递归查询,则设置1比特的“希望递归”标志位。
    • 除此之外,还有4个关于数量的字段,这些字段指出了在首部后的4类数据区域出现的数量。
  • 问题区域,包含着正在进行的查询信息。包括:(1)名字字段,正在查询的主机名字;(2)类型字段,该名字正在被询问的问题类型,即Type。
  • 回答区域,包含了对最初请求的名字的资源记录。在回答报文的回答区域中可以包含多条RR,即一个主机名能够有多个IP地址。
  • 权威区域包含了其它权威服务器的记录。
  • 附加区域包含了一些有帮助的记录。例如,对于一个MX请求的回答报文的回答区域包含了一条资源记录,该记录提供了邮件服务器的规范主机名。该附加区域包含了一个类型A记录,该记录提供了用于该邮件服务器的规范主机名的IP地址。

内容分发网络

当前互联网视频公司日复一日地向用户发送每秒数兆比特的数据,提供这种流式视频服务最为直接的方式就是建立单一的大规模数据中心,在数据中心中存储所有视频。但是,这种方式存在着一些缺陷:(1)有些区域的用户访问会经过许多ISP,带来了难以忍受的延迟;(2)数据中心一旦故障,将不能发送任何视频流了。

为了应对需要向世界各个地区用户发送巨量数据的挑战,几乎所有主要的视频流公司都利用内容分发网络(CDN)。

大多数的CDN是利用DNS来截获和重定向请求的。假设一个内容提供商NetCinema雇佣了第三方CDN公司KingCDN来向其客户分发视频。在NetCinema的Web网页上,每个视频都被指派了一个URL,该URL上包括了“video”以及视频本身的标识符,如htttp://video.netcinema.com/6Y7B23V。接下来如出现如下图所示的步骤:

(1)用户访问NetCinema的Web网页;

(2)用户点击某个视频的链接htttp://video.netcinema.com/6Y7B23V,该用户主机发送了对于video.netcinema.com的DNS请求;

(3)用户的本地DNS服务器将该DNS请求转发到NetCinema的权威DNS服务器上,该权威DNS服务器观察到主机名video.netcinema.com中的“video”,将DNS请求转移到KingCDN。即NetCinema的权威DNS服务器并不返回一个IP地址,而是返回一个KingCDN域的主机名,如a1105.kingcdn.com;

(4)从这时起,DNS请求进入到了KingCDN专用DNS基础设施。KingCDN的DNS系统最终向本地DNS服务器返回KingCDN内容服务器的IP地址;

(5)本地DNS服务器向主机转发内容服务CDN节点的IP地址;

(6)客户与该IP地址建立起TCP连接,并且发送对该视频的HTTP请求。

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值