DNS 的全称是 ,它是一个由分层的 实现的分布式数据库;它还是一个使得主机能够查询分布式数据库的应用层协议。DNS 服务器通常是运行 软件的 UNIX 机器。DNS 协议运行在 之上,使用 53 端口。
DNS 基本概述
与 HTTP、FTP 和 SMTP 一样,DNS 协议也是应用层的协议,DNS 使用模式运行在通信的端系统之间,在通信的端系统之间通过下面的端到端运输协议来传送 DNS 文。但是 DNS 不是一个直接和用户打交道的应用。DNS 是为因特 上的用户应用程序以及其他软件提供一种核心功能。
DNS 通常不是一门独立的协议,它通常为其他应用层协议所使用,这些协议包括 HTTP、SMTP 和 FTP,将用户提供的主机名解析为 IP 地址。
下面根据一个示例来描述一下这个 DNS 解析过程,这个和你输入 址后,浏览器做了什么操作有异曲同工之处
你在浏览器键入 www.someschool.edu/index.html 时会发生什么现象使用户主机能够将一个 HTTP 请求 文发送到 Web 服务器 www.someschool.edu ,会经历如下操作
- 同一台用户主机上运行着 DNS 应用的客户端
- 浏览器从上述 URL 中抽取出主机名 www.someschool.edu ,并将这台主机名传给 DNS 应用的客户端
- DNS 客户向 DNS 服务器发送一个包含主机名的请求。
- DNS 客户最终会收到一份回答 文,其中包含该目标主机的 IP 地址
- 一旦浏览器收到目标主机的 IP 地址后,它就能够向位于该 IP 地址 80 端口的 HTTP 服务器进程发起一个 TCP 连接。
除了提供 IP 地址到主机名的转换,DNS 还提供了下面几种重要的服务
- ,有着复杂的主机名的主机能够拥有一个或多个其他别名,比如说一台名为 relay1.west-coast.enterprise.com 的主机,同时会拥有 enterprise.com 和 www.enterprise.com 的两个主机别名,在这种情况下,relay1.west-coast.enterprise.com 也称为 ,而主机别名要比规范主机名更加容易记忆。应用程序可以调用 DNS 来获得主机别名对应的规范主机名以及主机的 IP地址。
- ,同样的,电子邮件的应用程序也可以调用 DNS 对提供的主机名进行解析。
- ,DNS 也用于冗余的服务器之间进行负载分配。繁忙的站点例如 被冗余分布在多台服务器上,每台服务器运行在不同的端系统之间,每个都有着不同的 IP 地址。由于这些冗余的 Web 服务器,一个 IP 地址集合因此与同一个规范主机名联系。DNS 数据库中存储着这些 IP 地址的集合。由于客户端每次都会发起 HTTP 请求,所以 DNS 就会在所有这些冗余的 Web 服务器之间循环分配了负载。
DNS 工作概述
假设运行在用户主机上的某些应用程序(如 Web 浏览器或邮件阅读器) 需要将主机名转换为 IP 地址。这些应用程序将调用 DNS 的客户端,并指明需要被转换的主机名。用户主机上的 DNS 收到后,会使用 UDP 通过 53 端口向 络上发送一个 DNS 查询 文,经过一段时间后,用户主机上的 DNS 会收到一个主机名对应的 DNS 回答 文。因此,从用户主机的角度来看,DNS 就像是一个黑盒子,其内部的操作你无法看到。但是实际上,实现 DNS 这个服务的黑盒子非常复杂,它由分布于全球的大量 DNS 服务器以及定义了 DNS 服务器与查询主机通信方式的应用层协议组成。
DNS 最早的设计是只有一台 DNS 服务器。这台服务器会包含所有的 DNS 映射。这是一种的设计,这种设计并不适用于当今的互联 ,因为互联 有着数量巨大并且持续增长的主机,这种集中式的设计会存在以下几个问题
- ,如果 DNS 服务器崩溃,那么整个 络随之瘫痪。
- ,单个 DNS 服务器不得不处理所有的 DNS 查询,这种查询级别可能是上百万上千万级
- ,单个 DNS 服务器不可能 所有的用户,假设在美国的 DNS 服务器不可能临近让澳大利亚的查询使用,其中查询请求势必会经过低速和拥堵的链路,造成严重的时延。
- ,维护成本巨大,而且还需要频繁更新。
所以 DNS 不可能集中式设计,它完全没有可扩展能力,因此采用,所以这种设计的特点如下
分布式、层次数据库
首先分布式设计首先解决的问题就是 DNS 服务器的扩展性问题,因此 DNS 使用了大量的 DNS 服务器,它们的组织模式一般是层次方式,并且分布在全世界范围内。没有一台 DNS 服务器能够拥有因特 上所有主机的映射。相反,这些映射分布在所有的 DNS 服务器上。
大致来说有三种 DNS 服务器:、 和 。这些服务器的层次模型如下图所示
DNS 解析器
进行 DNS 查询的主机和软件叫做 ,用户所使用的工作站和个人电脑都属于解析器。一个解析器要至少注册一个以上域名服务器的 IP 地址。DNS 解析器是 DNS 查找的第一站,其负责与发出初始请求的客户端打交道。解析器启动查询序列,最终使 URL 转换为必要的 IP 地址。
:在迭代查询中,如果所查询的 DNS 服务器与查询名称不匹配,则其将返回对较低级别域名空间具有权威性的 DNS 服务器的引用。然后,DNS 客户端将对引用地址进行查询。此过程继续使用查询链中的其他 DNS 服务器,直至发生错误或超时为止。
操作系统内核缓存
在浏览器缓存查询后,会进行操作系统级 DNS 解析器的查询,操作系统级 DNS 解析器是 DNS 查询离开你的计算机前的第二站,也是本地查询的最后一个步骤。
DNS 文
共同实现 DNS 分布式数据库的所有 DNS 服务器存储了,RR 提供了主机名到 IP 地址的映射。每个 DNS 回答 文中会包含一条或多条资源记录。RR 记录用于回复客户端查询。
资源记录是一个包含了下列字段的 4 元组
RR 会有不同的类型,下面是不同类型的 RR 汇总表
DNS RR 类型 | 解释 |
---|---|
A 记录 | IPv4 主机记录,用于将域名映射到 IPv4 地址 |
AAAA 记录 | IPv6 主机记录,用于将域名映射到 IPv6 地址 |
CNAME 记录 | 别名记录,用于映射 DNS 域名的别名 |
MX 记录 | 邮件交换器,用于将 DNS 域名映射到邮件服务器 |
PTR 记录 | 指针,用于反向查找(IP地址到域名解析) |
SRV 记录 | SRV记录,用于映射可用服务。 |
DNS 有两种 文,一种是查询 文,一种是响应 文,并且这两种 文有着相同的格式,下面是 DNS 的 文格式
每个字段的含义如下
- : 1 bit 的 QR 标识 文是查询 文还是响应 文,查询 文时 QR = 0,响应 文时 QR = 1。
- : 4 bit 的 OpCode 表示操作码,其中,0 表示标准查询,1 表示反向查询,2 表示服务器状态请求。
- : 1 bit 的 AA 代表授权应答,这个 AA 只在响应 文中有效,值为 1 时,表示名称服务器是权威服务器;值为 0 时,表示不是权威服务器。
- : 截断标志位,值为 1 时,表示响应已超过 512 字节并且已经被截断,只返回前 512 个字节。
- : 这个字段是期望递归字段,该字段在查询中设置,并在响应中返回。该标志告诉名称服务器必须处理这个查询,这种方式被称为一个递归查询。如果该位为 0,且被请求的名称服务器没有一个授权回答,它将返回一个能解答该查询的其他名称服务器列表。这种方式被称为迭代查询。
- : 可用递归字段,这个字段只出现在响应 文中。当值为 1 时,表示服务器支持递归查询。
- : 保留字段,在所有的请求和应答 文中,它的值必须为 0。
- : 这个字段表示信息是否是已授权。
- : 这个字段表示是否禁用安全检查。
- :这个字段是返回码字段,表示响应的差错状态。当值为 0 时,表示没有错误;当值为 1 时,表示 文格式错误(Format error),服务器不能理解请求的 文;当值为 2 时,表示域名服务器失败(Server failure),因为服务器的原因导致没办法处理这个请求;当值为 3 时,表示名字错误(Name Error),只有对授权域名解析服务器有意义,指出解析的域名不存在;当值为 4 时,表示查询类型不支持(Not Implemented),即域名服务器不支持查询类型;当值为 5 时,表示拒绝(Refused),一般是服务器由于设置的策略拒绝给出应答,如服务器不希望对某些请求者给出应答。
相信读者跟我一样,只看这些字段没什么意思,下面我们就通过抓包的方式,看一下具体的 DNS 文。
可以看到,标志位也是 ,可以说明这就是上面查询请求的响应。
查询请求已经解释过的 文我们这里就不再说明了,现在只解释一下请求 文中没有的内容
- 紧随在 OpCode 后面的 AA 字段已经出现了,它的值为 0 ,表示不是权威 DNS 服务器的响应
- 最后是 rcode 字段的响应,值为 0 时,表示没有错误。
问题区域
问题区域通常指 文格式中查询问题的区域部分。这部分用来显示 DNS 查询请求的问题,包括查询类型和查询类
可以看到,这是对 mobile-gtalk.l.google.com 发起的 DNS 查询请求,查询类型是 A,那么得到的响应类型应该也是 A
资源记录部分的字段含义如下
- 域名:DNS 请求的域名。
- 类型:资源记录的类型,与问题部分中的查询类型值是一样的。
- 类:地址类型、与问题中的查询类值一样的。
- 生存时间:以秒为单位,表示资源记录的生命周期。
- 资源数据长度:资源数据的长度。
- 资源数据:表示按查询段要求返回的相关资源记录的数据。
资源记录部分只有在 DNS 响应包中才会出现。下面我们就来通过响应 文看一下具体的字段示例
具体字段含义
- :即 Primary Name Server,这是区域的主要名称服务器的名称。
- :即 Responsible authority’s mailbox,RNAME 代表管理员的电子邮件地址,@ 用 . 来表示,也就是说 admin.example.com 等同于 admin@example.com。
- : 即 Serial Number ,区域序列 是该区域的唯一标识符。
- :即 Refresh Interval,在请求主服务器提供 SOA 记录以查看其是否已更新之前,辅助服务器应等待的时间(以秒为单位)。
- :服务器应等待无响应的主要名称服务器再次请求更新的时间。
- :如果辅助服务器在这段时间内没有收到主服务器的响应,则应停止响应对该区域的查询。
上面提到了主要名称服务器和服务名称服务器,他们之间的关系如下
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!