当前位置: 首页 > news >正文

DNS 原理 | 解析过程 / 实验

注:本文为 “DNS 原理 | 解析过程 / 综合实验” 相关文章合辑

未整理去重。

如有内容异常,请看原文。


DNS 原理总结及其解析过程详解

老胡爱分享于 2014-05-07 13:10:01 发布

一、域名系统

1. 域名系统概述

域名系统 DNS (Domain Name System) 是因特网使用的命名系统,用于将便于人们使用的主机名转换为 IP 地址。域名系统本质上是一个名字系统,之所以称为“域名”,是因为因特网命名系统中使用了多个“域 (domain)”。

IP 地址由 32 位二进制数字组成,用户在与因特网主机通信时,难以记忆长达 32 位的二进制地址,即使是点分十进制的 IP 地址也不易记忆。相比之下,人们更愿意使用易于记忆的主机名。然而,机器在处理 IP 数据报时使用 IP 地址而非域名,因为 IP 地址长度固定,而域名长度不固定,机器处理较为困难。

由于因特网规模庞大,仅使用一个域名服务器是不可行的。因此,自 1983 年起,因特网采用层次树状结构的命名方法,并使用分布式域名系统 DNS,采用客户服务器模式。DNS 使大多数名字在本地解析,仅有少量解析需要在因特网上通信,因此效率较高。DNS 是分布式系统,即使单个计算机出现故障,也不会影响整个 DNS 系统的正常运行。

域名到 IP 地址的解析由分布在因特网上的许多域名服务器程序共同完成。运行域名服务器程序的机器称为域名服务器。解析过程如下:当应用需要将主机名解析为 IP 地址时,应用进程调用解析程序,作为 DNS 的客户端,将待解析的域名放入 DNS 请求报文中,以 UDP 用户数据报方式发送给本地域名服务器。本地域名服务器查找域名后,将对应的 IP 地址放入回答报文中返回。应用获得目的主机的 IP 地址后即可进行通信。

若本地域名服务器无法回答请求,则暂时作为 DNS 的客户端,向其他域名服务器发出查询请求,直至找到能够回答请求的域名服务器为止。

2. 因特网的域名结构

因特网采用层次树状结构的命名方法,任何连接在因特网上的主机或路由器都有一个唯一的层次结构名字,即域名 (domain name)。“域” (domain) 是名字空间中一个可被管理的划分。

从语法上讲,域名由多个标号 (label) 组成,标号之间用点 (.) 隔开。例如:

域名结构示例

这是中央电视台用于电子邮件的计算机域名,由三个标号组成,其中标号 com 是顶级域名,cctv 是二级域名,mail 是三级域名。

DNS 规定,域名中的标号由英文和数字组成,每个标号不超过 63 个字符(一般不超过 12 个字符),不区分大小写字母。标号中除连字符 (-) 外不能使用其他标点符号。级别最低的域名写在最左边,级别最高的顶级域名写在最右边。完整域名总长度不超过 255 个字符。DNS 不规定域名包含多少级,也不规定每一级域名的含义。各级域名由其上一级域名管理机构管理,顶级域名由 ICANN 管理,确保每个域名在整个互联网范围内唯一,并便于设计查找机制。

域名是逻辑概念,不代表计算机的物理位置。截至 2006 年 12 月,顶级域名 TLD (Top Level Domain) 已有 265 个,分为以下三类:

  1. 国家顶级域名 nTLD:采用 ISO 3166 规定,如 cn(中国)、us(美国)、uk(英国)等,也称为 ccTLD。
  2. 通用顶级域名 gTLD:最常见的有 7 个,包括 com(公司企业)、net(网络服务机构)、org(非营利组织)、int(国际组织)、gov(美国政府部门)、mil(美国军事部门)。
  3. 基础结构域名:仅有一个,即 arpa,用于反向域名解析。

3. 域名服务器

如果每个节点都设置一个域名服务器,会导致服务器数量过多,降低运行效率。因此,DNS 采用“区” (zone) 的划分方法。一个服务器所负责管辖的范围称为“区”,各单位根据具体情况划分区,但一个区内的所有节点必须连通。每个区设置相应的权限域名服务器,保存该区中所有主机的域名到 IP 地址的映射。DNS 服务器的管辖范围以“区”为单位,而非“域”,区是域的子集。

例如,假设 abc 公司有下属部门 x 和 y,部门 x 下有 u、v、w 三个子部门,部门 y 下有 t 子部门。图 a 表示 abc 公司仅设置一个区 abc.com,此时区与域相同;图 b 表示 abc 公司划分为两个区:abc.com 和 y.abc.com,这两个区都隶属于域 abc.com,各设置相应的权限域名服务器。

区的划分示例

下图以图 b 中 abc 公司的两个区为例,展示了 DNS 域名服务器的树状结构,更准确地反映了 DNS 的分布式结构。每个域名服务器仅能解析部分域名到 IP 地址,若无法解析,则向其他服务器查询。

根据作用,域名服务器分为以下四种类型:

  1. 根域名服务器:最高层次的域名服务器,知道所有顶级域名服务器的域名和 IP 地址。本地域名服务器若无法解析域名,首先求助于根域名服务器。根域名服务器通常不直接解析域名,而是告知下一步应查询的顶级域名服务器。
  2. 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
  3. 权限域名服务器:负责一个“区”的域名服务器。
  4. 本地域名服务器:不属于 DNS 层次结构,但对域名系统至关重要。主机发出 DNS 查询请求时,首先发送给本地域名服务器。

4. 域名的解析过程

注意

  1. 主机向本地域名服务器的查询通常采用递归查询。递归查询是指:若本地域名服务器不知道被查询域名的 IP 地址,则以 DNS 客户端身份向其他根域名服务器继续发出查询请求报文,而非让主机自行查询。递归查询返回的结果为所查询的 IP 地址,或报错表示无法查询。
  2. 本地域名服务器向根域名服务器的查询采用迭代查询。迭代查询的特点是:根域名服务器收到迭代查询请求报文后,要么给出所查询的 IP 地址,要么告知本地服务器下一步应查询的域名服务器,然后由本地服务器继续查询。根域名服务器通常告知顶级域名服务器的 IP 地址,本地域名服务器再向其查询。顶级域名服务器收到查询请求后,要么给出 IP 地址,要么告知下一步应查询的权限域名服务器。最终,查询结果返回给发起查询的主机。

下图展示了两种查询方式的差别:

递归查询与迭代查询的差别

以下通过一个例子演示整个查询过程:

假设主机 m.xyz.com 想要知道主机 y.abc.com 的 IP 地址(例如发送邮件)。查询过程如下:

  1. 主机 m.xyz.com 向本地服务器 dns.xyz.com 进行递归查询。
  2. 本地服务器采用迭代查询,向根域名服务器查询。
  3. 根域名服务器告知本地服务器,下一步应查询的顶级域名服务器 dns.com 的 IP 地址。
  4. 本地域名服务器向顶级域名服务器 dns.com 查询。
  5. 顶级域名服务器 dns.com 告知本地域名服务器,下一步应查询的权限服务器 dns.abc.com 的 IP 地址。
  6. 本地域名服务器向权限域名服务器 dns.abc.com 查询。
  7. 权限域名服务器 dns.abc.com 告知本地域名服务器所查询主机的 IP 地址。
  8. 本地域名服务器将查询结果告知 m.xyz.com。

整个查询过程共涉及 8 个 UDP 报文。

为了提高 DNS 查询效率,减轻服务器负荷并减少因特网上的 DNS 查询报文数量,域名服务器广泛使用高速缓存,用于存放最近查询过的域名及其映射信息来源记录。例如,若 m.xyz.com 上不久前已有用户查询过 y.abc.com 的 IP 地址,则本地域名服务器无需重新查询,直接从缓存中返回上次查询结果。

由于名字到地址的绑定并不频繁变更,为保持缓存内容的正确性,域名服务器应为每项内容设置计时器,并处理超过合理时间的项(例如每项两天)。当域名服务器从缓存中删除某项信息后,再次查询时需重新从授权管理该项的域名服务器获取绑定信息。权限服务器在响应查询时会指明绑定有效存在的时间值,增加该时间值可减少网络开销,减少该时间值则可提高解析的正确性。

本地域名服务器和主机中均需设置高速缓存。许多主机在启动时从本地服务器下载名字和地址的全部数据库,维护存放最近使用的域名的高速缓存,仅在缓存中找不到名字时才使用域名服务器。主机需定期检查域名服务器以获取新的映射信息,并从缓存中删除无效项。由于域名变更不频繁,大多数网点无需过多精力维护数据库一致性。


域名解析的过程

Edison Tao 于 2018-09-11 15:30:25 发布

互联网的域名解析并非由单一 DNS 服务器完成,而是分散到多个 DNS 服务器上。例如,.net、.com、.edu 等顶级域名分别对应各自的服务器,根服务器虽不负责具体层级域名的解析,但知道这些顶级域名由哪些服务器解析。各顶级域名对应的服务器也知道根服务器的地址。

被委派的下级服务器虽不了解上一级服务器信息,但均知晓根服务器地址。

DNS 层级关系

