Linux程序员

DNS(一)抽象理解DNS

2017-06-30  本文已影响763人  虞大胆的叽叽喳喳

DNS 是网络上非常重要的一个概念,不仅仅是码农任何上网的人都会接触它,DNS 是非常复杂,这篇文章希望以比较简单的方式去理解它,让非码农也能了解基本概念,从而有效的去运用它。

DNS 是干什么的

当我们在浏览器输入一个网址访问资源的时候,浏览器怎么知道资源在哪儿呢?必须要有一个 IP 地址,浏览器才能和放置资源的服务器连接。而 DNS 的作用其实就是翻译域名,获取这个域名对应的 IP 地址。

那为什么不直接使用 IP 地址访问服务器的资源,原因很简单,IP 地址太难记忆,另外服务器绑定的 IP 可能变化,而浏览器是不知道这个变化的。

对于我们上网的人来说,谁在提供 DNS 服务呢?或者说谁在翻译这个 IP 地址呢?不同的操作系统有不同的方式。

在 Windows 中,可以在控制面板网络连接中配置,一般有两种方式:

这种 DNS 服务器称为本地 DNS 服务器,由它来负责 IP 解析工作。

一旦配置好本地 DNS 服务器后,在电脑上任何软件(比如浏览器)想使用 DNS 翻译功能就会向本地 DNS 服务器发出请求。

在 Linux 中,是通过 /etc/resolv.conf 文件配置本地 DNS 服务器。

对于大部分上网的人来说,了解本地 DNS 服务器如何配置就可以了,一般 DNS 服务器会自动分配,比如在家里你通过宽带上网,使用的本地 DNS 服务器一般是这个 ISP 提供的。

DNS 是一个数据库

DNS 首先是一个巨大的数据库,这个数据库是有层级关系的,而且是分布在世界各地的。那么域名是如何映射到这个数据库中的呢?首先来理解几个概念。

(1)域名

一个域名表示你拥有了互联网的一个资源,通过域名也能了解到一个组织的主人是谁,比如 google.com 表示谷歌这个组织拥有的一个互联网资源。

子域名,主要是一个企业为了规范化自己的域名系统和服务,而在一级域名下扩展出来的名称系统。newyingyong.cn 这个域名是我的,每开发一个项目就会新扩展一个子域名,比如 http://www.rss.newyingyong.cn 这个服务的子域名就是 rss.newyingyong.cn

其实对于 .com 域名来说,google.com 就是它的子域名,这体现了域名系统或者说 DNS 系统的层级性。

(2)主机

通过域名,我们能够定义一个主机,比如大部分 WEB 服务,默认的主机名就是 WWW。
google.com 其实隐藏了默认的主机名,实际上等同 www.google.com ,www 是 google.com 这个域名下定义的虚拟主机。

(3)Fully Qualified Domain Name

FQDN 叫做绝对域名名称,由主机名和域名组合而成,注意一个完整的 FQDN 末尾有一个点号。比如 www.google.com. 代表一个 FQDN。

现在来说说 DNS 系统的层级数据库,DNS 最顶层是点号(.),叫做 ROOT 根域名。接下来是 TLDs,表示顶级域名,顶级域名分为两种类型:

pic1

层级系统的意思表示在这个数据库中,根域名服务器管理顶级域服务器,而顶级域管理一级域名服务器,最后一个域名服务器管理具体主机的 IP 信息。

实体 DNS 服务器

上面说了 DNS 是一个数据库,那么这个数据库的组成部分就是具体的服务器,这些服务器来维护 DNS 信息。而维护是通过授权方式的,而且是一级授权。

(1)根域名服务器

根域名服务器由 ICANN 来管理,在全球有 13 个根域名服务器,每个根域名服务器由多台机器。分布在全球各地,查询量非常大,所以分布在各地是有原因的。根域名服务器主要负责解析 TLD 服务器。

(2) TLD 服务器

TLD 服务器负责解析 Domain-Level 服务器。

(3)Domain-Level 服务器

这个服务器一般告之某个域名解析出来的 IP 地址,比如 www.google.com ,由负责管理 google.com 域名的服务器解析 IP 地址,这个层级的服务器叫做 Domain-Level 服务器 。

