第二章第五节 因特网的目录服务
DNS(域名系统)提供了一种能运行主机名到IP地址转换的因特网目录服务;一方面,他让人可以记住如taobao.com这样的主机别名;另外一方面,他提供给路由器可理解的IP地址,故DNS就是根据主机名查询对应的IP地址的服务。固然,这不是DNS的所有,接下来,咱们将深刻探讨DNS的技术细节。数据库
Outline
Notes
## DNS提供的服务
- DNS的定义
- 实体层面看,DNS是一个由分层的DNS服务器实现的分布式数据库
- 协议层面看,DNS是一个使得主机可以查询分布式数据库的应用层协议
- DNS运行在53号端口
- DNS具体提供的服务
- 主机别名(host aliasing):有着复杂主机名的主机能够有一个或者多个别名,例如aaa.bbb.com的主机可能还会有aaa.com和www.bbb.com两个别名,在这种状况下,aaa.xxx.com叫作规范主机名(canonical hostname)。主机别名的特征是比规范主机名更容易记忆,DNS能够提供根据主机别名获取规范主机名的服务。
- 邮件服务器别名(canonical hostname):类比于主机别名,电子邮件应用程序能够调用DNS,对提供的邮件服务器别名进行解析,以得到该主机的规范主机名及其IP地址。
- 提供负载均衡(load distribution): 通常来讲,繁忙访问的大型站点是分布在多台服务器上的,没太服务器均运行在不一样的端系统上,每一个都有着不一样的IP地址。这个时候,主机名和IP地址就不是一一对应的关系,而是一个主机名对应一个IP地址的集合。 在大量的,连续的屡次访问中,DNS在这些全部冗余的Web服务器之间循环分配负载以达到负载均衡的目的:在向这个主机名发出DNS请求的时候,服务器会用包含所有这些IP地址的报文进行回答,而客户机总向报文中排在最前的IP地址发出请求
## DNS工做机制概论
集中式DNS即指在因特网上只使用一个DNS服务器,不使用这样集中式DNS的缘由是:集中式数据库彻底没有可扩展能力,使用过程当中会出现 单点失败问题、流量问题、距离问题、维护性问题;缓存
【DNS服务器的层次和类别】服务器
DNS服务器是有层次的,它能够分为三种类型:根DNS服务器, 顶级域(Top-Level Domain, TLD )DNS服务器和权威DNS服务器,分别对应下面三个层次(从上至下)网络

- 根DNS服务器:因特网上有13个根DNS服务器, 其中大部分分布在北美洲,下面显示的是2012年的根DNS服务器分布图

- 顶级域DNS服务器:顶级域服务器负责顶级域名,如com,org,net,edu和gov和全部国家的顶级域名如cn,uk,jp (edu 教育机构域名, gov 政府部门域名 , org 非盈利性的组织 ,com 企业域名 )
- 权威DNS服务器:在因特网上具备公共可访问的主机的每一个组织机构必须提供公共可访问的DNS记录,这些记录将这些主机的名字映射为IP地址。 由组织机构的权威DNS服务器保存这些DNS记录,组织机构能够选择实现它本身的权威DNS服务器来保持这些记录,或者经过支付费用将这些记录存储在某个服务提供商的DNS服务器中。多数大学和大公司实现和维护它们本身基本的权威DNS服务器、
- 本地DNS服务器:还有另外一类比较重要的DNS服务器,叫作本地DNS服务器(local DNS server),它并不在咱们上面所说的DNS层次结构中。本地DNS服务器的做用有如下两点:
- 主机和本地DNS服务器通常是相邻的,当主机发出DNS请求的时候,该请求会被发往本地DNS服务器,它起着代理的做用,并将该请求转发到DNS服务器层次结构中
- 本地DNS服务器能够经过缓存主机名/IP地址,减小对相同主机名的查询而消耗的时间,改善时延和性能
【DNS中查询记录】负载均衡
实际上,在DNS服务中, 并不能经过对某个DNS服务器,经过仅仅一次的“请求/响应”就取得主机名/IP地址的查询结果。相反,须要多个不一样的DNS服务器之间进行屡次交互才能获取最终的查询结果分布式
(迭代)
(递归)性能
例如上图所示的例子中用到了
递归查询和
迭代查询,主机cis.poly.edu想知道主机gaia.cs.umass.edu的IP地址,而且主机gaia.cs.umass.edu 的权威DNS服务器为 dns.umass.edu。
则DNS查询过程以下:
1. 主机cis.poly.edu首先向它的本地DNS服务器dns.poly.edu发送一个DNS查询报文,该查询报文包含有要求转换的主机名gaia.cs.umass.edu
2. 本地DNS服务器dns.poly.edu将该报文转发至根DNS服务器。
3. 该根DNS服务器注意到DNS服务器的edu前缀并向本地DNS服务器dns.poly.edu返回负责edu的顶级域DNS服务器的IP地址列表
4. 本地DNS服务器接收到了返回的报文,根据报文中的IP地址,向该顶级域DNS服务器发送查询报文
5. 顶级域DNS服务器注意到了umass.edu前缀,用包含权威DNS服务器的IP地址进行响应,该权威DNS服务器是负责马萨诸塞大学的dns.umass.edu
6. 本地DNS服务器直接向主机dns.umass.edu重发查询报文
7. 主机dns.umass.edu使用gaia.cs.umass.edu的IP地址做为响应,传回给本地DNS服务器
8. 最终,本地DNS服务器将包含最终结果的查询报文转发给请求主机cis.poly.edu
【DNS缓存】.net
- 为了改善时延性能并减小在因特网上处处传输的DNS报文数量,DNS普遍使用缓存技术。
- 原理:当一个DNS服务器接收一个DNS回答(例如,包含主机名到IP地址的映射)时,DNS服务器能将回答中的信息缓存在本地存储器。因为主机与主机名的IP地址映射决不是永久的,因此DNS服务器在一段时间后(一般设置为两天)将丢弃缓存的信息。
## DNS记录和报文
【DNS记录】3d
实现DNS分布式数据库的全部DNS服务器共同存储着资源记录(Resource Record,RR),RR提供了主机名到IP地址的映射。下面是RR的基本格式:代理