E 计算机仅知晓根服务器,不知其他委派信息。缓存的优势在于下次访问时无需重复查询。

家中的无线路由器可作为 DNS 服务器,实现域名解析。它虽不负责具体域名解析,但知晓根服务器地址。当计算机的 DNS 服务器指向路由器时,路由器仅负责域名转发。

个人电脑通常配置两个 DNS 服务,以防万一一个无法连接时可切换至另一个。DNS 服务可手动指定或自动获取。

互联网上常见的 DNS 服务器包括:

  • 8.8.8.8(美国 Google 的 DNS 服务器)
  • 222.222.222.222(电信公司的 DNS 服务器)
  • 114.114.114.114(114 DNS)
  • 180.76.76.76(百度 DNS)
  • 223.5.5.5(阿里 DNS)

查看缓存中别名的方法为:ipconfig /displaydns

DNS 缓存查看

A 记录:域名解析为 IP 地址
CNAME 记录:别名
生存时间单位:秒

清空 DNS 缓存的方法为:ipconfig /flushdns。可通过 ipconfig /? 查询所有命令。

Nslookup 命令的使用方法与 ping 类似,但返回信息更丰富。使用 ping 仅能返回第一个地址。Nslookup 的两种用法如下:

Nslookup 使用方法

Nslookup 示例

非权威应答:表示 DNS 服务器中未找到该域名,而是通过根服务器间接查询得到。

通过 quit 退出。


如何安装内网使用的 DNS 服务器

内网建立 DNS 服务器后,可通过域名访问内网服务,如 Web 服务、OA 服务、FTP 服务等。内网服务的域名可随意设置,仅在内网使用。

建立内网 DNS 服务器的优点是节省带宽,因为使用互联网上的 DNS 服务器会占用带宽。若通过内网 DNS 服务器访问重复的 IP 地址,只需从内网 DNS 服务器的缓存中获取,从而提升域名解析速度。

互联网上的根服务器数量众多,负责 .com、.net、.edu 等顶级域名的 DNS 服务器如下:

根服务器示例


DNS 的解析过程 (知识点总结)

dulu~dulu 已于 2023-12-07 13:07:10 修改

一、解析流程

DNS 解析通常涉及主域名服务器、辅域名服务器、缓存域名服务器和转发域名服务器。具体如下:

  1. 主域名服务器:负责维护区域内的所有域名信息,从本地磁盘文件加载域信息进行解析。
  2. 辅域名服务器:作为主域名服务器的备份,提供域名解析服务。辅域名服务器从主域名服务器获取授权,拥有完整的域名信息拷贝,解析时访问本地存储文件。
  3. 缓存域名服务器:运行域名服务器软件,但无域名数据库。它从远程服务器获取查询结果并缓存,后续相同查询直接从缓存中回答。
  4. 转发域名服务器:负责非本地域名的本地查询。接到查询请求时,先在缓存中查找,若无则依次转发至指定的域名服务器,直至获取结果,否则返回无法映射的结果。

缓存域名服务器通过高速缓存进行解析,因此获取结果的耗时最短。img

名称 ~~~~~~~~~~~~~~~~~~~~~~                       定义作用
主域名服务器维护区所有域名信息,信息存于磁盘文件、数据库中提供本区域名解析,区内域名信息的权威。
具有域名数据库。
一个域有且只有一个主域名服务器
辅域名服务器主域名服务器的备份服务器提供域名解析服务,信息存于磁盘文件、数据库中主域名服务器备份,可进行域名解析的负载均衡。
具有域名数据库
缓存域名服务器向其他域名服务器进行域名查询,将查询结果保存在缓存中的域名服务器改善网络中 DNS 服务器的性能,减少反复查询相同域名的时间,提高解析速度,节约出口带宽。
获取的解析结果耗时最短,没有域名数据库
转发域名服务器负责非本地和缓存中无法查到的域名。接收域名查询请求,首先查询自身缓存,如果找不到对应的,则转发到指定的域名器查询负责域名转发,由于转发域名服务器同样可以有缓存,因此可以减少流量和查询次数。
具有域名数据库

本地缓存记录 — 区域记录 — 转发域名服务器 — 根域名服务器

具体过程:

DNS 服务器收到查询请求后,首先在浏览器/系统缓存中查找,接着在 host 文件中查找,然后在本地 DNS 服务器中查找(先查找区域记录,再查找 DNS 服务器缓存)。若仍未查到,可能是该服务器非请求域的授权服务器,且缓存中无相关记录。此时,DNS 服务器需向转发域名服务器(负责非本地域名查询)发送请求。若无转发域名服务器,则向根域名服务器查询(采用迭代查询)。

当主域名服务器关闭、故障或负载过重时,辅域名服务器作为备份提供解析服务。辅域名服务器从主域名服务器获取授权,并定期询问是否有新数据,如有则更新,以保持与主域名服务器同步。

DNS 通知同步

例题:

客户端向 DNS 服务器发出解析请求后,未得到解析结果,则下一步进行(1)。

(1) 备选答案:

A. 查找本地缓存
B. 使用 NetBIOS 名字解析
C. 查找根域名服务器
D. 查找转发域名服务器

答案:B. 使用 NetBIOS 名字解析

DNS 主机名解析的查找顺序为:先查找客户端解析程序缓存;若未成功,则向 DNS 服务器发出解析请求;若仍未成功,则尝试使用 NetBIOS 名字解析方法获取结果。

补充:DNS 中继

若需跨网段使用 DNS 服务器进行域名解析,则需使用 DNS 中继(DNS relay)。在 DNS 查询过程中,DNS 中继服务器将查询请求转发至负责该域名的 DNS 服务器,并将查询结果返回。

例题:

以下关于 DNS 服务器的叙述中,错误的是(1)。

A. 用户只能使用本网段内的 DNS 服务器进行域名解析
B. 主域名服务器负责维护区域内的所有域名信息
C. 辅助域名服务器作为主域名服务器的备份服务器提供域名解析服务
D. 转发域名服务器负责非本地域名的查询

答案:A

二、Bind 配置 DNS

BIND (Berkeley Internet Name Daemon) 是目前互联网上最常用的 DNS 服务器软件,约占所有 DNS 服务器的 90%。BIND 由互联网系统协会(Internet Systems Consortium)负责开发与维护。

重要文件:

  • /etc/named.conf:主配置文件
  • /etc/named.rfc1912.zones:区域配置文件
  • type:包括 hint(根区域)、master(主区域)、slave(辅助区域)
  • /var/named:数据配置文件目录

多种记录类型:

  • SOA (Start Of Authoritative):区域文件的第一条记录,指明区域的主服务器、管理员邮件地址及区域复制相关信息。
    • 序列号:区域文件变更时递增,辅助服务器通过比较序列号判断是否需更新数据。
    • 刷新间隔:辅助服务器更新数据的时间间隔(秒)。
    • 重试间隔:辅助服务器无法连接主服务器时的重试时间间隔(秒)。
    • 有效期:辅助服务器无法更新区域文件后,超过该时间不再提供查询服务(秒)。
    • TTL (Time To Live):资源记录在其他名字服务器缓存中的保存时间(秒)。
  • A (Address):主机名到 IP 地址的映射。
  • AAAA:将 DNS 域名映射到 IPv6(128 位)地址。
  • PTR (Pointer):IP 地址到主机名的映射。
  • NS (Name Server):指定区域的授权服务器。通常情况下,域名解析通过 ISP 提供的域名服务器完成。若用户需自行使用 DNS 服务器解析域名,则需创建 NS 记录,并将域名服务器的 IP 地址告知 ISP。
  • MX (Mail Exchanger):定义区域的邮件服务器及其优先级(搜索顺序)。
  • CNAME:为正式主机名(canonical name)定义别名(alias)。

DNS 记录格式:

DNS 数据库包含 DNS 服务器使用的区域文件,每个区域拥有一组结构化的资源记录。资源记录格式如下:

[Domain] [TTL] [class] record-type record-specific-data
  • Domain:资源记录引用的域对象名,可以是单台主机或整个域。Domain 字串用“.”分隔,若未以“.”结尾,则与当前域相关。
  • TTL:生存时间记录字段,以秒为单位定义资源记录在缓存中的保存时间。通常该字段为空,表示生存周期在授权资源记录中指定。
  • class:指定网络地址类,TCP/IP 网络使用 IN。
  • record-type:记录类型,标识资源记录的类别。
  • record-specific-data:与资源记录相关的数据,格式取决于记录类型。

三、域名系统 DNS 的逻辑结构

域名系统 DNS 的逻辑结构是一个分层的域名树,Internet 网络信息中心(InterNIC)管理着域名树的根,称为根域。

  • 根域:无名称,用圆点表示,是域名空间的最高级别。在 DNS 命名中,有时在末尾添加圆点表示根域,但通常省略。DNS 服务器可自动补上结尾的圆点,也可处理带圆点的域名。
  • 顶级域(Top-Level Domains,TLD):分为国家顶级域(ccTLD)和通用顶级域(gTLD)。国家顶级域名包含 243 个国家和地区代码,如 cn(中国)、uk(英国)。最初的通用顶级域有 7 个,如下表所示:img