通过上面看出,每个层级的域名服务器负责管理他能管辖的域名,而且他也只管理他下一级的,不会跨级别管理,原因就是授权。这相当于一个公司,CEO 管理总经理,总经理管理经理,经理管理具体的员工,一般不会跨级别管理,因为事情做的太多就没有效率了。

以上的服务器也统称为权威域名服务器。他们来负责维护具体 DNS 的信息。

DNS 是如何具体工作的

客户端会发送一个命令告诉本地 DNS 服务器,告诉我 www.google.com. 这个 FQDN 的 IP 地址(A 记录),然后就等着拿结果,这种查询方式叫做递归查询。注意区分本地域名服务器和权威域名服务器的区别。本地域名服务器理论上只是查询,没有维护 DNS 信息。

本地 DNS 服务器最终会找出具体的 IP 地址,但是这个步骤不是一步到位的,可能有很多步骤,这种查询方式叫做迭代查询。

本地 DNS 服务器也叫做 Hinet 服务器,也叫做 Resolving Name Server。这样的服务器一般由本地 ISP 提供或者由其他组织提供,比如 Google 的 8.8.8.8 域名服务器。

借用《鸟哥私房菜》的图来说明:

pic2

这里出现了两个新的名词,Resolving Name Server 负责具体的 DNS 查询工作(也叫本地 DNS 服务器),中国很多 ISP 很不厚道,提供的 DNS 服务器会进行 DNS 污染操作,假如为了安全可以使用一些其他组织的 DNS 服务器,比如 8.8.8.8

另外一个服务器叫做 NS 服务器,这个告诉调用者,具体那台机器维护某个域名的 DNS 信息(比如 A 记录),为了获取某个域名的 IP 地址,需要去向它查询,理解身上有些拗口。

上个例子中根域名服务器或者顶级域名服务器告诉调用者(本地 DNS 服务器)去具体某个 NS 服务器去查询 DNS 信息,而最后到了 Google 的 NS 服务器后,这台 NS 服务器就会直接解析域名对应的 A 记录了。

申请域名后应该干什么

对于个人用户来说,申请域名后(newyingyong.cn)(同时有了个 IP),就要进行域名的解析工作了,比如说我在万网(域名注册机构)买了个域名,阿里云买了个主机,默认就是在万网(域名管理机构)进行域名解析工作的,万网的 NS 服务器名称是 dns1.iidns.com.,在万网(域名管理机构)后台,配置域名(实际上是主机)和 IP 地址即可。

![DNS][2017-dns3]
[2017-dns3]: http://notes.newyingyong.cn/static/image/2017/dns3.png "DNS"

假如你要更改一个域名管理机构(比如 DNSPod)负责域名及诶工作,你的域名注册机构管理后台配置 NS 服务器是 DNSpod 就可以了,由他们负责域名的解析工作。

发现没有,这里体现了 DNS 系统的授权特性,授权域名管理机器去管理这个域名的 DNS 信息。

那么背后发生了什么?一旦由 DNSPod 负责解析工作,它会做两件事情:

假如是一家大型公司,比如有很多一级域名或者很多子域名,可能想自己维护 DNS 信息,那么就要自己搭建一个 DNS 服务器,然后在自己的域名管理机构配置 NS 服务器即可,这个 NS 服务器的地址就是你自己的服务器,负责维护域名的 DNS 信息。比如 sina.com.cn 的域名服务器就是自己维护的,名称是 ns1.sina.com.cn.,这台服务器地址是 202.106.184.166。

那么为什么大型机构希望维护自己的域名信息呢?

DNS 是个协议

DNS 是个数据库,更是个协议,默认使用 UDP 协议,端口号是 53,很多客户端(比如浏览器和 dig)通过这个协议,查询出了某个域名的 A 记录。

而 DNS 服务器为了管理,一般使用 BIND 这个软件来提供具体的服务(服务器端)。

这篇文章简单讲了下 DNS 的基本概念,有点枯燥,后面会通过 dig 命令能理解 DNS,也会将如何搭建 DNS 服务器。

大家可以思考下,DNS 的缓存是什么概念,DNS 污染是什么,什么是动态 DNS,什么是泛域名,为什么 NS 服务器一般有多台,为什么自己电脑上配置本地的 DNS 服务器有多台。

上一篇下一篇

猜你喜欢

热点阅读