DNS—域名系统
前言:人们喜欢用便于记忆的主机名来标识主机,而路由器则喜欢定长的、有着层次结构的IP地址。为了折衷这些不同的偏好,我们需要一种能进行主机名到IP地址转换的目录服务。这就是域名系统DNS的主要任务。 DNS的定义
- DNS是一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议(DNS协议运行在UDP之上)
DNS提供的服务
- 主机别名: 有着复杂主机名的主机可能一个或者多个别名。在有别名的情况下,有一个规范主机名,主机别名一般比规范主机名更加容易记忆。应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机的IP地址
- 邮件服务器别名: 类似于主机别名
- 负载分配: 繁忙的站点被冗余地分布在多台服务器上,每台服务器均运行在不同的端系统上,每个都有着不同的IP地址。在这种情况下,一个规范主机名对应着一个IP地址集合,DNS数据库中存储着这些IP地址。当客户对映射到某地址集合的名字发出一个DNS请求时,该服务器用IP地址的整个集合来响应,但在每个回答中循环这些地址次序。这样,DNS就在这些冗余的服务器之间循环地分配了负载。
DNS的工作机理
应用程序调用DNS客户端—>用户主机上的DNS客户端向网络中发送一个DNS查询报文—>用户主机上的DNS客户端接收到一个DNS回答报文—>这个映射结果被传递到调用DNS客户端的应用程序
- 这是一个函数调用及返回的过程!!!
- 所有的DNS请求和回答报文使用UDP数据报经53号端口发送
- 这个调用过程产生了额外的网络时延
DNS服务器的设计 此时DNS服务器对我们来说还是一个黑盒,我们只能知道它可以通过网络向DNS客户端返回一个主机名到IP地址的映射结果,接下来我们讨论一下DNS服务器的设计理念及工作方式。
首先我们给出一个结论,DNS服务器是以树状结构组织的一个服务器群(分布式数据库) 除了以上三种层次的DNS服务器,还有一种不包含在该层次结构中的称为本地DNS服务器的DNS服务器,它起着代理的作用 查询本地DNS服务器地址 举例: 主机 cis.poly.edu 想知道主机 gaia.cs.umass.edu的IP地址 假设本地DNS服务器的IP为dns.poly.edu 假设gaia.cs.umass.edu的权威服务器名为dns.umass.edu 以上就是主机cis.poly.edu获取主机gaia.cs.umass.eduIP地址的全过程。其中过程1是递归查询,因为dns.poly.edu以自己的名义获得映射结果,最终返回到应用程序,而过程2,4,6均是迭代查询。就拿过程2来说,根服务器收到请求后,将向本地DNS服务器返回负责edu的TLD服务器的IP地址列表,该本地 DNS务器则再次向这些 TLD 服务器之一发送查询报文,4、6与二过程类似。
- 本例中共发送了8份DNS报文,为了减少由发送DNS报文产生的网络时延,我们引入了DNS缓存技术(在一个请求链中,当某DNS服务器接收到一个回答时,它能将该回答中的信息缓存在本地存储器中。由于主机名和IP地址的映射不是永久的,因此DNS在一段时间后丢弃缓存信息)
假设DNS服务器不是树状结构组织的服务器群,而就是一台UNIX机器,会出现以下问题
- 单点故障:如果该服务器崩溃,那么整个网络都会瘫痪
- 通信容量:单个的DNS服务器必须承担世界上所有的DNS查询
- 远距离的集中式数据库:该服务器只能位于地球上的一个位置,有离的进的查询,自然就有离得远的查询,离得远的查询可能还会经历低速和拥塞的链路,这将带来很大的时延
- 维护:记录数目庞大,难以维护
DNS记录
DNS资源记录(RR) (Name,Value,Type,TTL)TTL是该资源记录的生存时间
- Type=A,Name–主机名,Value–IP地址
(relay1.bar.foo.com,145.37.93.126,A) - Type=CNAME,Name–主机别名,Value–规范主机名
(foo.com,relay1.bar.foo.com,CNAME) - Type=MX,Name–邮件服务器别名,Value–邮件服务器的规范主机名
(foo.com,mail.bar.foo.com,MX) - Type=NS,Name–域(foo.com),Value–知道如何获得该域中主机地址的权威 DNS 服务器的主机名
(foo.com,dns.foo.com,NS) 注册域名其实就是向DNS服务器群(分布式数据库)插入DNS记录!!!
DNS报文
查询DNS记录的工具-----nslookup程序
|