想要查找给定主机名的 IP 地址的应用程序不必提供自己的例程来查找主机和 IP 地址。相反,它依赖于许多透明地执行此操作的库函数,称为 gethostbyname(3) 和 gethostbyaddr(3)。传统上,这些以及许多相关的过程被分组在一个单独的库中,称为解析器库;在 上,这些是标准 libc 的一部分。通俗地说,这些函数的集合因此被称为“解析器”。
现在,在像以太网这样的小型网络,甚至是一组以太网集群中,维护将主机名映射到地址的表并不困难。此信息通常保存在名为 /etc/hosts 的文件中。当添加或删除主机,或重新分配地址时,您只需更新所有主机上的 hosts 文件即可。很明显,对于包含超过少数几台机器的网络,这将变得很麻烦。
解决此问题的一种方案是 NIS,即太阳微系统开发的网络信息系统,俗称 YP 或黄页。NIS 将 hosts 文件(和其他信息)存储在主机的数据库中,客户端可以根据需要从中检索。尽管如此,这种方法仅适用于中等规模的网络(如 LAN),因为它涉及到集中维护整个 hosts 数据库,并将其分发到所有服务器。
在互联网上,地址信息最初也存储在单个 HOSTS.TXT 数据库中。该文件由网络信息中心(NIC)维护,必须由所有参与站点下载和安装。当网络增长时,这种方案出现了一些问题。除了定期安装 HOSTS.TXT 所涉及的管理开销外,分发它的服务器的负载也变得太高。更严重的问题是所有名称都必须在 NIC 注册,NIC 必须确保没有名称被重复发布。
这就是为什么在 1984 年采用了一种新的名称解析方案,即域名系统。DNS 由 Paul Mockapetris 设计,同时解决了这两个问题。