顶级域名含义
com商业机构等盈利性组织
edu教育机构,学术组织,国家科研中心等
gov美国非军事性的政府机关
mil美国的军事组织
net网络信息中心(NIC)和网络操作中心(BIC)等
org非盈利性组织,例如技术支持小组,计算机用户小组等
int国际组织

这些顶级域名最初主要供美国使用,但随着 Internet 的发展,com、org 和 net 成为全球通用的顶级域名,而 edu、gov 和 mil 仅限于美国使用。

负责互联网域名注册的服务商 ICANN 在 2000 年 11 月决定,从 2001 年开始使用 7 个新的国际顶级域名:biz(商业机构)、info(网络公司)、name(个人网站)、pro(职业人员)、aero(航空运输业专用)、coop(商业合作社专用)和 museum(博物馆专用)。其中前 4 个为非限制性域名,后 3 个限于特定行业使用,受相关行业组织管理。

2008 年 6 月,ICANN 在巴黎年会上通过了个性化域名方案,允许使用公司名称作为顶级域名,如 ibm、hp、qq 等。这些域名的所有者在某种意义上可视为域名注册机构,未来将有更多国际域名出现。

顶级域下面是二级域,这是正式注册给组织和个人的唯一名称,例如 www.microsoft.com 中的 microsoft 是微软注册的域名。

在二级域之下,组织机构还可划分子域,使其各个分支部门都获得一个专用的名称标识,例如 www.sales.microsoft.com 中的 sales 是微软销售部门的子域名称。划分子域的工作可以一直延续下去,直到满足组织机构的管理需要为止。

然而,标准规定一个域名的长度通常不超过 63 个字符,最多不能超过 255 个字符。DNS 标准还规定,域名中只能使用 ASCII 字符集的有限子集,包括 26 个英文字母(不区分大小写)和 10 个数字,以及连字符“-”,并且连字符不能作为子域名的第一个和最后一个字母。后来的标准对字符集有所扩大。

四、资源记录

DNS 数据库

包含 DNS 服务器所使用的一个或多个区域文件,每个区域都拥有一组结构化的资源记录。资源记录的格式为:

[Domain] [TTL] record-type record-specific-data
  • Domain:资源记录引用的域对象名,可以是单台主机或整个域。Domain 字串用“.”分隔,若未以“.”结尾,则与当前域相关。
  • TTL:生存时间记录字段,以秒为单位定义资源记录在缓存中的保存时间。通常该字段为空,表示生存周期在授权资源记录中指定。
  • class:指定网络地址类,TCP/IP 网络使用 IN。
  • record-type:记录类型,标识资源记录的类别。
  • record-specific-data:与资源记录相关的数据,格式取决于记录类型。
nslookup (name server lookup)

nslookup 是一个用于查询 Internet 域名信息或诊断 DNS 服务器问题的工具。

nslookup 有许多选项:

  • all:显示当前服务器或主机的所有信息。
  • domain=NAME:设置默认域名。
  • root=NAME:设置根服务器名称。
  • retry=X:设置重试次数为 X。
  • timeout=X:设置超时时间为 X 秒。
  • type=X:设置查询类型,如 A、ANY、CNAME、MX、NS、PTR、SOA 等。
  • querytype=X:与 type 命令设置相同。
  • exit:退出 nslookup。

五、DNS 服务器的递归算法和迭代算法

DNS 服务器的递归查询和迭代查询主要涉及以下 DNS 服务器:本地域名服务器、根域名服务器、顶级域名服务器和权限域名服务器。

  • 本地域名服务器:离用户较近,一般不超过几个路由器的距离。当主机发出 DNS 查询请求时,查询请求报文发送给本地域名服务器。若所查询的主机属于同一本地 ISP,则本地域名服务器可直接将主机名转换为 IP 地址,无需再询问其他域名服务器。

  • 根域名服务器:最高层次的域名服务器,也是最重要的。所有根域名服务器都知道所有顶级域名服务器的域名和 IP 地址。本地域名服务器若无法解析域名,首先求助于根域名服务器。

  • 顶级域名服务器:负责管理在该顶级域名服务器注册的所有二级域名。收到 DNS 查询请求时,给出相应回答(可能是最终结果,也可能是下一步应查询的域名服务器的 IP 地址)。

  • 权限域名服务器:一个服务器所负责管辖的范围称为“区”。各单位根据具体情况划分区,但区内的所有节点必须连通。每个区设置相应的权限域名服务器,保存该区中所有主机的域名到 IP 地址的映射。若权限域名服务器无法给出最终查询回答,则告知下一步应查询的权限域名服务器。

1. 递归查询

递归查询仅发出一次查询请求,要求服务器彻底完成名字解析。若需进一步查询,本域名服务器向上级域名服务器返回请求,直到查到记录。

递归查询示例

主机向本地域名服务器的查询通常为递归查询。

2. 迭代查询

迭代查询可能发出多条请求。上级域名服务器若返回的是其他域名服务器的地址,本域名服务器将该地址发给用户,用户再进行下一级查询。

迭代查询示例

本地域名服务器向根域名服务器的查询通常采用迭代查询。

递归查询和迭代查询的区别:

授权域名服务器是否为递归查询需满足两个条件:

  1. 返回 IP 地址。
  2. 体现“帮忙”的过程,即向上一级询问的过程。

授权域名服务器显然不满足条件 2,因此不是递归查询。它也不一定是迭代查询,具体取决于配置。

例题:

在域名解析过程中,若授权域名服务器返回解析结果给客户端本地,则表明(20)。

A. 主域名服务器、转发域名服务器均采用迭代算法
B. 主域名服务器、转发域名服务器均采用递归算法
C. 根域名服务器、授权域名服务器均采用迭代算法
D. 根域名服务器、授权域名服务器均采用递归算法

答案:A

解析:根域名服务器通常采用迭代查询,排除 D。授权域名服务器可能是递归查询,也可能是迭代查询,因此 C 不正确。主域名服务器(本地域名服务器)未直接返回查询结果,说明其采用迭代查询,排除 B。因此,正确答案为 A。

注:授权域名服务器返回解析结果,并不能说明其采用递归查询,需视其配置而定。若本地查不到且继续向上查询,则为递归;若将查询请求转发给其他服务器,则为迭代(授权域名服务器通常采用迭代查询)。

在域名服务器的配置过程中,通常(18):

A. 根域名服务器和域内主域名服务器均采用迭代算法
B. 根域名服务器和域内主域名服务器均采用递归算法
C. 根域名服务器采用迭代算法,域内主域名服务器采用递归算法
D. 根域名服务器采用递归算法,域内主域名服务器采用迭代算法

答案:C

下列 DNS 查询过程中,采用迭代查询的是(35),采用递归查询的是(36):

(35)
A. 客户端向本地 DNS 服务器发出查询请求
B. 客户端在本地缓存中找到目标主机的地址
C. 本地域名服务器缓存中找到目标主机的地址
D. 由根域名服务器找到授权域名服务器的地址

(36)
A. 转发查询非授权域名服务器
B. 客户端向本地 DNS 服务器发出查询请求
C. 由上级域名服务器给出下级服务器的地址
D. 由根域名服务器找到授权域名服务器的地址

答案:D (35);B (36)

主机 A 的主域名服务器为 202.112.115.3,辅助域名服务器为 202.112.115.5,域名 www.aaaa.com 的授权域名服务器为 102.117.112.254。若主机 A 访问 www.aaaa.com 时,由 102.117.112.254 返回域名解析结果,则(35):

A. 若 202.112.115.3 工作正常,其必定采用迭代算法
B. 若 202.112.115.3 工作正常,其必定采用递归算法
C. 102.117.112.254 必定采用迭代算法
D. 102.117.112.254 必定采用递归算法

答案:A

主机 host1 对 host2 进行域名查询的过程如下图所示,下列说法中正确的是(35):

A. 本地域名服务器采用迭代算法
C. 根域名服务器采用递归算法
B. 中介域名服务器采用迭代算法
D. 授权域名服务器采用何种算法不确定

答案:D

进行域名解析的过程中,若主域名服务器故障,由转发域名服务器传回解析结果,下列说法中正确的是(34):

A. 辅助域名服务器配置了递归算法
B. 辅助域名服务器配置了迭代算法
C. 转发域名服务器配置了递归算法
D. 转发域名服务器配置了迭代算法

答案:D

下图是 DNS 转发器工作的过程。采用迭代查询算法的是(35):

A. 转发器和本地 DNS 服务器
B. 根域名服务器和本地 DNS 服务器
C. 本地 DNS 服务器和 .com 域名服务器
D. 根域名服务器和 .com 域名服务器

答案:D

下图是 DNS 转发器工作的过程。采用迭代查询算法的是(35):

A. 转发器和本地 DNS 服务器
B. 根域名服务器和本地 DNS 服务器
C. 本地 DNS 服务器和 .com 域名服务器
D. 根域名服务器和 .com 域名服务器

答案:D

