2.4 DNS - The Internet's Directo

2020-05-03  本文已影响0人  找不到工作

我们有两种方式指定一个 host,hostname 或者 IP 地址。显然 hostname 更容易记忆。我们需要一个目录服务来将 hostname 转为 IP 地址。这就是域名服务(Domain Name System, DNS)的任务。

2.4.1 Services Provided by DNS

DNS 是一个由多个 DNS 服务器组成的分布式数据库。它提供了一个应用层协议用于查询这个数据库。DNS 协议使用 UDP 作为传输层协议,使用 53 端口。

DNS 被其他应用层协议(例如 HTTP 和 SMTP)用来将 hostname 转为 IP 地址。例如某个用户请求 URL www.someschool.edu/index.html,首先需要将 www.someschool.edu 转为 IP 地址。

  1. 运行 DNS 应用的 client
  2. 浏览器从 URL 中解析出 www.someschool.edu 并发送给 DNS 应用的 client
  3. DNS client 发送一个包含 hostname 的查询请求给 DNS server
  4. DNS client 收到回复,包含 hostname 对应的 IP 地址
  5. 浏览器利用 IP 地址初始化 TCP 连接

我们从这个例子看出,DNS 增加了额外的延迟,但是由于 DNS 服务是分布式的,IP 地址会缓存在附近的 DNS server 中。帮助降低 DNS 的网络流量和延迟。

2.4.2 Overview of How DNS Works

应用程序调用 DNS 的客户端,指定需要转换的 hostname,在大部分 UNIX 系统中,调用方式是 gethostbyname()。DNS 客户端会通过 53 端口发送 UDP 数据包进行查询。DNS 服务器会回复转换后的 IP 地址。

A Distributed, Hierarchical Database

DNS 有分多个层级的服务器集群,分布在世界各地。没有哪个单独的 DNS 服务器具有所有 hostname 到 IP 的映射。

大概来讲,DNS 服务器分为三个层级:

Hierarchy of DNS servers

假设我们需要查询 www.amazon.com 的 IP。

  1. client 会首先请求 root servers ,它会返回 top-level domain 是 com 的 TLD servers 的 IP 地址。

  2. client 再请求其中一个 TLD servers,它会返回 amazon.com 的 authoritative server。

  3. 最后,client 请求其中一个 authoritative server 并得到 www.amazon.com 的 hostname。

DNS Caching

为了提高 DNS 响应速度,并减少 DNS 对网络资源的占用,我们会对 DNS 进行缓存。当 DNS 服务器收到 DNS 响应(包含 hostname 到 IP 地址的映射)时,它会缓存响应消息。当收到另一个请求时,如果 hostname 与已缓存的一致,则直接利用本地存储的映射得到 IP 地址。DNS 服务器会在一段时间后清除这些缓存的映射,一般为 2 天。

2.4.3 DNS Records and Messages

resource records (RRs) 记录了 hostname 到 IP 地址的映射。每个 DNS 响应消息中包含一条或多条 RRs。

RR 是一个有四个元素的 tuple:

(Name, Value, Type, TTL)

TTL (time to live) 是决定了这条记录是否应该从 DNS Cache 中删除掉,这里不作太多展开。NameValue 根据 Type 的变化含义不同。

下面是一些 RR 的例子以及含义:

Type Name Value example
A hostname IP address (relay1.bar.foo.com, 145.37.93.126, A)
NS domain hostname of authoritative servers (foo.com, dns.foo.com, NS)
CNAME hostname canonical hostname (foo.com, relay1.bar.foo.com, CNAME)
MX hostname canonical hostname of a mail server (foo.com, relay1.bar.foo.com, CNAME)

如果 DNS 服务器是 authoritative 的,那么会包含一个 Type=A 的记录。如果不是,那么会包含一个 Type=NS 的记录,记录中有 hostname 所在的域。

DNS 消息

仅有 2 类 DNS 消息,即查询和回复。他们俩具有同样的格式,如下图所示:

DNS message format

其他 fields 含义很明显,主要讲一下 Flags。其中包含了:

上一篇 下一篇

猜你喜欢

热点阅读