域名缓存(DNS Lookup)
DNS 也许是全世界最大、使用最频繁的信息查询系统,如果没有适当的分流机制,DNS 将会成为整个网络的瓶颈。
DNS 的作用是将人类易理解的域名地址转换为便于计算机处理的 IP 地址,是一个"透明多级分流系统"典型样例。
DNS解析的简化过程
简要说明我们访问百度搜索引擎的DNS的解析过程
1.从根域名服务器上查询顶级域名服务器地址
2.访问顶级域名服务器查询权威域名服务器的地址
3.访问权威域名服务器 查询目标域名的ip
DNS解析的完整过程
下面以我们在浏览器端键入www.icyfenix.com.cn后经过的DNS解析完整过程进行说明。
- 客户端先检查本地的 DNS 缓存,查看是否存在并且是存活着的该域名的地址记录。DNS 是以存活时间(Time to Live,TTL)来衡量缓存的有效情况的,所以,如果某个域名改变了 IP 地址,DNS 服务器并没有任何机制去通知缓存了该地址的机器去更新或者失效掉缓存,只能依靠 TTL 超期后的重新获取来保证一致性。后续每一级 DNS 查询的过程都会有类似的缓存查询操作,再遇到时笔者就不重复叙述了。
- 客户端将地址发送给本机操作系统中配置的本地 DNS(Local DNS),这个本地 DNS 服务器可以由用户手工设置,也可以在 DHCP 分配时或者在拨号时从 PPP 服务器中自动获取到。
- 本地 DNS 收到查询请求后,会按照“是否有
www.icyfenix.com.cn
的权威服务器”→“是否有icyfenix.com.cn
的权威服务器”→“是否有com.cn
的权威服务器”→“是否有cn
的权威服务器”的顺序,依次查询自己的地址记录,如果都没有查询到,就会一直找到最后点号代表的根域名服务器为止。这个步骤里涉及了两个重要名词:
-
- 权威域名服务器(Authoritative DNS):是指负责翻译特定域名的 DNS 服务器,“权威”意味着这个域名应该翻译出怎样的结果是由它来决定的。DNS 翻译域名时无需像查电话本一样刻板地一对一翻译,根据来访机器、网络链路、服务内容等各种信息,可以玩出很多花样,权威 DNS 的灵活应用,在后面的内容分发网络、服务发现等章节都还会有所涉及。
- 根域名服务器(Root DNS)是指固定的、无需查询的顶级域名(Top-Level Domain)服务器,可以默认为它们已内置在操作系统代码之中。全世界一共有 13 组根域名服务器(注意并不是 13 台,每一组根域名都通过任播的方式建立了一大群镜像,根据维基百科的数据,迄今已经超过 1000 台根域名服务器的镜像了)。13 这个数字是由于 DNS 主要采用 UDP 传输协议(在需要稳定性保证的时候也可以采用 TCP)来进行数据交换,未分片的 UDP 数据包在 IPv4 下最大有效值为 512 字节,最多可以存放 13 组地址记录,由此而来的限制。
- 现在假设本地 DNS 是全新的,上面不存在任何域名的权威服务器记录,所以当 DNS 查询请求按步骤 3 的顺序一直查到根域名服务器之后,它将会得到“
cn
的权威服务器”的地址记录,然后通过“cn
的权威服务器”,得到“com.cn
的权威服务器”的地址记录,以此类推,最后找到能够解释www.icyfenix.com.cn
的权威服务器地址。 - 通过“
www.icyfenix.com.cn
的权威服务器”,查询www.icyfenix.com.cn
的地址记录,地址记录并不一定就是指 IP 地址,在 RFC 规范中有定义的地址记录类型已经多达数十种,譬如 IPv4 下的 IP 地址为 A 记录,IPv6 下的 AAAA 记录、主机别名 CNAME 记录,等等。