从本题中可以看出,根域名服务器返回给转发器的是 .com 服务器地址,而非最终结果,因此采用迭代算法;.com 域名服务器返回给转发器的是授权域名服务器 nwtraders.com 的服务器地址,也非最终结果,同样采用迭代算法;nwtraders.com 服务器返回域名与 IP 的对应关系,但其为授权域名服务器,且在资源记录中已找到记录,因此其采用的算法未知。

本地域名服务器仅向转发器发出 1 条请求,转发器经过多次深层次查询后返回结果,因此转发器采用递归算法。本地域名服务器采用的算法未知。

六、DNS 的重要配置命令

1. Nslookup

Nslookup 命令用于显示 DNS 查询信息,诊断和排除 DNS 故障,有交互式和非交互式两种工作方式。

  • 非交互式工作:仅使用一次 Nslookup 命令后返回到 Cmd.exe 提示符。Nslookup 命令后可跟随一个或多个命令行选项,用于设置查询参数。每个选项由连字符后跟选项名称组成,有时需加等号“=”和数值。例如,使用默认 DNS 服务器查找域名对应的 IP 地址。

Nslookup 非交互式示例

  • 交互式工作:若需查找多项数据,可使用 Nslookup 的交互工作方式。在 Cmd.exe 提示符下输入 nslookup 并回车,进入交互工作方式,命令提示符变为“>”。在“>”提示符下输入 help 或?,可显示可用命令列表;输入 exit 则返回 Cmd.exe 提示符。

在交互方式下,可使用 set 命令设置选项,满足指定的查询需求。例如,查询本地域的邮件交换器信息的过程如下:

Nslookup 交互式示例

例题:

要测试 DNS 服务器是否正常工作,在客户端可以采用的命令是(5)或(6)。

A. ipconfig
B. nslookup
C. ping
D. netstat

答案:B、C

解析:

测试 DNS 服务器是否正常工作,可采用以下两种方式:

  1. 使用 ping 域名进行测试。
  2. 使用 nslookup 查看提供服务的 DNS 服务器。

2. ipconfig/flushdns:清除 DNS 缓存记录。

3. ipconfig/displaydns:显示 DNS 缓存记录。


多张图带你彻底搞懂 DNS 域名解析过程

林小鹿 @已于 2022-11-13 14:21:05 修改

1. DNS

DNS(Domain Name System)是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,用于 TCP/IP 网络。

2. 域名系统 DNS 的作用

我们通常有两种方式识别主机:通过主机名或 IP 地址。人们喜欢便于记忆的主机名,而路由器则依赖定长的、具有层次结构的 IP 地址。为了满足这些不同的需求,我们需要一种能够进行主机名到 IP 地址转换的目录服务。域名系统作为将域名和 IP 地址相互映射的分布式数据库,使人更方便地访问互联网。

即使不使用域名,也可以通过 IP 地址寻址目标主机,但域名相比 IP 地址更便于记忆。因此,大多数网络应用通常使用域名访问目标主机,而不是直接使用 IP 地址。

例如,当我们在浏览器地址栏中输入某个 Web 服务器的域名时,用户主机首先会在自己的 DNS 高速缓存中查找该域名对应的 IP 地址。

浏览器缓存查询

如果未找到,则向网络中的某台 DNS 服务器查询。DNS 服务器中包含域名与 IP 地址的映射关系数据库。当 DNS 服务器收到 DNS 查询报文后,在其数据库中查询,并将查询结果发送给用户主机。

DNS 服务器查询

此时,用户主机的浏览器可以通过 Web 服务器的 IP 地址对其进行访问。

浏览器访问

3. 域名的层级关系

层级关系特点:

  • 因特网采用层次树状结构的域名结构。
  • 域名由若干分量组成,各分量之间用“点”隔开,分别代表不同级别的域名。
  • 每一级域名由英文字母和数字组成,不超过 63 个字符,不区分大小写。
  • 级别最低的域名写在最左边,而顶级域名写在最右边。
  • 完整域名长度不超过 255 个字符。
  • 域名系统不规定域名包含多少级,也不规定每一级域名的含义。
  • 各级域名由其上一级域名管理机构管理,顶级域名由 ICANN 管理。

因特网的域名空间:

域名空间结构

上图展示了 DNS 服务器的部分层次结构,从上到下依次为根域名服务器、顶级域名服务器和权威域名服务器。域名与 IP 地址的映射关系必须保存在域名服务器中,供其他应用查询。显然,不能将所有信息存储在一台域名服务器中。DNS 使用分布在各地的域名服务器来实现域名到 IP 地址的转换。

域名服务器可以分为以下四种类型:

  • 根域名服务器:根域名服务器是最高层次的域名服务器。每个根域名服务器都知道所有顶级域名服务器的域名及其 IP 地址。因特网上共有 13 个不同 IP 地址的根域名服务器。当本地域名服务器向根域名服务器发出查询请求时,路由器将查询请求报文转发到离 DNS 客户最近的一个根域名服务器。这加快了 DNS 查询过程,同时更合理地利用了因特网资源。
  • 顶级域名服务器:这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。收到 DNS 查询请求时,给出相应回答(可能是最终结果,也可能是下一级权限域名服务器的 IP 地址)。
  • 权限域名服务器:这些域名服务器负责管理某个区的域名。每个主机的域名都必须在某个权限域名服务器处注册登记。因此,权限域名服务器知道其管辖的域名与 IP 地址的映射关系。此外,权限域名服务器还知道其下级域名服务器的地址。
  • 本地域名服务器:本地域名服务器不属于上述域名服务器的等级结构。当主机发出 DNS 请求报文时,报文首先被送往该主机的本地域名服务器。本地域名服务器起代理作用,将报文转发到上述域名服务器的等级结构中。本地域名服务器离用户较近,一般不超过几个路由器的距离,也可能在同一个局域网中。本地域名服务器的 IP 地址需要直接配置在需要域名解析的主机中。

4. DNS 域名解析过程

域名解析包含两种查询方式:递归查询迭代查询

递归查询

如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户端的身份,向其他根域名服务器继续发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询。

我们通过一个例子来了解 DNS 递归查询的工作原理。假设图中的主机(IP 地址为 m.xyz.com)想知道域名 y.abc.com 的 IP 地址。

  1. 主机首先向其本地域名服务器进行递归查询。
  2. 本地域名服务器收到递归查询委托后,也采用递归查询的方式向某个根域名服务器查询。
  3. 根域名服务器收到递归查询委托后,也采用递归查询的方式向某个顶级域名服务器查询。
  4. 顶级域名服务器收到递归查询委托后,也采用递归查询的方式向某个权限域名服务器查询。

查询过程如下图所示:

递归查询过程

当查询到域名对应的 IP 地址后,查询结果会在之前受委托的各域名服务器之间传递,最终传回给用户主机。

查询结果传递过程如下图所示:

递归查询结果传递

迭代查询

当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应查询哪个域名服务器,然后让本地服务器进行后续查询。

迭代查询过程如下:

  1. 主机首先向其本地域名服务器进行递归查询。
  2. 本地域名服务器采用迭代查询,向某个根域名服务器查询。
  3. 根域名服务器告诉本地域名服务器,下一步应查询的顶级域名服务器的 IP 地址。
  4. 本地域名服务器向顶级域名服务器进行迭代查询。
  5. 顶级域名服务器告诉本地域名服务器,下一步应查询的权限域名服务器的 IP 地址。
  6. 本地域名服务器向权限域名服务器进行迭代查询。
  7. 权限域名服务器告诉本地域名服务器所查询域名的 IP 地址。
  8. 本地域名服务器最后将查询结果告诉主机。

查询过程如下图所示:

迭代查询过程

由于递归查询对被查询的域名服务器负担较大,通常采用以下模式:从请求主机到本地域名服务器的查询为递归查询,而其余查询为迭代查询。

高速缓存

为了提高 DNS 查询效率,减轻根域名服务器的负荷,减少因特网上的 DNS 查询报文数量,域名服务器广泛使用高速缓存。高速缓存用于存放最近查询过的域名以及从何处获得域名映射信息的记录。

由于域名到 IP 地址的映射关系并非永久不变,为保持高速缓存中的内容正确,域名服务器应为每项内容设置计时器,并删除超过合理时间的项(例如,每个项目存放两天)。

不仅在本地域名服务器中需要高速缓存,在用户主机中也需要。许多用户主机在启动时从本地域名服务器下载域名和 IP 地址的全部数据库,维护存放最近使用的域名的高速缓存,并且只在缓存中找不到域名时才向域名服务器查询。同理,主机也需要保持高速缓存中内容的正确性。

例如,如果本地域名服务器不久前已有用户查询过域名 y.abc.com 的 IP 地址,则本地域名服务器的高速缓存中应存有该域名对应的 IP 地址。因此,可以直接将高速缓存中存放的上次查询结果(即 y.abc.com 的 IP 地址)告诉用户。

缓存示意图如下:

DNS 缓存示意图

5. DNS 相关面试问题

1. DNS 为什么使用 UDP?

更准确的答案是 DNS 既使用 UDP 也使用 TCP。当进行区域传送(主域名服务器向辅助域名服务器传送变化数据)时,会使用 TCP,因为数据量较大,而 TCP 允许更长的报文长度,从而保证数据的正确性。

