美文网首页
2.4 DNS - The Internet's Directo

2.4 DNS - The Internet's Directo

作者: 找不到工作 | 来源:发表于2020-05-03 15:10 被阅读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 服务器分为三个层级:

    • root DNS servers
    • top-level domain (TLD) DNS servers
    • authoritative DNS servers
      拥有可供公共访问的 host (例如 Web 或者邮件服务器) 的组织都需要给 DNS 提供 hostname 和 IP 地址都映射关系。这些关系被存储在 authoritative servers 中。
    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。其中包含了:

    • 标识该消息是查询(query)还是回复(reply)
    • 标识 DNS server 是不是一个 authoritative server
    • 如果 DNS server 没有找到记录,是否递归查找
    • DNS server 是否支持递归

    相关文章

      网友评论

          本文标题:2.4 DNS - The Internet's Directo

          本文链接:https://www.haomeiwen.com/subject/ggskghtx.html