- Type=A name 是主机名 Value是IP地址。 例如: (relay1.bar.foo.com, 145.37.93.126, A)
- Type=NS name 是域 (如 foo.com) Value是该域的权威名字服务器的IP地址。如(foo.com, dns.foo.com, NS)
- Type=MX Value是与name相联系的邮件服务器。如(mail.bar.foo.com)
- Type=CNAME Value是别名为name的主机对应的规范主机名。如(foo.com, relay1.bar.foo.com)
- 注:经过使用MX记录,一个公司的邮件服务器和其余服务器(如它的Web服务器)可使用相同的别名
- 以图2-21为例,
【DNS报文】
DNS只有两种报文,即查询和回答报文,而且这两种报文有着相同的格式。下图是DNS报文格式:

- 前12字节是首部区域,其中包括标识符、标志、问题数、回答RR数、权威RR数、附加RR数共6个字段。标识符字段16bit,用于标识这个查询报文。
- 标识符会被复制到对查询的回答报文中,以便让客户机用它来匹配发送的请求和接收到的回答。标志字段含有若干标志,1bit的“查询,回答”标志位指出报文是查询报文(0)仍是回答报文(1)。当某DNS服务器刚好是被请求主机的权威DNS服务器时,1bit的“权威的”标志位被放置在回答报文中。若是客户机但愿DNS服务器执行递归查询,特设置1bit的“但愿递归”标志位。若是该DNS服务器支持递归查询,在它的回答报文中会对1bit的“递归可用”标志位置位。在首部区域中,还有4个“数量”字段,分别给出了在首部后四类数据区域出现的数量。
- 问题区域包含正在进行查询的信息。该区域包括:名字字段,用于指出正在被查询的主机名字;类型字段,用于指出正在被询问的问题类型,例如是A类问鹿仍是MX问题。
- 回答区域包含了对最初请求的名字的资源记录。每一个记录中含有Type(如A记录、NS记录、CNAME记录、MX记录)字段、Value字段和TTL字段。前面讲过,一个主机名能够对应多个IP地址,因此在一个回答报文的回答区域中能够包含多条RR。权威区域包含了其余权威DNS服务器的记录
- 附加区域包含了其余一些有用的记录,例如,在一个MX请求的回答报文的回答区域包含了一条资源记录,给出了邮件服务器的规范主机名。该附加区域就能够包含一个类型A记录,提供对于该邮件服务器的规范主机名的IP地址。
【在DNS中插入记录】
- 假设你刚刚建立了一个网络乌托邦(Network Utopia)公司, 要作的第一件事情就是到注册登记机构注册域名(networkutopia.com), 注册的时候,须要向该机构提供你的权威DNS服务器的名字和IP地址,该注册机构将确保将一个NS记录和A记录被插入com顶级域DNS服务器中。
- 例如,假设咱们的网络乌托邦(Network Utopia)公司的权威服务器的主机名和IP地址为dns1.networkutopia.com 和 128.119.40.111,则该注册机构将如下记录插入com顶级域DNS服务器
- (networkutopia.com, dns1.networkutopia.com,NS)
- (dns1.networkutopia.com, 128.119.40.111,A)