当客户端向 DNS 服务器查询域名(域名解析)时,一般返回内容不会超过 UDP 报文的最大长度(512 字节)。使用 UDP 传输时,无需经过 TCP 三次握手过程,从而大大提高响应速度。但这也要求域名解析器和域名服务器必须自行处理超时和重传,以保证可靠性。

2. 递归查询和迭代查询的区别?

递归查询:如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户端的身份,向其他根域名服务器继续发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询。

迭代查询:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的 IP 地址,要么告诉本地服务器下一步应查询哪个域名服务器,然后让本地服务器进行后续查询。

3. 使用域名访问 Web 服务器的过程

从地址栏输入 URL 到显示页面都发生了什么?2021-10-24 10:27:47

下面我们就来探讨一下从输入 URL 后到响应,都经历了哪些过程。

3.1 DNS 解析

我们在用户 PC 中使用网页浏览器来访问外部服务器的内容,在网页浏览器的地址栏中输入外部服务器的域名。比如我们输入 www.porttest.com,用户 PC 中的 DNS 客户端进程会发送一个 DNS 查询请求报文,其内容为域名 www.porttest.com 所对应的 IP 地址是什么?

DNS 的查询请求报文需要使用运输层的 UDP 协议封装成 UDP 用户数据报,其首部中的源端口字段值在短暂端口号 49151~65535 中挑选一个未被占用的端口号用来表示 DNS 客户端进程进程,例如 49152。目的端口字段的值设置为 53,这是 DNS 服务器端进程所使用的熟知端口号。

在这里插入图片描述

之后用户 PC 将 UDP 用户数据报封装在 IP 数据报中通过以太网发送给 DNS 服务器。

在这里插入图片描述

DNS 服务器端收到该数据报后,从中解封出 UDP 用户数据报。

UDP 首部中的目的端口号为 53,这表明应将该 UDP 用户数据报的数据载荷部分,也就是 DNS 查询请求报文,交付给本服务器中的 DNS 服务器端进程。DNS 服务器端进程解析 DNS 查询请求报文的内容,然后按其要求查找对应的 IP 地址。

首先,查询请求会先找到本地 DNS 服务器来查询是否包含 IP 地址,如果本地 DNS 无法查询到目标 IP 地址,就会向根域名服务器发起一个 DNS 查询。

如果根域名服务器无法告知本地 DNS 服务器下一步需要访问哪个顶级域名服务器,就会使用递归查询。

如果根域名服务器能够告知 DNS 服务器下一步需要访问的顶级域名服务器,就会使用迭代查询。

再由根域名服务器 -> 顶级域名服务器 -> 权威 DNS 服务器后,由权威服务器告诉本地服务器目标 IP 地址,再由本地 DNS 服务器告诉用户需要访问的 IP 地址。

下图是 DNS 服务器层次系统解析域名 y.abc.com 的 IP 地址过程。

在这里插入图片描述

得知目标 IP 地址之后,DNS 服务器会给用户 PC 发送 DNS 的响应报文,其内容为域名 www.porttest.com 所对应的 IP 地址是 192.168.0.3。

DNS 响应报文需要使用运输层的 UDP 协议封装成 UDP 用户数据报,其首部中的原端口字段的值设置为熟知端口号 53,表明这是 DNS 服务器端进程所发送的 UDP 用户数据报,目的端口字段的值设置为 49152,这是之前用户 PC 中发送 DNS 查询请求报文的 DNS 客户端进程所使用的短暂端口号。

在这里插入图片描述

DNS 服务器之后将 UDP 用户数据报封装在 IP 数据报中,通过以太网发送给用户 PC。

在这里插入图片描述

用户 PC 收到该数据报后,从中解封出 UDP 用户数据报。UDP 首部中的目的端口号为 49452,这表明应将该 UDP 用户数据报的数据载荷部分,也就是 DNS 的响应报文交付给用户 PC 中的 DNS 客户端进程。DNS 客户端进程解析 DNS 响应报文的内容,就可知道自己之前所请求的外部服务器的域名所对应的 IP 地址为 192.168.0.3。

在这里插入图片描述

3.2 TCP 连接

用户 PC 的浏览器通过 DNS 获取到 Web 服务器真正的 IP 地址后,便向 Web 服务器发起 TCP 连接请求,通过 TCP 三次握手建立好连接后,浏览器便可以将 HTTP 请求数据发送给 Web 服务器了。

在这里插入图片描述

3.3 发起 HTTP 请求

现在用户 PC 中的 HTTP 客户端进程可以向 Web 服务器发送 HTTP 请求报文了。其内容为**首页内容是什么?**HTTP 请求报文需要使用运输层的 TCP 协议封装成 TCP 报文段,其首部中的源端口字段的值在短暂端口号 49151~65535 中挑选一个未被占用的用来表示 HTTP 客户端进程。

例如:源端口仍然使用之前用过的 49152,目的端口字段的值设置为 80,这是 HTTP 服务器端进程所使用的熟知端口号,之后将 TCP 报文段封装在数据报中,通过以太网发送给 Web 服务器。

在这里插入图片描述

3.4 处理请求

Web 服务器收到该数据报后,从中解封出 TCP 报文段,TCP 首部中的目的端口号为 80,, 这表明应该将该 TCP 报文段的数据载荷部分,也就是 HTTP 请求报文交付给本服务器中的 HTTP 服务器端进程。

HTTP 服务器端进程解析 HTTP 请求报文的内容,然后按其要求查找首页内容,之后会给用户 PC 发送 HTTP 响应报文,其内容是 HTTP 客户端所请求的首页内容。

HTTP 响应报文需要使用运输层的 TCP 协议封装成 TCP 报文段,其首部中的源端口号字段的值设置为熟知端口号 80,表明这是 HTTP 服务器端进程所发送的 TCP 报文段,目的端口字段的值设置为 49152,这是之前用户 PC 中发送 HTTP 请求报文的 HTTP 客户端进程所使用的短暂端口号。

在这里插入图片描述

之后 Web 服务器将 TCP 报文段封装在 IP 数据报文中,通过以太网发送给用户 PC。

在这里插入图片描述

3.5 浏览器渲染

用户 PC 收到该数据报后,从中解封出 TCP 报文段。TCP 首部中的目的端口号为 49152,, 这表明应该将该 TCP 报文段的数据载荷部分,也就是 HTTP 响应报文交付给用户 PC 中的 HTTP 客户端进程,HTTP 客户端进程解析 HTTP 响应报文的内容,并在网页浏览器中进行显示。

在这里插入图片描述

3.6 TCP 连接断开

最后客户端和服务器通过四次挥手终止 TCP 连接。

在这里插入图片描述

3.7 总结

将上述过程总结成流程图,如下如所示:

用户输入网址
DNS 解析
TCP 连接
发起 HTTP 请求
处理请求
浏览器渲染
TCP 连接断开

文字总结:

DNS 解析:当用户输入一个网址并按下回车键的时候,浏览器获得一个域名,而在实际通信过程中,我们需要的是一个 IP 地址,因此我们需要先把域名转换成相应 IP 地址。

TCP 连接:浏览器通过 DNS 获取到 Web 服务器真正的 IP 地址后,便向 Web 服务器发起 TCP 连接请求,通过 TCP 三次握手建立好连接后,浏览器便可以将 HTTP 请求数据发送给服务器了。

发送 HTTP 请求:浏览器向 Web 服务器发起一个 HTTP 请求,HTTP 协议是建立在 TCP 协议之上的应用层协议,其本质是在建立起的 TCP 连接中,按照 HTTP 协议标准发送一个索要网页的请求。在这一过程中,会涉及到负载均衡等操作。

处理请求并返回:服务器获取到客户端的 HTTP 请求后,会根据 HTTP 请求中的内容来决定如何获取相应的文件,并将文件发送给浏览器。

浏览器渲染:浏览器根据响应开始显示页面,首先解析 HTML 文件构建 DOM 树,然后解析 CSS 文件构建渲染树,等到渲染树构建完成后,浏览器开始布局渲染树并将其绘制到屏幕上。

断开连接:客户端和服务器通过四次挥手终止 TCP 连接。

4. DNS 解析过程

做一个总结:

浏览器缓存 ——> 系统 hosts 文件 ——> 本地 DNS 解析器缓存 ——> 本地域名服务器(本地配置区域资源、本地域名服务器缓存)——> 根域名服务器 ——> 主域名服务器 ——> 下一级域名服务器

客户端 ——> 本地域名服务器(递归查询)
本地域名服务器 ——> DNS 服务器的交互查询(迭代查询)


DNS:DNS 域名解析过程及原理

snowball_li 于 2023-05-12 10:22:58 发布

文章介绍了 DNS 和域名的基本概念,包括 IP 地址与域名的区别,DNS 作为域名系统的角色,如何将域名转换为 IP 地址,以及域名结构和 DNS 服务器的工作机制,如主域名服务器与辅助域名服务器的关系,DNS 缓存和解析过程。此外,还提到了 DNS 正向和反向解析,以及 DNS 劫持的问题。

摘要由 CSDN 通过智能技术生成。

