DNS是什么,DNS的工作原理(非常详细)
说起 DNS 服务,大家可能并不熟悉,但是在我们平常上网的过程中总会有域名系统(Domain Name System,DNS)的身影出现。
DNS 服务的作用非常简单,就是根据域名查找出对应的 IP 地址。我们可以把它想象成一本巨大的通讯录,每个人名都会对应一个电话号码(每个域名都会对应一个 IP 地址)。
各位在上网的过程中是否产生过这样的疑惑,为什么我们在浏览器中输入类似“www.baidu.com”的地址就能打开百度的网站?在前面的学习过程中我们知道,访问某台服务器其实用的都是 IP 地址,那域名是怎么一回事呢?
早期,人们访问某个网站都是通过 IP 地址来访问的,类似于“192.168.4.23”的形式。但随着互联网的发展速度越来越快,各式各样的网站也越来越多,再用 IP 地址的方式访问网站已经非常吃力了。每个网站对应的就是一串 IP 地址,想要浏览某个网站就得和以前用座机一样,专门拿出个通讯录来查找该网站对应的 IP 地址,这样上网的资源和时间成本实在是太高了。
基于这样的情况,DNS 服务也就是域名系统,被开发出来。让 DNS 服务发挥通讯录的作用,人们只需要记住某个域名,在上网的时候在浏览器中输入域名,由 DNS 服务自动将域名翻译为对应的 IP 地址,翻译的过程在后台自动完成。
域名的出现是为了方便人们记忆,记住一串有规律的字符比记住一串数字要简单得多。以域名“www.baidu.com”为例,如下图所示:

图 1 单个域名的结构
一个完整的域名是由两个或者两个以上的部分组成的,各部分之间用英文的句号“.”来分隔,最后一个“.”的右边部分称为顶级域名(TLD,也称为一级域名),最后一个“.”的左边部分称为二级域名(SLD),二级域名的左边部分称为三级域名,依此类推,每一级的域名控制它下一级域名的分配。
每一级的域名都由英文字母和数字组成,域名不区分大小写,每级长度不能超过 63 个字节,一个完整的域名不能超过 255 个字节,一般域名的长度都是在 7~20 个字符左右。
以上是单个域名的结构,从全局来看,DNS 服务采用的是层级式树状结构的命名方法,其组织模型如下图所示。

图 2 DNS服务的组织模型
在图 2 中,每个节点都是由一台或多台 DNS 服务器组成的,上层 DNS 服务器知道下层服务器的位置,但下层不知道上层位置。
单独一台 DNS 服务器不可能知道全球所有的域名信息,所以域名系统就是一个分布式数据库系统,域名到 IP 地址之间的解析可以由若干个 DNS 服务器共同完成。每一个站点维护自己的信息数据库,并运行一个服务器程序供互联网上的客户端查询。由于是分布式系统,即使单个服务器出现故障,也不会导致整个系统失效,这消除了单点故障的隐患。
在 DNS 中,域的本质其实是一种管理范围的划分,最大的域是根域名,向下可以划分为顶级域、二级域、三级域、四级域等,每一级的域名控制它下一级域名的分配。
图 2 中的每个节点都是由一台或多台 DNS 服务器组成的,那么在一个节点或者一个区域中可以存在多种类型的 DNS 服务器,它们之间相互协助、相辅相成,提高工作效率。
主 DNS 服务器是一种权威性服务器,因为它可以以绝对的权威回答对其管辖域的任何查询。
辅助 DNS 服务器可以从主 DNS 服务器中复制一整套域信息。区域文件是从主 DNS 服务器中复制出来的,并作为本地磁盘文件存储在辅助 DNS 服务器中。这种复制称为“区域文件复制”。
在辅助 DNS 服务器中有一个所有域信息的完整拷贝,可以权威地回答对该域的查询。因此,辅助 DNS 服务器也称作权威性服务器。配置辅助 DNS 服务器不需要生成本地区域文件,因为可以从主 DNS 服务器中下载。
高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。对于高速缓存服务器,只需要配置一个高速缓存文件,但最常见的配置还包括一个回送文件。
下图给出的是一种典型的迭代查询:

