Fork me on GitHub

DNS

DNS

概述及作用

我们平常在访问某个网站时不使用IP地址,而是用一串由罗马字和点号组成的字符串。而一般用户在使用TCP/IP进行通信时也不使用IP地址。而这样做正是因为有了DNS将字符串自动转换为具体的IP地址的功能。

DNS的产生

在互联网的起源ARPANET中,起初由互联网信息中心整体管理一份hosts文件。如果新增一台计算机接入到ARPANET网或者已有的计算机要进行IP地址变更,中心的这个hosts文件就得更新,而其他计算机则不得不定期下载最新的hosts文件才能正常使用网络。

随着网络规模的不断扩大、接入计算机的个数不断增加,使得这种集中管理主机名和IP地址的登陆、变更处理的可行性逐渐降低。

在上述背景之下,产生了一个可以有效管理主机名和IP地址之间对应关系的系统,就是DNS系统。在应用中,当用户输入主机名(域名)时,DNS会自动检索哪个注册了主机名和IP地址的数据库,并迅速定位对应的IP地址。而且,如果主机名和IP地址需要进行变更时,也只需要在组织机构内部进行处理即可,而没必要再向其他机构进行申请或报告。这样,有了DNS,无论网络规模变得多么庞大,都能在一个较小的范围内通过DNS进行管理,充分解决了ARPANET初期遇到的问题。

DNS域名的构成

域名是指为了识别主机名称和组织机构名称的一种具有分层的名称。例如,仓敷艺术科学大学的域名如下:

kusa.ac.jp

域名由几个英文字母用点号链接构成。在上述域名中最左边的“kusa”表示仓敷艺术科学大学固有的域名。而“ac”代表大学或其他高等教育机构。最后边的“jp”则代表日本。

在使用域名时,可以在每个主机名后面追加上组织机构的域名。例如,由pepper、piyo、kinoko等主机时,它们完整的带域名的主机名将呈如下形式:

pepper.kusa.ac.jp
piyo.kusa.ac.jp
kinoko.kusa.ac.jp

分层结构

DNS的分层结构如图所示,由于看起来像一颗倒挂的树,人们也罢这种分层结构叫做树形结构。

捕获.PNG

每个分层中,都设有一个域名服务器,它可以管理所在分层的域的相关信息。根部所设置的DNS叫做根域名服务器。它对DNS的检索数据功能起着至关重要的作用。根域名服务器中注册着根一下第一层域名服务器的IP地址。如果想要增加顶级域名或者修改顶级域名,就得在根域名服务器中进行追加或变更。类似地,如果想要修改该分层的域名或重新设置域名服务器的IP地址,还必须得在其上层的域名服务器中进行追加或修改。

DNS查询

例如,当处于kusa.co.jp域中的计算机想要访问网站 www.ietf.org ,会经过如下流程

  1. 向DNS服务器查询IP地址
  2. 由于kusa的DNS服务器并不知道 www.ietf.org 的IP地址是什么,它向根域名服务器请求进行查询
  3. 由于根域名服务器知道 www.ietf.org 的域名服务器的地址,所以将地址返回
  4. DNS服务器向 ietf.org 查询 www.ietf.org 的IP地址
  5. 将查询到的IP地址返回给客户端
  6. 计算机开始与 www.ietf.org 进行通信

解析器(进行DNS查询的主机和软件)为了查询IP地址,向域名服务器(不仅可以访问域中的域名服务器,还可以访问其他域的域名服务器)进行查询处理。接收这个查询请求的域名服务器首先会在自己的数据库进行查找。如果有该域名所对应的IP地址就返回。如果没有,则域名服务器再向上一层根域名服务器进行查询处理。上一层根服务器则对下层进行遍历,直到找到指定的域名服务器,否则再向上层根服务器查询。

解析器和域名服务区将最新了解到的信息暂时保存再缓存里,这样,可以减少每次查询时的性能消耗。