一、理解 IP 和域名

我们首先要了解域名和 IP 地址的区别。

IP 地址是互联网上计算机的唯一逻辑地址,通过 IP 地址实现不同计算机之间的通信。每台联网计算机都通过 IP 地址相互联系和区分。

但由于 IP 地址是由一串数字组成,难以记忆,因此人们在 IP 地址的基础上发展出了一种更易识别的符号化标识——域名。域名由字母和数字组成,相比 IP 地址更易于记忆,逐渐成为互联网用户访问的主要入口。用户访问网站时,既可以输入 IP 地址,也可以输入域名,两者在访问上是等价的,都可以访问对应的 Web 网站。

二、理解 DNS 域名系统(Domain Name System)

DNS 是互联网的一项服务,在 TCP/IP 网络中具有重要地位,能够提供域名与 IP 地址的解析服务。DNS 是一个将域名和 IP 地址相互映射的分布式数据库,使人更方便地访问互联网。DNS 使用 UDP 端口 53。当前,每一级域名长度限制为 63 个字符,域名总长度不能超过 253 个字符。

DNS 的分布式机制支持有效且可靠的名字到 IP 地址的映射。多数名字可在本地映射,不同站点的服务器相互合作能够解决大网络的名字与 IP 地址的映射问题。单个服务器的故障不会影响 DNS 的正常操作。

DNS 命名系统采用层次逻辑结构,如同一棵倒置的树,这个逻辑树形结构称为域名空间。由于 DNS 划分了域名空间,各机构可以在自己的域名空间内创建 DNS 信息。

  • 域名系统_百度百科:链接

三、理解域和域名

3.1 域

DNS 树的每个节点代表一个域,通过这些节点对整个域名空间进行划分,形成层次结构。域名空间的每个域的名字通过域名表示。

3.2 域名

通常由一个完全合格域名(FQDN)标识。FQDN 能准确表示其相对于 DNS 域树根的位置,即从节点到 DNS 树根的完整表述方式。从节点到树根采用反向书写,并将每个节点用“.”分隔。例如,对于域名 baidu.com,其完全正式域名(FQDN)为 baidu.com。

四、域名结构树

  • 域名结构 - 知乎:链接

域名结构树

五、DNS 和域名的关系

域名只是一个标识,DNS 是域名解析系统。当用户输入一个域名时,DNS 开始工作,向域名对应的 IP 地址请求。找到域名对应的 IP(服务器)后,返回结果给访问者,用户即可看到该域名对应的网页。这些 DNS 系统通常是不公开的。

六、主域名服务器与辅助域名服务器的关系

6.1 理解

用户访问域名时,实际并非直接访问承载业务的服务器,而是先解析获取域名对应的公网 IP 地址,再用该 IP 发送请求。解析过程会先在电脑本地缓存查询,若未找到,则向上级 DNS 服务器请求。

当辅助服务器启动时,它与主控服务器连接并启动一次区传输。辅助服务器定期与主控服务器通信,查看区数据是否改变。如果改变,则启动一次数据更新传输。

设置 DNS 服务器时,服务器管理员可以选择将 DNS 服务器指定为主服务器或辅助服务器(从服务器)。在某些情况下,服务器可以是一个区域的主服务器,也可以是另一个区域的辅助服务器。但每个区必须有主服务器,且每个区至少要有一台辅助服务器,否则如果该区的主服务器崩溃,将无法解析该区的名称。

6.2 DNS 主服务器

主服务器托管控制区域文件,该文件包含域的所有权威信息(例如域的 IP 地址及管理信息)。主服务器直接从本地文件获取信息,且只能在主服务器上更改区域的 DNS 记录,然后主服务器才能更新辅助服务器。

6.3 DNS 辅助服务器

辅助服务器包含区域文件的只读副本,通过区域传输从主服务器获取信息。每个区域只能有一个主 DNS 服务器,但可以有任意数量的辅助 DNS 服务器。无法在辅助服务器上更改区域的 DNS 记录,但在某些情况下,辅助服务器可以将更改请求传递到主服务器。

6.4 为什么要有辅助 DNS 服务器 / 辅助服务器的优点

6.4.1 容错能力

配置辅助服务器后,如果主服务器崩溃,客户机仍能解析该区的名称。通常,主服务器和辅助服务器安装在不同子网中,这样即使一个子网的连接中断,DNS 客户机仍能查询另一个子网上的名称服务器。

6.4.2 减少广域链路的通信量

如果某个区在远程有大量客户机,可以在远程添加该区的辅助服务器,并将远程客户机配置为先查询这些服务器。这样可以防止远程客户机通过慢速链路进行 DNS 查询。

6.4.3 减轻主服务器的负载

辅助服务器可以回答该区的查询,从而减少主服务器必须回答的查询数量。

主 DNS 服务器包含所有相关资源记录,可以处理域的 DNS 查询。许多注册商至少需要一个辅助 DNS 服务器。这些辅助服务器的好处是它们在主 DNS 服务器关闭时提供冗余,并有助于将请求的负载分配到域,以防止主服务器过载,从而导致拒绝服务。它们可以通过循环 DNS 实现这一点,循环 DNS 是一种负载平衡技术,旨在为群集中的每个服务器发送大致相等的流量。

七、DNS 服务器与缓存

7.1 DNS 服务器

运行 DNS 服务器程序的计算机,存储 DNS 数据库信息。DNS 服务器尝试解析客户机的查询请求。在解答查询时,如果 DNS 服务器可以提供所请求的信息,则直接返回解析结果;如果该 DNS 服务器没有相应的域名信息,则为客户机提供另一个能帮助解析查询的服务器地址;如果以上两种方法均失败,则返回客户机没有所请求的信息或请求的信息不存在。

7.2 DNS 缓存

DNS 服务器在解析客户机请求时,如果本地没有该 DNS 信息,则会询问其他 DNS 服务器。当其他域名服务器返回查询结果时,该 DNS 服务器会将结果记录在本地缓存中,形成 DNS 缓存。当下一次客户机提交相同请求时,DNS 服务器可以直接使用缓存中的 DNS 信息进行解析。

八、本地 DNS 服务器

8.1 观点一

通过域名访问 Internet 上的网站或服务器需要使用 DNS 进行解析。客户端电脑使用的 DNS 就是本地 DNS 服务器。本地 DNS 服务器会向权威 DNS 获取解析记录并返回给用户,并根据解析记录的 TTL 值缓存到自己服务器。本地 DNS 服务器一般是网络服务商提供的 DNS,也可以自己修改为常用的公共 DNS。

8.2 观点二

在通过浏览器缓存及 host 文件都无法解析域名的情况下,操作系统会将该域名发送给计算机网络配置中 DNS 对应的地址(LDNS),即本地区的域名服务器。如果是在学校接入互联网,那么本地区的域名服务器通常在学校内;如果是在小区接入互联网,那么本地区的域名服务器就是提供接入服务的运营商(如电信或联通)。

8.3 观点三

本地域名服务器(查询代理和 DNS 查询结果缓存):只是一个查询代理。

8.4 观点四

我们电脑上设置的 DNS,是指当我们本地电脑访问域名时,首先接入哪台服务器,进而进入哪些 DNS 系统。

相关链接:

  • 本地 DNS 服务器是什么?- 华为云
  • 什么叫本地 DNS 服务器?这里的“本地”具体什么意思呢?_百度知道
  • 本地 dns 服务器到底是什么?有没有精确的概念? - 知乎

九、DNS 域名解析过程

9.1 从浏览器缓存中查询

浏览器会存储一定时间的 DNS 记录。操作系统不会告诉浏览器每个 DNS 记录的保存时限,不同浏览器的保存时限为一个固定值(不同浏览器情况不同,一般在 2-30 分钟)。检查是否有相应的域名和 IP 对应关系,如果有,则向其 IP 地址发送请求。

9.2 从操作系统缓存中查询

如果浏览器中没有包含想要的缓存记录,浏览器会发起操作系统请求,继续查询操作系统缓存(hosts 文件)。

9.3 从路由器中查询 DNS 缓存

请求持续发送到路由器,它通常有自己的 DNS 缓存。

9.4 从 ISP 中查询 DNS 缓存

下一个被查询的地方是 ISP 缓存 DNS 的服务器。

9.5 域名服务器迭代查询,根据返回的地址逐级向上查询

DNS 查询过程