图 3 典型的迭代查询
当主机不知道某个域名所对应的位置时,会先查询计算机中的 hosts 文件,hosts 文件中若没有,就查找本地 DNS 服务器的缓存(DNS 服务器缓存时间需要设置,最多为 1 天),缓存上没有,则查找 DNS 服务器的数据文件,若还是没有,本地 DNS 服务器会直接请求根域名服务器,根域名服务器会告知负责这个区域的 DNS 服务器位置,再由发送请求的本地 DNS 服务器进行查找。
根域名服务器只会告知负责的 DNS 服务器,并不负责解析。查询到 DNS 服务器后,再直接交给管理查询客户端的 DNS 服务器。因此,配置 DNS 服务器需要配置好根域名服务器的位置。
DNS 服务本身可以提供两种功能:一种是正向解析,另一种是反向解析:
正反向解析是完全不同的两棵解析树,不必在同一个服务器上,正反向区域记录也没必要完全对应。
一个区域解析库有且仅有一个 SOA 记录,且必须为解析库的第一条记录。SOA 记录语法格式为:
NS 记录的语法格式为:
为了防止邮递路由,MX 记录除了邮件交换器的域名外还有一个特殊参数:优先级值。优先级值是一个 0~99 的无符号整数,它给出邮件交换器的优先级别,一般只出现在正向解析记录里(数值越小,优先级越大)。
MX 记录了发送电子邮件时域名对应的服务器地址,电子邮件发送使用的是 SMTP 应用层协议。例如,发送邮件到 abc@qq.com,其中的域名部分为 qq.com。
MX 记录的语法格式为:
例如,有一台计算机名为“r0WSPsSx58.”(A 记录),它同时提供网站和邮箱服务,为了便于用户访问服务,可以为该计算机设置两个别名:www 和 mail。
CNME记录的语法格式为:
DNS 服务的作用非常简单,就是根据域名查找出对应的 IP 地址。我们可以把它想象成一本巨大的通讯录,每个人名都会对应一个电话号码(每个域名都会对应一个 IP 地址)。
各位在上网的过程中是否产生过这样的疑惑,为什么我们在浏览器中输入类似“www.baidu.com”的地址就能打开百度的网站?在前面的学习过程中我们知道,访问某台服务器其实用的都是 IP 地址,那域名是怎么一回事呢?
早期,人们访问某个网站都是通过 IP 地址来访问的,类似于“192.168.4.23”的形式。但随着互联网的发展速度越来越快,各式各样的网站也越来越多,再用 IP 地址的方式访问网站已经非常吃力了。每个网站对应的就是一串 IP 地址,想要浏览某个网站就得和以前用座机一样,专门拿出个通讯录来查找该网站对应的 IP 地址,这样上网的资源和时间成本实在是太高了。
基于这样的情况,DNS 服务也就是域名系统,被开发出来。让 DNS 服务发挥通讯录的作用,人们只需要记住某个域名,在上网的时候在浏览器中输入域名,由 DNS 服务自动将域名翻译为对应的 IP 地址,翻译的过程在后台自动完成。
域名的出现是为了方便人们记忆,记住一串有规律的字符比记住一串数字要简单得多。以域名“www.baidu.com”为例,如下图所示:

图 1 单个域名的结构
一个完整的域名是由两个或者两个以上的部分组成的,各部分之间用英文的句号“.”来分隔,最后一个“.”的右边部分称为顶级域名(TLD,也称为一级域名),最后一个“.”的左边部分称为二级域名(SLD),二级域名的左边部分称为三级域名,依此类推,每一级的域名控制它下一级域名的分配。
每一级的域名都由英文字母和数字组成,域名不区分大小写,每级长度不能超过 63 个字节,一个完整的域名不能超过 255 个字节,一般域名的长度都是在 7~20 个字符左右。
以上是单个域名的结构,从全局来看,DNS 服务采用的是层级式树状结构的命名方法,其组织模型如下图所示。

