DNS:互联网的目录服务
DNS的主要任务
- 一个分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
DNS是能够进行主机名到IP地址转换的目录服务。DNS协议运行在UDP之上,使用53号端口。
DNS提供的其他服务
- 主机别名(host aliasing):应用程序可以通过调用DNS来获得主机别名对应的规范主机名(canonical hostname)和IP地址。
- 邮件服务器别名(mail server aliasing):电子邮件应用程序可以调用DNS,对提供的主机名别名进行解析,获得主机的规范主机名和IP地址。
MX记录允许一个公司的邮件服务器和Web服务器使用相同(别名)的主机名。
- 负载分配(load distribution):可以把一个IP地址集合与同一个规范主机名相联系。当发起DNS请求时,该服务器用整个集合进行响应,但在每个回答中循环这些地址次序。
DNS工作机理
集中式设计的问题:
- 单点故障(a single point of failure):如果服务器崩溃,整个网络就会瘫痪。
- 通信容量(traffic volume):单个DNS服务器处理所有DNS请求。
- 远距离的集中式数据库(distant centralized database):单个DNS服务器不能可“临近”所有的查询客户。
- 维护(maintenance):单个DNS服务器必须维护整个网络上所有主机的记录。
分布式、层次数据库
三种DNS服务器
- 根DNS服务器:根服务器提供TLD服务器的IP地址。
- 顶级域服务器:每个顶级域(如com,org,cn等),都有TLD服务器。TLD服务器提供权威DNS服务器的IP地址。
- 权威DNS服务器:多数大学和大公司实现和维护自己的基本和辅助(备份)的权威DNS服务器。
本地DNS服务器:当主机发出DNS请求时,起着代理的作用,并将请求转发到DNS服务器层次结构中。
递归查询和迭代查询
假设主机thss.tsinghua.edu.cn想知道主机ss.xju.edu.cn的IP地址,同时两台主机的本地DNS服务器分别为dns.tsinghua.edu.cn和dns.xju.edu.cn,查询过程如下
- 主机thss.tsinghua.edu.cn向他的本地DNS服务器发送一个DNS查询报文。
- 本地DNS服务器将该报文转发到根DNS服务器。
- 根DNS服务器通过其cn前缀,向本地DNS服务器返回负责cn的TLD的IP地址列表。
- 本地DNS服务器再次向TLD服务器之一发送查询报文。
- TLD服务器通过通过edu.cn前缀,用权威DNS服务器的IP地址进行响应。
- 再次重复步骤4,得到xju.edu.cn的权威DNS服务器dns.xju.edu.cn的IP地址。
- 最后,本地DNS服务器直接向dns.xju.edu.cn发送查询报文。
- dns.xju.edu.cn用ss.xju.edu.cn的IP地址进行响应。
这个例子中,从thss.tsinghua.edu.cn到dns.tsinghua.edu.cn发出的查询是递归查询,因为该查询以自己的名义请求来获得该映射。后继的的几个查询时迭代查询,因为所有的回答都是直接返回给dns.tsinghua.edu.cn。
理论上讲,任何DNS查询既可以是迭代的也能是递归的
DNS记录
共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record),RR是一个包含的4个字段的元组
(Name, Value, Type, TTL)
TTL是该记录的生存时间,决定了资源记录从缓存中删除的时间。
Type常见的四种类型
- A:A记录提供了标准的主机名到IP地址的映射。
- NS:NS记录用于沿着查询链来路由DNS查询。
- CNAME:该记录能够向查询的主机提供一个主机名对应的规范主机名。
- MX:MX记录允许邮件服务器主机名具有简单的别名。