浏览器客户端向本地 DNS 服务器发送一个含有域名(如 https://www.baidu.com)的 DNS 查询报文。本地 DNS 服务器将查询报文转发到根 DNS 服务器。根 DNS 服务器注意到其 com 后缀,于是向本地 DNS 服务器返回 com DNS 服务器的 IP 地址。本地 DNS 服务器再次向 com DNS 服务器发送查询请求,com DNS 服务器注意到其 https://www.baidu.com 后缀,并用负责该域名的权威 DNS 服务器的 IP 地址作为回应。最后,本地 DNS 服务器将含有 https://www.baidu.com 的 IP 地址的响应报文发送给客户端。

从客户端到本地服务器属于递归查询,而 DNS 服务器之间的交互属于迭代查询。正常情况下,本地 DNS 服务器的缓存中已有 com DNS 服务器的地址,因此请求根域名服务器这一步不是必需的。

DNS 查询过程示例

DNS 查询过程示例

DNS 查询过程示例

十、DNS 正向解析和反向解析

10.1 正向解析

正向解析是指域名到 IP 地址的解析过程。

10.2 反向解析

反向解析是从 IP 地址到域名的解析过程。反向解析的作用是验证服务器的身份。

相关链接:

  • 什么是 DNS 的正向解析与反向解析?代码实现?_dns 正向解析和反向解析_程序猿编码的博客 - CSDN 博客
  • DNS 的正向和反向解析_dns 正向解析和反向解析_叁煌蛋的博客 - CSDN 博客

十一、DNS 资源记录类别

相关链接:

  • DNS 资源记录类型
  • DNS 资源记录的七类 - 爱码网
  • 常见的 DNS 记录有哪些

十二、理解 DNS 劫持

相关链接:

  • DNS 劫持_全球百科
  • 域名劫持_百度百科

参考链接

  • 网络:IP 与 MAC_web 前端获取 mac 地址_snow@li 的博客 - CSDN 博客
  • 本地 DNS 服务器的配置_〆是凌风呀的博客 - CSDN 博客
  • DNS 工作原理_dns 为什么是树型_宝山的博客的博客 - CSDN 博客
  • DNS 域名详细解析过程 (最全面,看这一篇就够)_dns 域名解析_bangshao1989 的博客 - CSDN 博客
  • 百度安全验证
  • 从输入 URL 到浏览器显示页面的流程_white camel 的博客 - CSDN 博客
  • 详解浏览器解析一个 URL 的全过程_url 解析_子木呀的博客 - CSDN 博客
  • DNS 域名详细解析过程_dns 域名解析过程_黄瓜炒肉的博客 - CSDN 博客
  • DNS 解析过程及原理_百度百科
  • DNS 域名解析过程_哔哩哔哩_bilibili

DNS 域名解析概念;主从、缓存服务器、父域、子域部署实验步骤

变成我已于 2024-06-14 21:37:09 修改

DNS 系统的作用

DNS(Domain Name System,域名系统)的主要作用包括:

  • 正向解析:根据域名查找对应的 IP 地址。
  • 反向解析:根据 IP 地址查找对应的域名。
  • 分布式数据结构:通过分布式架构提高解析效率和可靠性。

DNS 系统类型

缓存域名服务器

  • 也称为 DNS 缓存服务器。
  • 通过向其他域名服务器查询获得域名到 IP 地址的记录。
  • 将域名查询结果缓存到本地,提高重复查询的速度。

主域名服务器

  • 特定 DNS 区域的权威服务器,具有唯一性。
  • 负责维护该区域内所有域名到 IP 地址的映射记录。
  • 需要自行建立所负责区域的地址数据文件。

从域名服务器

  • 也称为辅助域名服务器,是对主域名服务器的热备份。
  • 其维护的域名到 IP 地址记录来源于主域名服务器。
  • 需要从主域名服务器自动同步区域地址数据库。

Bind 软件

  • Bind(Berkeley Internet Name Daemon) 是应用最广泛的 DNS 服务程序。
  • 官方站点:ISC - Internet Systems Consortium
  • 相关软件包:
    • bind-9.9.4-37.el7.x86_64.rpm
    • bind-utils-9.9.4-37.el7.x86_64.rpm(工具集)
    • bind-libs-9.9.4-37.el7.x86_64.rpm(函数库)
    • bind-chroot-9.9.4-37.el7.x86_64.rpm(伪装目录功能)

部署缓存域名服务器实验步骤

在作为缓存域名服务器的主机上配置(192.168.10.101)。

1.1 安装相关软件包

[root@localhost ~]# yum -y install bind

打开软件配置文件:

[root@localhost ~]# vim /etc/named.conf

配置文件说明:图中部分是全局配置选项,修改以下两行参数:

代码说明
listen-on port 53 { 192.168.10.101; };监听端口,监听本机网卡的 53 号端口。
UDP 用于接收客户端请求,TCP 用于服务器间同步数据。
listen-on-v6 port 53 { ::1; };监听 IPv6 地址
::1 对应 IPv4 的 127.0.0.1。
directory区域文件存储目录。
dump-file缓存数据库文件存储位置。
statistics-file状态统计文件存储位置。
memstatistics-file内存统计信息文件存储位置。
recursing-file安全备份相关文件存储位置。
secroots-file执行递归查询的文件存储位置。
allow-query允许查询的主机
any 表示允许所有主机查询域名。

向下翻,可以看到两部分配置选项:

其中 zone "." 表示根域,根域有 13 个根服务器。

当前主机接收到 DNS 解析请求后,会将请求发给指定的服务器,服务器地址保存在 file 指定的 “named.ca” 文件中。

named.ca 文件中,可以看到 a~m 服务器的两种地址,a~m 也表示服务器的数量,共有 13 个。

1.2 启动 named 服务

[root@localhost named]# systemctl start named

将另一台虚拟机的 DNS 首选地址改为 192.168.10.101,并删除 DNS2:

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=192.168.10.101

重启网络服务,关闭防火墙以便进行实验:

[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl stop firewalld

还需关闭作为 DNS 缓存服务器的 101 主机的防火墙:

[root@localhost named]# systemctl stop firewalld

1.3 在作为测试 DNS 服务器的主机上配置(192.168.10.103)

使用 ping 命令测试 DNS 是否正常工作,

或者为 103 主机安装 bind-utils 软件包来使用 nslookup 功能测试解析 DNS,

部署正向查找主域名服务器实验步骤

在作为主域名服务器的主机上配置(192.168.10.101)。

1.1 编辑 /etc/named.conf 配置文件

[root@localhost ~]# vim/etc/named.conf

修改全局配置选项,

定义区域配置选项

保存并退出后重启服务。

此时重启服务可能会报错,查看系统日志最后十行内容可以发现原因:

tail /var/log/messages

原因是找不到配置文件中指定的正向查找区域文件

可以使用 named-checkconf 命令检查配置文件是否有错误:

[root@localhost named]# named-checkconf /etc/named.conf

如果命令执行后没有提示,说明配置文件没有错误。

然而,在配置文件的全局配置选项中,也指定了区域文件的存放位置。

1.2 拷贝示例文件并修改

$TTL 1D  # 有效解析记录的生命周期
@   IN SOA  @ rname.invalid. (  # 第二个 @ 符号,调整为配置文件中定义的区域名# SOA:起始授权机构,代表主域名服务器# rname.invalid:设备管理员的邮箱账号,由于 @ 符号与文件规则冲突,所以用 . 代替0   ; serial  # 更新序列号,从 0 开始,每次更新加 11D  ; refresh  # 刷新时间,重新下载数据文件的间隔时间1H  ; retry  # 重试时间,每小时重新同步一次1W  ; expire  # 失效时间,超过一周放弃下载3H ); minimum  # 无效解析记录生命周期# 告诉该区域有两台 DNS 服务器和一台邮件服务器
@   IN NS   ns1.example.com.IN NS   ns2.example.com.IN MX 10 mail.example.com.# NS:名称服务器# MX:邮件服务器;10:优先级,数字越小越优先(0~10)

修改后的文件如下图所示:

区域文件配置

A 记录表示域名到 IP 的解析过程:

* IN A 192.168.10.106

表示泛域名解析,当解析的名字在范围内时,按照具体条目解析;如果不在范围内,则按照泛域名解析指向具体条目。

此时重启 named 服务就不会报错了:

[root@localhost named]# systemctl restart named

使用 named-checkzone 命令检测区域文件的正确性:

[root@localhost named]# named-checkzone example.com /var/named/example.com.zone
zone example.com/IN: loaded serial 0
OK

1.3 修改文件的属主或属组

确保 named 服务能够正常访问该文件

如果文件的属组是 root,服务会认为没有权限读取文件,因此需要刷新权限认定。

[root@localhost named]#chown :named example.com.zone

再次重启 named 服务:

[root@localhost named]# systemctl restart named

此时,在作为测试 DNS 服务器的主机(192.168.10.103)上测试域名解析。

部署反向查找主域名服务器实验步骤

在作为主域名服务器的主机上配置(192.168.10.101)。

1. 修改配置文件

[roo@localhost ~]# vim /etc/named.conf

添加一个反向查找区域,保存并退出。

2. 拷贝示例文件并编辑

根据需要修改文件内容

3. 修改文件的属组

使用 named-checkzone 命令校验文件,重启 named 服务。

4. 在测试主机上验证

回到 103 主机,测试反向查找域名解析,也可以通过 IP 解析域名。

部署从服务器实验步骤

在作为从域名服务器的主机上配置(192.168.10.102)。

1. 配置环境

关闭防火墙,安装 bind 相关依赖软件包。

systemctl stop firewalld
yum -y install bind

打开配置文件,

[root@localhost ~]# vim /etc/named.conf

修改全局参数,


定义区域,

2. 重启服务

查看程序目录下生成的备份数据。

如果想要测试从域名服务器的域名解析是否成功,在 103 主机将网卡配置的 DNS1 改为 192.168.10.102,即可实现从域名服务器解析测试。

DNS 分离解析实验步骤

1. 实现外网主机与服务器通信

开启 3 个 Linux 虚拟机,其中 Linux 103 作为内网客户端,Linux 102 作为外网客户端,Linux 101 作为 DNS 服务器。

为 101 服务器主机添加一个网卡,操作如图所示:

img

将虚拟机网卡配置修改为实验用的同一网段 IP,如图:

img

修改网络连接模式为仅主机模式,过程如下:

img

外网主机(102)同样需要将网络连接模式改为仅主机模式,如此服务器和外网主机实现桥接。同时修改外网主机 IP 地址和 DNS 服务器,由于此次实验不需要外网主机和内网主机能够互相访问,因此不设置网关,相关操作展示如图:

img

重启网络服务,为便于实验,关闭外网主机的防火墙,步骤如下:

img

此时可看到新网卡已接入,但由于没有相应配置文件,所以没有 IP。因此,我们拷贝一个配置文件,以便后续修改,操作如图:

img

对拷贝的配置文件进行修改,修改内容如下:

img

保存并退出配置文件,然后重启网络服务,操作如下:

img

此时,外网主机和 DNS 服务器(101)已能够通信,验证结果如图:

img

2. 准备配置文件和查找文件

在 DNS 服务器(101)上安装 bind 相关软件包,安装过程展示如图:

img

对相关配置文件进行编辑,编辑内容如下:

img

由于要进行分离解析,服务器存在两个网卡,因此需将监听地址改为 any,修改操作如图:

img

创建视图,针对内网和外网客户端的域名解析请求进行定义,定义方式如下:

img

进入程序目录,准备 lan.bt.com.zone 文件,准备过程展示如图:

img

拷贝一份示例文件,针对内网文件进行修改,修改操作如下:

img

在内网文件中添加解析条目,添加内容如下:

img

保存并退出内网文件,接着拷贝一份针对外网的查找文件,拷贝操作如下:

img

将外网查找文件中的 IP 地址修改为外网网段,修改内容如下:

img

保存并退出外网查找文件,然后修改两个文件的属主或属组,修改操作如下:

img

检测配置文件是否存在错误,检测操作及结果展示如图:

img

对 zone 文件进行检测,检测操作及结果如下:

img

关闭防火墙,并开启 named 服务,操作如下:

img

3. 测试

在外网主机(102)上进行测试,首先安装 bind-utils 软件包,然后使用 nslookup 命令进行解析,操作及解析结果展示如图:

img

在内网主机(103)上进行测试,同样能够解析到内网访问 www.bt.com 这个域名的 IP,解析结果展示如图:

img

通过上述操作,实现了公私分离的解析效果,即一个域名可以对应多个 IP 地址。

多域名解析

对相关配置文件进行编辑,编辑内容如下:

img

针对内网客户端增加区域,增加内容如下:

img

准备出第二个区域所需的文件,准备过程展示如图:

img

修改区域对应的域名,保存并退出,修改操作如下:

img

修改文件的属主或属组,然后重启 named 服务,操作如下:

img

在内网主机进行测试,使用 nslookup 命令能够正确解析域名到 IP,测试结果展示如图:

img

子域(子区域)

概念

子域用于将域名空间划分成更小的部分,从而允许对不同部分进行单独管理和控制。每个域名都可以包含多个子域。子域是在主域名的基础上创建的,通过在主域名前添加一个附加标识符而形成的域。例如,在 example.com 这个主域名下创建 mail.example.com,mail 就是一个子域。

实验

准备 192.168.10.101、192.168.10.102、192.168.10.103 三台虚拟机。需要注意的是,子域的实验需要恢复 Linux 初始的快照。

配置父域服务器(在 192.168.10.101 主机操作)

设置基本环境,关闭防火墙和内核安全机制,安装 bind 软件包,操作过程展示如图:

img

对全局配置选项进行修改,修改内容如下:

img
img

由于 named.conf 文件的末尾有 include 语句,因此我们前往 /etc/named.rfc1912.zones 文件编写内容。include 的作用是将其他文件中的信息合并到当前文件中,使得配置更加模块化和易于管理,相当于复制粘贴了指定文件的内容到 include 语句的当前行。相关操作展示如图:

img

对 include 语句中的文件进行编辑,编辑操作如下:

img

在该文件中添加区域,以实现模块化配置文件,使管理更加容易,添加内容如下:

img

在 named 服务存放 zone 文件的目录利用模板,复制出上一步定义的文件名,操作过程如下:

img

对复制出的文件进行编写,定义父域和子域,编写内容如下:

img

将文件属主设为 named,然后重启服务,操作如下:

img

配置子域服务器(在 192.168.10.103 主机操作)

关闭防火墙和内核安全机制,安装 bind 软件包,操作过程展示如图:

img

对全局配置进行修改,修改内容如下:

img
img

关闭对解析结果的验证,不作为权威解析服务器去应答,保存并退出,操作如下:

img

打开相关文件,操作如下:

img

forward(转发器)的作用是,如果当前主机接受到一个解析 example.com 的请求,就把该请求转发到指定的服务器。当一个 DNS 服务器拥有子区域的时候,并且把该子区域交给指定的主机来完成管理,这种配置方式叫做委派。相关配置操作展示如图:

img

保存并退出。进入存放区域文件的目录下,拷贝出子域服务器所用的提供数据的文件,并对该文件进行编辑,操作过程如下:

img

文件内容如下:

img

保存并退出,修改文件的属主或属组,然后开启服务,操作如下:

img

测试(在 192.168.10.102 主机操作)

打开网卡配置文件,操作如下:

img

将首选 DNS 修改为子域服务器,修改操作如下:

img

重启网络服务:

[root@localhost ~]# systemctl restart network

安装 bind-utils 软件包:

[root@localhost ~]# yum -y install bind-utils

使用 nslookup 命令进行测试,测试操作及结果展示如图:
img
img

区域的域名可以直接解析到,父区域的域名通过 DNS 服务器的转发器转发给 101 主机,101 解析完就发送回客户端。


via:

  • 域名解析过程 - CSDN 博客
    https://blog.csdn.net/yipiankongbai/article/details/25031461

  • DNS 解析流程详解 - CSDN 博客
    https://blog.csdn.net/taotongning/article/details/82626663

  • DNS 的解析过程 (知识点总结) - CSDN 博客
    https://blog.csdn.net/weixin_69884785/article/details/130219175

  • 多张图带你彻底搞懂 DNS 域名解析过程 - CSDN 博客
    https://blog.csdn.net/weixin_45629285/article/details/122969104

  • 面试官问我:从地址栏输入URL到显示页面都发生了什么?CSDN博客
    https://blog.csdn.net/weixin_45629285/article/details/120930370

  • 一次完整的HTTP事务是怎样一个过程?_雷纳科斯的技术博客_51CTO博客
    https://blog.51cto.com/linux5588/1351007

  • DNS:DNS 域名解析过程及原理 - CSDN 博客
    https://blog.csdn.net/snowball_li/article/details/130591320

  • DNS 域名解析概念;主从、缓存服务器、父域、子域部署实验步骤_主权威dns、从权威dns、缓存dns-CSDN博客
    https://blog.csdn.net/m0_65551023/article/details/139611026

  • DNS 服务器综合实验(包含 view 下主从 + 子域授权 + 转发域) - 51CTO 博客
    https://blog.51cto.com/juzhang/1893956

  • DNS— 正、反向解析;委派;主从;子域;转发;智能 dns 等的实现 - alonghub - 博客园
    https://www.cnblogs.com/along21/p/7657793.html

  • DNS 的主从、子域授权和转发服务器 - shenxm - 博客园
    https://www.cnblogs.com/shenxm/p/8457454.html

  • DNS 协议详解及报文格式分析 - CSDN 博客
    https://blog.csdn.net/tianxuhong/article/details/74922454


http://www.mrgr.cn/news/94215.html

相关文章:

  • 本地部署deepseek,局域网链接,添加个人知识库
  • linux docker 安装dify本地运行,及部署后运行出现502问题
  • sqli-lab靶场学习(八)——Less26-28
  • Kubernetes教程(七)了解集群、标签、Pod和Deployment
  • Tomato靶机攻略
  • Hashmap 键值对的value发生变化,是否需要重新put ?
  • Redis Sentinel (哨兵模式)深度解析:构建高可用分布式缓存系统的核心机制
  • 【深度学习】多元物料融合算法(一):量纲对齐常见方法
  • Linux机器之间排查网络连通问题
  • winform中chart控件解决显示大量曲线数据卡顿方法——删旧添新法
  • AI自动化编程初探
  • 机器人路径规划、轨迹优化系列课程
  • k8s面经
  • Django与模板
  • 27_Java2DRenderer结合freemarker动态生成图片
  • 【Linux内核系列】:文件系统
  • 本地部署 OpenManus 保姆级教程(Windows 版)
  • 关于WPS的Excel点击单元格打开别的文档的两种方法的探究【为单元格添加超链接】
  • 11 | 给 Gin 服务器添加中间件
  • Spring之生命周期Bean的生成过程