图 2 DNS服务的组织模型
在图 2 中,每个节点都是由一台或多台 DNS 服务器组成的,上层 DNS 服务器知道下层服务器的位置,但下层不知道上层位置。
单独一台 DNS 服务器不可能知道全球所有的域名信息,所以域名系统就是一个分布式数据库系统,域名到 IP 地址之间的解析可以由若干个 DNS 服务器共同完成。每一个站点维护自己的信息数据库,并运行一个服务器程序供互联网上的客户端查询。由于是分布式系统,即使单个服务器出现故障,也不会导致整个系统失效,这消除了单点故障的隐患。
在 DNS 中,域的本质其实是一种管理范围的划分,最大的域是根域名,向下可以划分为顶级域、二级域、三级域、四级域等,每一级的域名控制它下一级域名的分配。
域名划分 | 说 明 |
---|---|
根域名 | 互联网的顶级域名解析服务由根域名服务器来完成,根域名服务器对网络安全、运行稳定至关重要,被称为互联网的“中枢神经”。 |
顶级域名 |
顶级域一般有两种划分方法,按国家划分和按组织性质划分:
|
二级域名 | 顶级域名下面是二级域名,网上能够注册的域名基本都是二级域名,它们由企业和Linux运维人员管理。 |
三级域名 | 是二级域名的延伸,一般由网站管理员自己命名,三级域名由字母、大小写和连接符号组成,网站管理员可以根据自己网站的特点进行选择。例如,有个域名为 abcd.com,如果公司是做邮箱服务的可以叫 mail.abcd.com,如果是做网站的可以叫 www.abcd.com…… |
图 2 中的每个节点都是由一台或多台 DNS 服务器组成的,那么在一个节点或者一个区域中可以存在多种类型的 DNS 服务器,它们之间相互协助、相辅相成,提高工作效率。
DNS服务器的分类
DNS 服务器按工作形式主要可分为以下几种类型:1) 主 DNS 服务器(Primary Name Server)
特定域所有信息的权威性信息源,从域管理员构造的本地磁盘文件中加载域信息,该文件(也称为区域文件)包含着该服务器具有管理权的一部分域结构的最精确信息。主 DNS 服务器是一种权威性服务器,因为它可以以绝对的权威回答对其管辖域的任何查询。
2) 辅助 DNS 服务器(Secondary Name Server)
可以协助主 DNS 服务器提供域名查询服务,在主机很多的情况下,可以有效分担主 DNS 服务器的压力。辅助 DNS 服务器可以从主 DNS 服务器中复制一整套域信息。区域文件是从主 DNS 服务器中复制出来的,并作为本地磁盘文件存储在辅助 DNS 服务器中。这种复制称为“区域文件复制”。
在辅助 DNS 服务器中有一个所有域信息的完整拷贝,可以权威地回答对该域的查询。因此,辅助 DNS 服务器也称作权威性服务器。配置辅助 DNS 服务器不需要生成本地区域文件,因为可以从主 DNS 服务器中下载。
3) 高速缓存服务器(Caching-only Server)
可运行 DNS 服务器软件,但是没有域名数据库软件。它从某个远程服务器取得每次域名服务器查询的结果,一旦取得一个,就将它放在高速缓存中,以后查询相同的信息时就用它予以回答。高速缓存服务器不是权威性服务器,因为它提供的所有信息都是间接信息。对于高速缓存服务器,只需要配置一个高速缓存文件,但最常见的配置还包括一个回送文件。
4) 转发服务器
当本地 DNS 服务器无法对 DNS 客户端的解析请求进行本地解析时,可以允许本地 DNS 服务器转发 DNS 客户端发送的查询请求到其他的 DNS 服务器。此时本地 DNS 服务器又称为转发服务器(不会缓存数据)。DNS查询方式
从本地计算机向 DNS 服务器查询的方式有两种,分别是递归查询和迭代查询:- 递归查询:本地请求,由所请求的 DNS 服务器(本地直接管理)直接返回的答案叫权威答案。只需发送一次请求就能得到最终结果。
- 迭代查询:需要发出 n 次查询才能得到最终结果。
下图给出的是一种典型的迭代查询:

图 3 典型的迭代查询
当主机不知道某个域名所对应的位置时,会先查询计算机中的 hosts 文件,hosts 文件中若没有,就查找本地 DNS 服务器的缓存(DNS 服务器缓存时间需要设置,最多为 1 天),缓存上没有,则查找 DNS 服务器的数据文件,若还是没有,本地 DNS 服务器会直接请求根域名服务器,根域名服务器会告知负责这个区域的 DNS 服务器位置,再由发送请求的本地 DNS 服务器进行查找。
根域名服务器只会告知负责的 DNS 服务器,并不负责解析。查询到 DNS 服务器后,再直接交给管理查询客户端的 DNS 服务器。因此,配置 DNS 服务器需要配置好根域名服务器的位置。
DNS 服务本身可以提供两种功能:一种是正向解析,另一种是反向解析:
- 正向解析:从 FQDN(域名)===>IP,客户端查询域名所对应的 IP 地址,一个域名可以对应多个 IP 地址;
- 反向解析:从 IP===>FQDN,客户端查询 IP 地址所对应的域名,一个 IP 地址可以对应多个域名。
正反向解析是完全不同的两棵解析树,不必在同一个服务器上,正反向区域记录也没必要完全对应。
NDS常用记录类型
在 DNS 服务器的缓存表中,每一个对应关系都称为一个记录(Record),而记录根据本身所实现的功能不同可以分为不同的记录类型,DNS 服务器有 6 种常用的记录类型:1) A(address)记录
正向解析的记录,将域名转换成 IP 地址的记录。语法格式为:完整主机名(FQDN) IN A IP地址
2) 指针记录(PTR)
反向解析的记录,将 IP 地址转换成域名的记录。语法格式为:IP地址 IN PTR 主机名(FQDN)
3) SOA记录(起始授权机构)
该记录表明 DNS 服务器是 DNS 域中数据表的信息来源,在创建新区域时,记录自动创建,且是 DNS 数据库文件中的第一条记录。一个区域解析库有且仅有一个 SOA 记录,且必须为解析库的第一条记录。SOA 记录语法格式为:
区域名(当前)记录类型 SOA主域名服务器(FQDN)管理员邮件地址(序列号 刷新间隔 重试间隔 过期间隔 TTL)
在管理员邮件地址中,使用英文句号“.”代替符号“@”。
4) NS记录
用于向下授权。标识某一个区域内“最高长官”(SOA)是谁,在一个区域内只能有一个 SOA 记录,而 NS 记录可以有多个。NS 记录的语法格式为:
区域名 IN NS 完整域名(FQDN)
5) MX 记录(邮件交换器)
它规定了域名的邮件服务器要么处理,要么向前转发有关该域名的邮件。处理邮件是指将其传送给其地址所关联的个人,向前转发邮件是指通过 SMTP 协议将其传送给最终目的地。为了防止邮递路由,MX 记录除了邮件交换器的域名外还有一个特殊参数:优先级值。优先级值是一个 0~99 的无符号整数,它给出邮件交换器的优先级别,一般只出现在正向解析记录里(数值越小,优先级越大)。
MX 记录了发送电子邮件时域名对应的服务器地址,电子邮件发送使用的是 SMTP 应用层协议。例如,发送邮件到 abc@qq.com,其中的域名部分为 qq.com。
MX 记录的语法格式为:
区域名 IN MX 优先级(数字) 邮件服务器名称(FQDN)
6) CNME 记录
别名记录,也被称为规范名字。这种记录允许将多个名字映射到同一台计算机,通常用于同时提供网站(www)和邮箱(mail)服务的计算机。例如,有一台计算机名为“r0WSPsSx58.”(A 记录),它同时提供网站和邮箱服务,为了便于用户访问服务,可以为该计算机设置两个别名:www 和 mail。
CNME记录的语法格式为:
别名 IN CNAME 主机名A记录和指针记录必须分开存放。